ID de región
REGION_ID es un código abreviado que Google asigna en función de la región que eliges cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.
Obtén más información acerca de los ID de región.
Para modernizar el procesamiento de imágenes en tus aplicaciones existentes de App Engine, puedes implementar un servicio de transformación de imágenes alojado en contenedores en Cloud Run y enrutar las llamadas al servicio de imágenes de App Engine.
Esta migración no requiere que vuelvas a escribir el código de procesamiento de imágenes ni que alojes tu aplicación de App Engine en Cloud Run. En cambio, cuando configuras tu aplicación, el SDK de servicios de App Engine intercepta las llamadas al servicio de imágenes de App Engine y las enruta al servicio de Cloud Run. El servicio procesa las imágenes con un motor Pillow de código abierto a través de gRPC y muestra los resultados en tu aplicación de App Engine. Esta configuración reemplaza el backend heredado del servicio de imágenes de App Engine por una solución moderna y nativa de la nube.
Limitaciones
Cuando usas el servicio de procesamiento de imágenes personalizado, no puedes generar URLs de entrega. App Engine arroja una excepción de tiempo de ejecución cuando invocas el método
getServingUrl(). Esta restricción evita la dependencia del backend heredado para almacenar y entregar imágenes.Para entregar imágenes, te recomendamos que las entregues directamente desde una URL de Cloud Storage o que uses un bucket de Cloud Storage respaldado por Cloud CDN, según los requisitos de tu aplicación.
Las URLs existentes que creaste con llamadas heredadas al método
getServingUrl()siguen entregando imágenes.Cuando actualizas la versión del SDK de servicios de App Engine, App Engine no enruta automáticamente las llamadas de App Engine al servicio de Cloud Run. Tu aplicación solo aplica el comportamiento nuevo después de configurar las variables de entorno de migración
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEyAPPENGINE_IMAGES_SERVICE_ENDPOINT.
Antes de comenzar
Asegúrate de tener acceso al código fuente de App Engine.
Habilita la API de Cloud Run Admin y la API de Artifact Registry:
Roles obligatorios
Puedes elegir crear una cuenta de servicio nueva o usar la misma cuenta de servicio administrada por el usuario en Cloud Run que usas en App Engine. Tú o tu administrador deben otorgar los siguientes roles de IAM a la cuenta del implementador y a la cuenta de servicio de Cloud Build.
Haz clic para ver los roles necesarios para la cuenta del implementador
Para obtener los permisos que necesitas para compilar e implementar desde la fuente, pídele a tu administrador que te otorgue los siguientes roles de IAM roles:
- Desarrollador de fuentes de Cloud Run (
roles/run.sourceDeveloper) en tu proyecto - Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer) en tu proyecto - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) en la identidad del servicio de Cloud Run
Haz clic para ver los roles necesarios para la cuenta de servicio de Cloud Build
Cloud Build uses automáticamente la cuenta de servicio predeterminada de Compute Engine como la cuenta de servicio predeterminada de Cloud Build para compilar tu código fuente y el recurso de Cloud Run, a menos que anules este comportamiento. Para que
Cloud Build compile tus fuentes, pídele a tu administrador que otorgue
el rol de compilador de Cloud Run
(roles/run.builder) a la cuenta de servicio predeterminada de Compute Engine
en tu proyecto:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/run.builder
Reemplaza PROJECT_NUMBER por el número de tu Google Cloud
proyecto y PROJECT_ID por el ID de tu Google Cloud
proyecto. Para obtener instrucciones detalladas sobre cómo encontrar el ID y el número de tu proyecto,
consulta Crea
y administra proyectos.
El otorgamiento del rol de compilador de Cloud Run a la cuenta de servicio predeterminada de Compute Engine tarda un par de minutos en propagarse.
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu servicio de Cloud Run interactúa con Google Cloud las APIs, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta permisos de implementación y administra el acceso.
Proceso de migración
Esta migración incluye los siguientes pasos:
- Implementa el servicio de transformación de imágenes en Cloud Run para obtener la URL del servicio.
- Configura tus archivos fuente de App Engine con la URL del servicio de Cloud Run y las marcas de enrutamiento. Luego, implementa o vuelve a implementar tu aplicación de App Engine.
- Prueba tu aplicación para verificar la funcionalidad de procesamiento de imágenes.
Implementa el servicio de transformación de imágenes en Cloud Run
Para implementar el servicio de transformación de imágenes y configurar su acceso a Cloud Storage, sigue estos pasos:
Implementa el contenedor de servicio de transformación de imágenes compilado previamente en el servicio de Cloud Run. Asegúrate de realizar la implementación con la autenticación aplicada (
--no-allow-unauthenticated). El SDK de servicios de App Engine controla la autenticación cuando realiza llamadas a este servicio: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=REGIONReemplaza REGION por la región en la que implementas el servicio de Cloud Run. Te recomendamos que implementes el servicio en la misma región que tu servicio de App Engine.
Anota la URL del servicio de tu servicio de Cloud Run implementado, por ejemplo,
https://image-processing-service-xyz-uc.a.run.app.Otorga el rol de Invocador de Cloud Run (
roles/run.invoker) a la cuenta de servicio predeterminada de App Engine. Esto permite que tu aplicación de App Engine autorice y enrute llamadas al servicio privado de Cloud Run:gcloud run services add-iam-policy-binding image-processing-service \ --member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" \ --role="roles/run.invoker" \ --region=REGIONOtorga el rol de visualizador de objetos de Cloud Storage (
roles/storage.objectViewer) a la cuenta de servicio predeterminada de Compute Engine. Esto permite que el servicio de transformación de imágenes lea las imágenes almacenadas en Cloud Storage:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/storage.objectViewer"Reemplaza lo siguiente:
- PROJECT_ID: Es el ID del proyecto en el que implementas el servicio de Cloud Run.
- PROJECT_NUMBER: Es el número del proyecto en el que implementas el servicio de Cloud Run.
Configura tus archivos fuente
Para configurar tu aplicación de Java para que use el servicio de transformación de imágenes en Cloud Run, sigue estos pasos:
Actualiza el archivo
pom.xmlpara que incluya las siguientes dependencias:Agrega o actualiza la dependencia
appengine-api-1.0-sdk:<dependency> <groupId>com.google.appengine</groupId> <artifactId>appengine-api-1.0-sdk</artifactId> <version>5.0.5-beta.1</version> </dependency>Agrega la dependencia
google-auth-library-oauth2-httppara la comunicación segura con Cloud Run:<dependency> <groupId>com.google.auth</groupId> <artifactId>google-auth-library-oauth2-http</artifactId> <version>1.20.0</version> </dependency>
Actualiza el archivo
appengine-web.xmlpara configurar las variables de entorno necesarias:<?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <runtime>RUNTIME</runtime> <!-- a supported Java runtime version --> <threadsafe>true</threadsafe> <!-- List the Images service --> <app-engine-bundled-services> <api>images</api> </app-engine-bundled-services> <env-variables> <!-- Enable the custom gRPC Images service --> <env-var name="APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE" value="true" /> <!-- The URL of the Cloud Run service you deployed --> <env-var name="APPENGINE_IMAGES_SERVICE_ENDPOINT" value="RUN_SERVICE_URL" /> </env-variables> </appengine-web-app>Reemplaza lo siguiente:
- RUNTIME: Es una versión compatible del entorno de ejecución de Java.
- RUN_SERVICE_URL: Es la URL de tu servicio de Cloud Run implementado.
Implementa tu aplicación en App Engine:
mvn clean package appengine:deploy cleanInicia el navegador y accede a tu servicio web ejecutando el siguiente comando:
gcloud app browse
Prueba tu aplicación
Para verificar que tu aplicación use correctamente el servicio de transformación de imágenes de Cloud Run, haz lo siguiente:
- Activa la funcionalidad de procesamiento de imágenes en tu aplicación de App Engine implementada.
- Consulta el Visor de registros de tu aplicación de App Engine. Asegúrate de que no haya errores relacionados con las llamadas a
com.google.appengine.api.images. - Verifica los registros de tu Cloud Run
image-processing-servicepara comprobar que Cloud Run recibió y procesó las solicitudes.