Migrar um app de ambiente flexível do App Engine 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.

Neste guia, descrevemos como migrar um aplicativo do App Engine que se conecta a uma instância do Cloud SQL com um IP público.

Em geral, as etapas deste guia demonstram como implantar o mesmo código-fonte do aplicativo no Cloud Run e, em seguida, configurá-lo para usar o mesmo usuário do banco de dados do Cloud SQL para conectar a instância e o banco de dados existentes.

As etapas deste guia não incluem como usar uma conexão de IP particular interna, porque isso exige que você primeiro modifique o código do aplicativo. No entanto, depois de implantar o app no Cloud Run, é possível usar as etapas em Conectar-se ao Cloud SQL pelo Cloud Run para saber os requisitos e como usar os IPs Privados.

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.

Antes de começar

  1. Verifique se o Cloud Run atende aos requisitos do seu aplicativo. Analise a comparação do App Engine e do Cloud Run para determinar se os recursos do Cloud Run, como CPU e memória, atendem às suas necessidades.
  2. Este guia pressupõe que seu app seja executado sem erros.

  3. É preciso ter acesso à instância do Cloud SQL, incluindo o nome de usuário e a senha do banco de dados para conectar o app. O Cloud Run usa criptografia e se conecta por meio do proxy do Cloud SQL Auth usando: Soquetes Unix ou conectores do Cloud SQL.

  4. 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 Google Cloud CLI ou o console do Google Cloud para definir e gerenciar as configurações dos apps. O Cloud Run não requer configuração baseada em arquivo. No entanto, Configuração do YAML tem suporte, e você pode usar aapp2run ferramenta para converter o arquivo existente do App Engine no Cloud Run.

    • Cada serviço implantado no Cloud Run usa o domínio run.app 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).

Migrar seu app para o Cloud Run

Em um nível alto, o processo de migração do aplicativo do App Engine para o Cloud Run consiste nas seguintes etapas:

  1. Ative as APIs necessárias
  2. Configurar a conta de serviço do Cloud Run
  3. Implantar seu app no Cloud Run

Ative as APIs necessárias

Antes de implantar o app no Cloud Run, é necessário ativar as APIs Cloud Run e Artifact Registry.

Use o console do Google Cloud para ativar as APIs:

Acessar APIs e Serviços

Configurar a conta de serviço do Cloud Run

É possível criar uma nova conta de serviço ou continuar usando a mesma conta de serviço gerenciada pelo usuário no Cloud Run que você está usando para o App Engine. Na conta de serviço, verifique se os seguintes papéis do Identity and Access Management (IAM) ou as permissões equivalentes estão configurados:

Para implantar no Cloud Run, você precisa ter um dos seguintes requisitos:

Para conexões de IP público com o Cloud SQL, é preciso ter um dos seguintes:

Implantar o app no Cloud Run

Não é necessário fazer alterações no código para implantar o aplicativo do App Engine no Cloud Run.

Nas etapas a seguir, você implantará seu aplicativo em um novo serviço no Cloud Run e configurará simultaneamente esse serviço para se conectar ao Cloud SQL.

Assim como o ambiente flexível do App Engine, o Cloud Run é compatível com implantações baseadas em contêiner e origem. Você precisará acessar a imagem do contêiner ou o repositório de código-fonte, dependendo do método de implantação que seguir.

Implantar imagens de contêiner

