Migrar do serviço de imagens 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.

Para modernizar o processamento de imagens nos aplicativos do App Engine, você pode implantar um serviço de transformação de imagens em contêineres no Cloud Run e encaminhar as chamadas do serviço Imagens do App Engine para ele.

Essa migração não exige grandes reescritas no código de processamento de imagens ou na hospedagem do aplicativo do App Engine no Cloud Run. Em vez disso, ao configurar o aplicativo, o SDK dos serviços do App Engine intercepta as chamadas do serviço de imagens do App Engine e as encaminha para o serviço do Cloud Run. O serviço processa as imagens usando um mecanismo Pillow de código aberto no gRPC e retorna os resultados para o aplicativo do App Engine. Essa configuração substitui o back-end legado do serviço de imagens do App Engine por uma solução moderna e nativa da nuvem.

Limitações

  • Ao usar o serviço de processamento de imagens personalizado, não é possível gerar URLs de veiculação. O App Engine gera uma exceção de execução quando você invoca o método get_serving_url(). Essa restrição impede a dependência do back-end legado para armazenar e veicular imagens.

    Para veicular imagens, recomendamos que você as veicule diretamente de um URL do Cloud Storage ou use um bucket do Cloud Storage com suporte do Cloud CDN, dependendo dos requisitos do aplicativo.

    Os URLs criados usando chamadas legadas para o método get_serving_url() continuam veiculando imagens.

  • Quando você faz upgrade da versão do SDK dos serviços do App Engine, o App Engine não encaminha automaticamente as chamadas do App Engine para o serviço do Cloud Run. O aplicativo só aplica o novo comportamento depois que você configura as variáveis de ambiente de migração APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE e APPENGINE_IMAGES_SERVICE_ENDPOINT.

Antes de começar

  1. Verifique se você tem acesso ao código-fonte do App Engine.

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

    Ativar APIs

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 App Engine. 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.

Processo de migração

Essa migração inclui as seguintes etapas:

  1. Implante o serviço de transformação de imagens no Cloud Run para receber o URL do serviço.
  2. Configure os arquivos de origem do App Engine com o URL do serviço do Cloud Run e os flags de roteamento e, em seguida, implante ou reimplante o aplicativo do App Engine.
  3. Teste o aplicativo para verificar a funcionalidade de processamento de imagens.

Implantar o serviço de transformação de imagens no Cloud Run

Para implantar o serviço de transformação de imagens e configurar o acesso ao Cloud Storage, siga estas etapas:

  1. Implante o contêiner de serviço de transformação de imagens pré-criado no serviço do Cloud Run. Implante com a autenticação aplicada (--no-allow-unauthenticated). O SDK dos serviços do App Engine processa a autenticação ao fazer chamadas para esse serviço:

    gcloud run deploy image-processing-service \
        --image=us-central1-docker.pkg.dev/gae-bundled-services-images/image-processing-service-staging/image-processing-service:public-image-d476f7ef9d1b \
        --no-allow-unauthenticated \
        --region=REGION
    

    Substitua REGION pela região em que você implanta o serviço do Cloud Run. Recomendamos que você implante o serviço na mesma região do serviço do App Engine.

    Anote o URL do serviço do Cloud Run implantado, por exemplo, https://image-processing-service-xyz-uc.a.run.app.

  2. Conceda o papel de invocador do Cloud Run (roles/run.invoker) à conta de serviço padrão do App Engine. Isso permite que o aplicativo do App Engine autorize e encaminhe chamadas para o serviço particular do Cloud Run:

    gcloud run services add-iam-policy-binding image-processing-service \
        --member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" \
        --role="roles/run.invoker" \
        --region=REGION
    
  3. Conceda o papel de leitor de objetos do Cloud Storage (roles/storage.objectViewer) à conta de serviço padrão do Compute Engine. Isso permite que o serviço de transformação de imagens leia imagens armazenadas no Cloud Storage:

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

    Substitua:

    • PROJECT_ID: o ID do projeto em que você implanta o serviço do Cloud Run.
    • PROJECT_NUMBER: o número do projeto em que você implanta o serviço do Cloud Run.

Configurar os arquivos de origem

Para configurar o aplicativo Python para usar o serviço de transformação de imagens no Cloud Run, siga estas etapas:

  1. Adicione a seguinte dependência ao arquivo requirements.txt:

    appengine-python-standard>=3.0.0b0
    

    Como alternativa, para instalar dependências localmente, execute:

    pip install --pre "appengine-python-standard>=3.0.0b0"
    
  2. Atualize o arquivo app.yaml para ativar o proxy de API e configurar as variáveis de ambiente necessárias:

    runtime: RUNTIME  # a supported python version
    
    # List the Images service
    app_engine_bundled_services:
    - images
    
    env_variables:
      # Enable the custom gRPC Images service
      APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE: "true"
    
      # The URL of the Cloud Run service you deployed
      APPENGINE_IMAGES_SERVICE_ENDPOINT: "RUN_SERVICE_URL"
    

    Substitua:

    • RUNTIME: uma versão compatível do ambiente de execução do Python.
    • RUN_SERVICE_URL: o URL do serviço do Cloud Run implantado.
  3. Implante o aplicativo no App Engine:

    gcloud app deploy
    

    O serviço do App Engine é implantado em https://PROJECT_ID.REGION_ID.r.appspot.com.

  4. Inicie o navegador e acesse o serviço da Web executando o seguinte comando:

    gcloud app browse
    

Teste o aplicativo

Para verificar se o aplicativo está usando o serviço de transformação de imagens do Cloud Run:

  1. Acione a funcionalidade de processamento de imagens no aplicativo.
  2. Verifique a Análise de registros do aplicativo do App Engine. Verifique se não há erros relacionados a chamadas google.appengine.api.images.
  3. Verifique os registros do Cloud Run image-processing-service para verificar se o Cloud Run recebeu e processou as solicitações.

A seguir