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, implante um serviço de transformação de imagens em contêineres no Cloud Run e direcione as chamadas do serviço de imagens do App Engine para ele.
Essa migração não exige grandes reescritas no código de processamento de imagens nem hospedagem do aplicativo do App Engine no Cloud Run. Em vez disso, quando você configura o aplicativo, o SDK de 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 em gRPC e retorna os resultados ao aplicativo do App Engine. Essa configuração substitui o back-end do serviço de imagens legadas do App Engine por uma solução moderna e nativa da nuvem.
Limitações
Ao usar o serviço personalizado de processamento de imagens, não é possível gerar URLs de exibição. O App Engine gera uma exceção de tempo 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 seu 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 de 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ó vai aplicar o novo comportamento depois que você configurar as variáveis de ambiente de migração
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEeAPPENGINE_IMAGES_SERVICE_ENDPOINT.
Antes de começar
Verifique se você tem acesso ao código-fonte do App Engine.
Ative a API Cloud Run Admin e a API Artifact Registry:
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 os seguintes papéis 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ê os seguintes papéis do IAM:
- Desenvolvedor de origem do Cloud Run (
roles/run.sourceDeveloper) no seu projeto - Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer) no seu projeto - Usuário da conta de serviço (
roles/iam.serviceAccountUser) na identidade de serviço do Cloud Run
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 seu 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 papel
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 pelo número do projeto do Google Cloude PROJECT_ID pelo ID do projeto do Google Cloud. Para instruções detalhadas sobre como encontrar o ID e o número do projeto,
consulte Criar
e gerenciar projetos.
A concessão do papel de builder 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 APIs doGoogle Cloud , 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:
- Implante o serviço de transformação de imagens no Cloud Run para receber o URL do serviço.
- Configure os arquivos de origem do App Engine com o URL do serviço do Cloud Run e as flags de roteamento. Em seguida, implante ou reimplemente o aplicativo do App Engine.
- 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 dele ao Cloud Storage, siga estas etapas:
Implante o contêiner de serviço de transformação de imagem pré-criado no serviço do Cloud Run. Implante com a autenticação ativada (
--no-allow-unauthenticated). O SDK de 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=REGIONSubstitua 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 implantado do Cloud Run, por exemplo,
https://image-processing-service-xyz-uc.a.run.app.Conceda o papel 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 privado 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=REGIONConceda o papel 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:
Adicione a seguinte dependência ao arquivo
requirements.txt:appengine-python-standard>=3.0.0b0Como alternativa, para instalar dependências localmente, execute:
pip install --pre "appengine-python-standard>=3.0.0b0"Atualize o arquivo
app.yamlpara 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 do ambiente de execução Python compatível.
- RUN_SERVICE_URL: o URL do serviço do Cloud Run implantado.
Implante o aplicativo no App Engine:
gcloud app deploySeu serviço do App Engine foi implantado em
https://PROJECT_ID.REGION_ID.r.appspot.com.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:
- Acione a funcionalidade de processamento de imagens no seu aplicativo.
- Verifique o Visualizador de registros do seu aplicativo do App Engine. Verifique se não há erros relacionados a chamadas
google.appengine.api.images. - Verifique os registros do seu
image-processing-servicedo Cloud Run para confirmar se o Cloud Run recebeu e processou as solicitações.