Testar um serviço do Cloud Run localmente

Durante o desenvolvimento, é possível executar e testar a imagem de contêiner localmente, antes da implantação. É possível usar o Cloud Code ou o Docker instalado localmente (em inglês) para executar e testar no local com acesso aos serviços do Google Cloud.

Docker

Para testar sua imagem de contêiner localmente usando o Docker, siga estas etapas:

  1. Use o comando do Docker:

    PORT=8080 && docker run -p 9090:${PORT} -e PORT=${PORT} IMAGE_URL

    IMAGE_URL por uma referência à imagem de contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/hello:latest; Se você usa o Artifact Registry, o repositório REPO_NAME já precisará ter sido criado. O URL tem o formato REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

    A variável de ambiente PORT especifica a porta que o aplicativo usará para detectar solicitações HTTP ou HTTPS. Esse é um requisito do contrato do ambiente de execução do contêiner. Neste exemplo, usamos a porta 8080.

  2. Abra http://localhost:9090 no seu navegador.

Se você tem pouca experiência trabalhando com contêineres, consulte o guia de primeiros passos com o Docker. Para saber mais sobre os comandos do Docker, consulte a documentação do Docker.

Acesso ao Docker com o Google Cloud

Se você estiver usando bibliotecas de cliente do Google Cloud para integrar seu aplicativo aos serviços do Google Cloud e ainda não tiver protegido esses serviços para controlar o acesso externo, será possível configurar o contêiner local para autenticação com o Google Cloud. serviços com o Application Default Credentials.

Para executar localmente:

  1. Consulte Primeiros passos da autenticação para ver instruções sobre como gerar, recuperar e configurar as credenciais da conta de serviço.

  2. As sinalizações de execução do Docker a seguir injetam as credenciais e a configuração do seu sistema local no contêiner local:

    1. Use a sinalização --volume (-v) para injetar o arquivo de credencial no contêiner (presumindo que você já tenha definido a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS na máquina):
      -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro
    2. Use a sinalização --environment (-e) para definir a variável GOOGLE_APPLICATION_CREDENTIALS no contêiner:
      -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
  3. Como opção, use este comando run do Docker totalmente configurado:

    PORT=8080 && docker run \
    -p 9090:${PORT} \
    -e PORT=${PORT} \
    -e K_SERVICE=dev \
    -e K_CONFIGURATION=dev \
    -e K_REVISION=dev-00001 \
    -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json \
    -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/FILE_NAME.json:ro \
    IMAGE_URL

    Observe que o caminho

    /tmp/keys/FILE_NAME.json
    mostrado no exemplo acima é um local razoável para colocar suas credenciais no contêiner.

    No entanto, outros locais de diretório também funcionarão. O requisito crucial é que a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS precisa corresponder ao local de ativação da vinculação dentro do contêiner.

    Além disso, com alguns serviços do Google Cloud, convém usar uma configuração alternativa para isolar a solução de problemas local do desempenho de produção e dos dados.

Emulador do Cloud Code

O plug-in do Cloud Code para os ambientes de desenvolvimento integrado do VS Code e da JetBrains permite executar e depurar localmente sua imagem de contêiner em um emulador do Cloud Run no seu ambiente de desenvolvimento integrado. O emulador permite configurar um ambiente que representa o serviço em execução no Cloud Run.

É possível configurar propriedades como alocação de memória e CPU, especificar variáveis de ambiente e definir conexões de banco de dados do Cloud SQL.

  1. Instale o Cloud Code em um ambiente de desenvolvimento integrado do VS Code ou da JetBrains (links em inglês).
  2. Siga as instruções para desenvolver e depurar localmente no ambiente de desenvolvimento integrado.
  3. VS Code: desenvolvimento e depuração no local
  4. IntelliJ: desenvolvimento e depuração no local

CLI gcloud

A Google Cloud CLI contém um ambiente de desenvolvimento local para emular o Cloud Run. Ele pode criar um contêiner a partir da origem, executar o contêiner na máquina local e recriar o contêiner automaticamente quando o código-fonte é alterado.

Para iniciar o ambiente de desenvolvimento local, siga estas etapas:

  1. Altere o diretório para o diretório que contém o código-fonte do seu serviço.

  2. Invocar o comando:

    gcloud beta code dev

Se houver um Dockerfile no diretório local, ele será usado para criar o contêiner. Se não houver um Dockerfile, o contêiner será criado com os buildpacks do Google Cloud.

Para ver o serviço em execução, acesse http://localhost:8080/ no seu navegador. Caso tenha especificado uma porta personalizada com a opção --local-port, lembre-se de abrir seu navegador para ela.

Para interromper o servidor local:

  • Mac OS e Linux: Control-C
  • Windows: Control-Break

Personalizar a configuração do serviço

É possível personalizar a configuração do Cloud Run do serviço em execução localmente usando um arquivo YAML. O formato YAML é o mesmo que pode ser usado para implantar um serviço do Cloud Run, mas é suportado apenas por um subconjunto das configurações do serviço do Cloud Run. O gcloud beta code dev procura e usa qualquer arquivo que termine em *.service.dev.yaml no diretório atual. Se nenhum for encontrado, ele usará qualquer arquivo que termine com *.service.yaml.

É possível definir as seguintes configurações para desenvolvimento local:

O campo de contêiner image não é obrigatório para o desenvolvimento local, porque a imagem é criada e fornecida ao serviço quando o comando é executado.

Use o exemplo de arquivo service.dev.yaml a seguir para desenvolvimento local:

  apiVersion: serving.knative.dev/v1
  kind: Service
  metadata:
    name: my-service-name
  spec:
    template:
      spec:
        containers:
        - env:
          - name: FOO
            value: bar

Testar usando credenciais

Para conceder permissão ao contêiner para usar os serviços do Google Cloud, você precisa fornecer a ele uma credencial de acesso.

  • Para conceder ao contêiner acesso a uma credencial usando sua própria conta, faça login usando gcloud e use a sinalização --application-default-credential:

    gcloud auth application-default login
    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --application-default-credential

  • Para fornecer as credenciais do aplicativo como uma conta de serviço, use a sinalização --service-account:

    gcloud beta code dev --dockerfile=PATH_TO_DOCKERFILE --service-account=SERVICE_ACCOUNT_EMAIL

    A sinalização --service-account faz o download e o armazenamento em cache de uma chave de conta de serviço localmente. O usuário é responsável por manter a chave segura e excluí-la quando não for mais necessária.

Confirmar se o código está sendo executado localmente

Ao testar localmente no Cloud Run, é possível confirmar no código que o contêiner está sendo executado localmente verificando a variável de ambiente K_REVISION, que o Cloud Run disponibiliza para todos os contêineres.

Docker

Para confirmar se você está executando seu código localmente na Google Cloud CLI, tente consultar a variável de ambiente K_REVISION. No entanto, como ela não foi definida, nenhum valor estará presente.

Acesso ao Docker com o Google Cloud

Se você usou os valores exatos da seção acima na etapa 3 para confirmar que está executando o código localmente na CLI do Google Cloud, consulte a variável de ambiente K_REVISION e procure o valor dev-00001 para confirmar se ele está sendo executado localmente.

Emulador do Cloud Code

Para confirmar se você está executando seu código localmente no Cloud Code, consulte a variável de ambiente K_REVISION e procure um valor de local para confirmar se ele está sendo executado localmente.

CLI gcloud

Para confirmar se você está executando seu código localmente na CLI do Google Cloud, consulte a variável de ambiente K_REVISION e procure um valor que comece com dev- para confirmar se ele está sendo executado localmente.

A seguir