Se os serviços do App Engine forem implantados com um contêiner criado manualmente, será possível usar a mesma imagem de contêiner para implantar o serviço no Cloud Run. Para implantar a imagem do contêiner do App Engine no Cloud Run:

  1. Anote o URL do registro em que a imagem do contêiner está localizada. Esse é o mesmo URL fornecido na sinalização --image-url ao implantar no App Engine.

  2. Implante a imagem do contêiner:

    Console

    1. No console do Google Cloud, acesse a página do Cloud Run.

      Acesse o Cloud Run

    2. Clique em Criar serviço.

    3. Clique no botão Selecionar no campo URL da imagem do contêiner e escolha a imagem do contêiner que você implantou no App Engine.

    4. Digite um nome para o serviço. Escolha um nome exclusivo que represente o aplicativo que você está implantando.

    5. Na seção Autenticação, selecione Permitir invocações não autenticadas.

    6. É preciso criar as mesmas variáveis de ambiente para o Cloud Run que você definiu noapp.yaml do aplicativo do App Engine. Amplie as seções Contêiner, rede, segurança e crie as seguintes variáveis de ambiente clicando em Adicionar variável em Variáveis de ambiente:

      • Para soquetes Unix, adicione:

          INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAME
        
      • Para conectores do Cloud SQL, adicione:

          INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAME
        

        Substitua INSTANCE_CONNECTION_NAME pelo ID do projeto, região e instância seguindo o formato de project:region:instance-id. É possível encontrá-lo na página Visão geral da instância no console do Google Cloud.

        Essas conexões são criptografadas automaticamente sem qualquer configuração extra.

      • DB_NAME: nome do banco de dados.

      • DB_USER: nome de usuário do seu usuário do banco de dados.

      • DB_PASS: senha especificada ao criar o banco de dados.

    7. Na seção Conexões do Cloud SQL, clique no botão Adicionar conexão e selecione a instância criada anteriormente para o App Engine.

    8. Clique em Implantar. Depois que o serviço do Cloud Run for implantado, a página Detalhes do serviço exibirá um URL na parte superior da página. Clique no link URL para ver o app de amostra implantado no Cloud Run conectado ao Cloud SQL.

    gcloud

    Execute o comando a seguir para criar um novo serviço no Cloud Run.É necessário definir sinalizações de configuração para incluir as mesmas variáveis de ambiente de conexão SQL definidas no arquivo app.yaml do aplicativo do App Engine:

    gcloud run deploy run-sql --image IMAGE \
      --allow-unauthenticated \
      --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
      --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
      --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
      --set-env-vars DB_NAME="DB_NAME" \
      --set-env-vars DB_USER="DB_USER" \
      --set-env-vars DB_PASS="DB_PASS"
    

    Substitua:

    • IMAGE pela imagem que você está implantando;
    • INSTANCE_CONNECTION_NAME pelo nome da conexão da instância do Cloud SQL ou uma lista de nomes de conexões separados por vírgulas. Para encontrar o INSTANCE_CONNECTION_NAME, execute:

        gcloud instances describe INSTANCE_NAME
      
    • DB_NAME pelo nome do banco de dados.

    • DB_USER pelo nome de usuário do banco de dados.

    • DB_PASS pela senha do usuário do banco de dados.

Implantar código-fonte

O Cloud Run usa internamente os buildpacks e o Cloud Build para criar automaticamente imagens de contêiner do seu código-fonte, sem a necessidade de criar manualmente um contêiner ou especificar um Dockerfile. No entanto, se um Dockerfile estiver presente, ele será usado.

A implantação de um serviço do Cloud Run a partir da origem usa o Artifact Registry. Portanto, esse recurso só está disponível em regiões compatíveis com o Artifact Registry.

Para implantar o mesmo código-fonte implantado anteriormente no App Engine, faça o seguinte:

  1. Mude para o diretório de origem do código-fonte do seu aplicativo.

      cd YOUR_APPENGINE_CODE_DIR
    
  2. Implantar no Cloud Run

    Para criar o código-fonte e implantar o aplicativo, execute o comando de implantação com a sinalização --source. Defina as sinalizações de configuração para incluir as mesmas variáveis de ambiente de conexão SQL definidas no arquivo app.yaml do aplicativo do App Engine:

      gcloud run deploy run-sql --source SOURCE \
        --allow-unauthenticated \
        --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
        --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
        --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
        --set-env-vars DB_NAME="DB_NAME" \
        --set-env-vars DB_USER="DB_USER" \
        --set-env-vars DB_PASS="DB_PASS"
    

    Substitua:

    • SOURCE pelo caminho para o diretório de origem do App Engine.
    • INSTANCE_CONNECTION_NAME pelo nome da conexão da instância do Cloud SQL ou uma lista de nomes de conexões separados por vírgulas. Para encontrar o INSTANCE_CONNECTION_NAME, execute:
        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME pelo nome do banco de dados.
    • DB_USER pelo nome de usuário do banco de dados.
    • DB_PASS pela senha do usuário do banco de dados.
  3. Quando solicitado, insira um nome para o SERVICE.

  4. Responda a todas as solicitações para instalar as APIs necessárias respondendo ao y quando solicitado. Você só precisa fazer isso uma vez para um projeto. Aguarde a conclusão da criação e da implantação. Quando terminar, uma mensagem semelhante a esta será exibida:

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.app
    

    Para saber mais sobre como implantar código-fonte no Cloud Run, consulte Como implantar a partir do código-fonte.

Próximas etapas