Implantar um app do App Engine no ambiente flexível para o Cloud Run

ID da região

O REGION_ID é um código abreviado que o Google atribui com base na região que você selecionou ao criar o aplicativo. O código não corresponde a um país ou estado, ainda que alguns IDs de região sejam semelhantes aos códigos de país e estado geralmente usados. Para apps criados após fevereiro de 2020, o REGION_ID.r está incluído nos URLs do App Engine. Para apps existentes criados antes dessa data, o ID da região é opcional no URL.

Saiba mais sobre IDs de região.

Este guia descreve como implantar seus apps atuais no ambiente flexível no Cloud Run.

As etapas descritas neste guia não afetam a funcionalidade ou o fluxo de tráfego do app do App Engine. O serviço do Cloud Run recém-criado é uma réplica do serviço do App Engine que pode ser testada de forma independente.

O ambiente flexível do App Engine e o Cloud Run são plataformas de aplicativos totalmente gerenciadas e nativas de contêineres, mas diferem estruturalmente. Para entender as semelhanças e diferenças entre o App Engine e o Cloud Run, incluindo os benefícios da migração para o Cloud Run, consulte o resumo de comparação.

Para implantar no Cloud Run, escolha uma das seguintes estratégias:

  • Usar a configuração local de um arquivo app.yaml (recomendado): escolha essa opção para criar uma imagem de contêiner diretamente do código-fonte local e implantá-la no Cloud Run. Isso garante que todas as modificações locais recentes no código ou na configuração sejam incluídas na nova implantação.

  • Usar uma imagem criada anteriormente: essa opção é útil se você não tiver acesso ao código-fonte. Escolha essa opção para implantar uma cópia exata de uma versão que já está em execução no App Engine, sem recriar a imagem do contêiner. Isso é útil se você quiser verificar o comportamento da implantação ativa sem alterações de código.

Antes de começar

  1. Verifique se o aplicativo do App Engine é executado sem erros. Você precisa de acesso ao código-fonte do App Engine se escolher implantar usando a configuração local.

  2. Ative a API Cloud Run Admin e a API Artifact Registry:

    Ativar APIs

  3. Configure seu projeto e região usando o seguinte comando:

    gcloud auth login
    gcloud config set project PROJECT_ID
    gcloud config set run/region REGION
    gcloud components update
    

    Substitua:

    • PROJECT_ID: o Google Cloud ID do projeto.
    • REGION: a região em que você quer implantar o serviço do Cloud Run.
  4. Verifique se há recursos incompatíveis no aplicativo e remova-os antes de migrar para o Cloud Run. Para verificar a incompatibilidade do aplicativo sem realizar uma migração ou implantação, execute o seguinte comando:

    gcloud beta app migrate-to-run --dry-run
    

    Analise os resultados da verificação de compatibilidade e faça as alterações recomendadas, se necessário.

  5. Analise as seguintes diferenças do Cloud Run:

    • O Cloud Run usa o termo Revision em vez de Version para representar cada vez que você implanta alterações em um serviço específico. Implantar o app em um serviço no Cloud Run pela primeira vez cria a primeira revisão. Cada implantação subsequente de um serviço cria outra revisão. Saiba mais sobre como implantar no Cloud Run.

    • É possível implantar o código-fonte no Cloud Run usando a CLI gcloud para definir e gerenciar as configurações do app. O Cloud Run não requer configuração baseada em arquivo; no entanto, a configuração YAML é aceita.

    • Cada serviço implantado no Cloud Run usa o run.app domínio no URL para acessar o serviço publicamente.

    • Ao contrário dos serviços do App Engine que são públicos por padrão, os serviços do Cloud Run são particulares por padrão e exigem que você os configure para acesso público (não autenticado).

Funções exigidas

É possível criar uma nova conta de serviço ou usar a mesma conta de serviço gerenciado pelo usuário no Cloud Run que você está usando para o ambiente flexível. Você ou seu administrador precisa conceder à conta do implantador e à conta de serviço do Cloud Build as seguintes funções do IAM.

Clique para conferir os papéis necessários para a conta do implantador

Para receber as permissões necessárias para criar e implantar a partir da origem, peça ao administrador para conceder a você as seguintes funções do IAM roles:

Clique para conferir os papéis necessários para a conta de serviço do Cloud Build

