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 de App Engine existentes, puedes implementar un servicio de transformación de imágenes alojado en contenedores en Cloud Run y enrutar tus llamadas al servicio de imágenes de App Engine a él.
Esta migración no requiere reescrituras importantes en el código de procesamiento de imágenes ni el hosting de 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 en gRPC y devuelve los resultados a tu aplicación de App Engine. Esta configuración reemplaza el backend heredado del servicio de Images de App Engine por una solución moderna y nativa de la nube.
Limitaciones
Cuando usas el servicio de procesamiento de imágenes personalizado con
APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEconfigurado comotrue, no puedes generar URLs de entrega. App Engine arroja una excepción de entorno de ejecución cuando invocas el métodoget_serving_url(). Puedes usar este método solo cuandoAPPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICEse establece enfalseo no se establece. Esta restricción evita que se dependa del backend heredado para almacenar y entregar imágenes.Para entregar imágenes, te recomendamos que lo hagas directamente desde una URL de Cloud Storage o que uses un bucket de Cloud Storage respaldado por Cloud CDN.
Las URLs existentes que creaste con llamadas heredadas al método
get_serving_url()siguen entregando imágenes.Cuando actualizas la versión del SDK de servicios de App Engine, App Engine no enruta automáticamente las llamadas al servicio de Cloud Run. Tu aplicación aplica el comportamiento nuevo solo después de que configuras las variables de entorno
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 a la cuenta de implementación y a la cuenta de servicio de Cloud Build los siguientes roles de IAM.
Haz clic para ver los roles necesarios para la cuenta de implementación
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:
- Desarrollador de origen de Cloud Run (
roles/run.sourceDeveloper) en tu proyecto - Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer) en tu proyecto - Usuario de 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 usa 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@ \ --role=roles/run.builder
Reemplaza PROJECT_NUMBER por el número del proyecto de Google Cloud
y PROJECT_ID por el ID del proyecto de Google Cloud. Para obtener instrucciones detalladas sobre cómo encontrar el ID del proyecto y el número del proyecto,
consulta Crea
y administra proyectos.
El otorgamiento del rol de creador 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 las APIs deGoogle Cloud , 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 los permisos de implementación y cómo administrar 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 los archivos de origen de App Engine con la URL del servicio de Cloud Run y las marcas de enrutamiento y, luego, implementa o vuelve a implementar la 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 del servicio de transformación de imágenes compilado previamente en el servicio de Cloud Run. Asegúrate de implementar con la autenticación aplicada (
--no-allow-unauthenticated). El SDK de servicios de App Engine controla la autenticación cuando se realizan llamadas a este servicio:gcloud run deploy image-processing-service \ --image=us-central1-docker.pkg.dev/gae-bundled-services-images/release/image-processing-service:latest \ --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 el servicio de App Engine.
Toma nota de la URL del servicio de Cloud Run implementado, por ejemplo,
https://image-processing-service-xyz-uc.a..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@" \ --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@" \ --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 Python de modo que use el servicio de transformación de imágenes en Cloud Run, sigue estos pasos:
Agrega la siguiente dependencia al archivo
requirements.txt:appengine-python-standard>=3.0.2Como alternativa, para instalar las dependencias de forma local, ejecuta lo siguiente:
pip install "appengine-python-standard>=3.0.2"Actualiza tu archivo
app.yamlpara habilitar el proxy de API y configurar las variables de entorno requeridas: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"Reemplaza lo siguiente:
- RUNTIME: Es una versión del entorno de ejecución de Python compatible.
- RUN_SERVICE_URL: Es la URL de tu servicio de Cloud Run implementado.
Implementa la aplicación en App Engine:
gcloud app deployTu servicio de App Engine se implementa en
https://PROJECT_ID.REGION_ID.r.appspot.com.Inicia 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, sigue estos pasos:
- Activa la funcionalidad de procesamiento de imágenes en tu aplicación.
- Consulta el Explorador de registros de tu aplicación de App Engine. Asegúrate de que no haya errores relacionados con las llamadas de
google.appengine.api.images. - Verifica los registros de tu
image-processing-servicede Cloud Run para comprobar que Cloud Run haya recibido y procesado las solicitudes.