O Cloud Build usa automaticamente a conta de serviço padrão do Compute Engine como a conta de serviço padrão do Cloud Build para criar o código-fonte e o recurso do Cloud Run, a menos que você substitua esse comportamento. Para que o Cloud Build crie suas origens, peça ao administrador para conceder o criador do Cloud Run (roles/run.builder) à conta de serviço padrão do Compute Engine no seu projeto:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

Substitua PROJECT_NUMBER por seu Google Cloud número do projeto e PROJECT_ID por seu Google Cloud ID do projeto. Para instruções detalhadas sobre como encontrar o ID do projeto e o número do projeto, consulte Criar e gerenciar projetos.

A concessão do papel de criador do Cloud Run à conta de serviço padrão do Compute Engine leva alguns minutos para se propagar.

Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o serviço do Cloud Run interage com Google Cloud APIs, como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

Usar a configuração local de um arquivo app.yaml

Para implantar o serviço do Cloud Run usando o arquivo app.yaml local de uma configuração atual do App Engine, siga estas etapas:

  1. No terminal, mude para o diretório de origem em que o arquivo app.yaml existe.

  2. Execute o comando a seguir para implantar o serviço no Cloud Run:

    gcloud beta app migrate-to-run
    

    Esse comando gera a configuração do arquivo service.yaml para o Cloud Run e o salva localmente no mesmo diretório do arquivo app.yaml. Para mais informações, consulte gcloud beta app migrate-to-run.

    • Quando solicitado Proceed with the deployment?, insira Y para criar uma imagem de contêiner do código-fonte e implantar o serviço no Cloud Run.
  3. Acesse o serviço do Cloud Run implantado abrindo o URL de serviço em um navegador da Web.

    Opcional:

    • Se o arquivo app.yaml estiver em um diretório diferente, especifique o caminho usando a flag --appyaml:

      gcloud beta app migrate-to-run --appyaml=PATH
      

      Substitua PATH pelo caminho do arquivo app.yaml.

    • Para gerar e exportar a configuração service.yaml do Cloud Run sem implantar o serviço, execute o seguinte comando:

      gcloud beta app migrate-to-run --export-only=EXPORT_PATH
      

      Substitua EXPORT_PATH pelo diretório ou caminho em que você quer salvar o service.yaml arquivo.

Usar uma imagem criada anteriormente

Para implantar usando uma imagem de contêiner criada anteriormente de uma versão implantada do App Engine em vez de recriar a imagem do contêiner de um arquivo app.yaml local, siga estas etapas:

Não é necessário o código-fonte do aplicativo para essa implantação.

  1. Execute o comando a seguir para implantar o serviço no Cloud Run. Esse comando usa a imagem de contêiner de uma implantação ativa do App Engine e não captura mudanças recentes do arquivo app.yaml local, o que pode resultar em uma implantação desatualizada:

    gcloud beta app migrate-to-run --service=SERVICE --version=VERSION --from-image
    

    Substitua:

    • SERVICE: o nome do serviço do App Engine.
    • VERSION: o ID da versão do serviço.

    Esse comando busca a configuração do serviço e da versão especificados para gerar o arquivo service.yaml para o Cloud Run. Para mais informações, consulte gcloud beta app migrate-to-run.

    • Quando solicitado com Proceed with the deployment?, insira Y para exportar a imagem de contêiner do App Engine e implantar o serviço no Cloud Run.
  2. Acesse o serviço do Cloud Run implantado abrindo o URL de serviço em um navegador da Web.

    Opcional:

    • Para gerar a configuração service.yaml do Cloud Run sem implantar o serviço, execute o seguinte comando:

      gcloud beta app migrate-to-run --service=SERVICE \
          --version=VERSION \
          --from-image \
          --export-only=EXPORT_PATH
      

      Substitua EXPORT_PATH pelo diretório ou caminho em que você quer salvar o arquivo service.yaml.

Recursos incompatíveis

O comando de migração falha se o arquivo app.yaml contiver a seguinte configuração não aceita:
  • Serviços de entrada:

    inbound_services:
    - warmup
    

    Solução: exclua a seção inbound_services do arquivo app.yaml. O Cloud Run aquece as instâncias usando o ponto de entrada do contêiner. Portanto, não é necessário configurar solicitações de aquecimento. Se você precisar executar o código de inicialização antes de veicular o tráfego, configure o serviço para executá-lo na inicialização, antes de ouvir as solicitações ou usar sondagens de inicialização. Também é possível configurar instâncias mínimas para manter as instâncias aquecidas.

A seguir