ID de región
El REGION_ID
es un código abreviado que Google asigna en función de la región que selecciones al crear tu aplicación. El código no corresponde a un país o provincia, aunque algunos IDs de región pueden parecerse a los códigos de país y provincia que se usan habitualmente. En las aplicaciones creadas después de febrero del 2020, REGION_ID.r
se incluye en las URLs de App Engine. En las aplicaciones creadas antes de esa fecha, el ID de región es opcional en la URL.
Esta guía ofrece una introducción a Cloud Run para los usuarios que conocen App Engine. En él se describen las principales similitudes y diferencias entre las plataformas sin servidor para ayudarte a prepararte para migrar desde el entorno estándar o el entorno flexible de App Engine.
Información general
Cloud Run es la última evolución de Google Cloud sin servidor, basada en la experiencia de ejecutar App Engine durante más de una década. Cloud Run se ejecuta en gran parte de la misma infraestructura que el entorno estándar de App Engine, por lo que hay muchas similitudes entre estas dos plataformas.
Cloud Run está diseñado para mejorar la experiencia de App Engine e incorpora muchas de las mejores funciones del entorno estándar y flexible de App Engine. Los servicios de Cloud Run pueden gestionar las mismas cargas de trabajo que los servicios de App Engine, pero Cloud Run ofrece a los clientes mucha más flexibilidad a la hora de implementar estos servicios. Esta flexibilidad, junto con las integraciones mejoradas con Google Cloud y servicios de terceros, también permite que Cloud Run gestione cargas de trabajo que no se pueden ejecutar en App Engine.
Resumen de la comparación
Aunque hay muchas similitudes y diferencias entre App Engine y Cloud Run, esta descripción general se centra en las áreas más relevantes para los clientes de App Engine que empiezan a usar Cloud Run.
Entorno estándar de App Engine | Entorno flexible de App Engine | Cloud Run | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Terminología | Aplicación | N/A | |||||||||||||||||||
Servicio | Servicio | ||||||||||||||||||||
Versión | Revisión | ||||||||||||||||||||
Endpoints de URL |
|||||||||||||||||||||
URL de la aplicación
(servicio default )
|
https://PROJECT_ID.REGION_ID.r.appspot.com
|
N/A | |||||||||||||||||||
URL de servicio |
https://SERVICE_ID-dot-PROJECT_ID.REGION_ID.r.appspot.com
|
|
|||||||||||||||||||
URL de la versión o revisión |
https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com
|
|
|||||||||||||||||||
Escalado |
|||||||||||||||||||||
Escalado automático | Sí | Sí | Sí | ||||||||||||||||||
Escalado manual | Sí | Sí | Sí | ||||||||||||||||||
Escalado a cero | Sí | No | Sí | ||||||||||||||||||
Solicitudes de preparación | Configurable | No | Automático | ||||||||||||||||||
Tiempo de espera de la instancia inactiva (después de finalizar la última solicitud) | Hasta 15 minutos | Depende de la configuración de Facturación. Usa la facturación basada en instancias para emular el comportamiento de App Engine | |||||||||||||||||||
Tiempo de espera de solicitud |
|
60 minutos | Se puede configurar hasta 60 minutos (el valor predeterminado es 5 minutos). | ||||||||||||||||||
Implementación |
|||||||||||||||||||||
De la fuente | Sí | Sí | |||||||||||||||||||
Imagen de contenedor | No | Sí (runtimes personalizados) | Sí | ||||||||||||||||||
Contenedores sidecar | No | Sí. Los sidecars se ejecutan junto al contenedor principal y atienden solicitudes web. | |||||||||||||||||||
Recursos de computación |
|||||||||||||||||||||
vCPU |
|
Hasta 80 vCPU | Hasta 8 vCPU | ||||||||||||||||||
Memoria | Hasta 6,5 GB por vCPU | Hasta 32 GB | |||||||||||||||||||
GPUs | No | Sí. Puedes configurar una GPU por instancia de Cloud Run. | |||||||||||||||||||
Montajes del volumen | No | Sí. Puedes montar un segmento de Cloud Storage directamente en el sistema de archivos del contenedor. | |||||||||||||||||||
Modelo de precios |
|||||||||||||||||||||
Tarifa por solicitud | No |
No, si usas la facturación basada en instancias. Sí, cuando se usa la facturación basada en solicitudes. |
|||||||||||||||||||
Instancias mínimas inactivas | El mismo coste que las instancias activas | Coste más bajo de las instancias mínimas inactivas (consulta Tiempo de instancia de contenedor facturable) | |||||||||||||||||||
Descuentos por compromiso de uso (CUDs) | No | Sí | |||||||||||||||||||
Facturación basada en instancias (coste por hora de instancia) | Instancia F4/B4: 0,2 USD |
|
|
||||||||||||||||||
Seguridad |
|||||||||||||||||||||
Configuración de entrada | Sí | Sí | Sí | ||||||||||||||||||
Rol de invocador | No | Sí | |||||||||||||||||||
IAP | Sí | Sí | Sí | ||||||||||||||||||
Cortafuegos | Sí | Sí | Configurar con Google Cloud Armor | ||||||||||||||||||
Secret Manager | Sí, con las bibliotecas de cliente de Cloud. | Sí. Puedes montar cada secreto como un volumen o pasar un secreto mediante variables de entorno. | |||||||||||||||||||
Conectividad |
|||||||||||||||||||||
Dominios personalizados | Sí | Sí | Sí | ||||||||||||||||||
Conectividad de VPC (incluida la VPC compartida) | Sí | N/A | Sí | ||||||||||||||||||
Configuración de salida de VPC | Sí | N/A | Sí | ||||||||||||||||||
Balanceo de carga multirregional | No | Sí | |||||||||||||||||||
Streaming del servidor | No | Sí | |||||||||||||||||||
Acceder a los servicios de Google Cloud |
|||||||||||||||||||||
Cloud SQL | Sí | Sí | Sí | ||||||||||||||||||
Bibliotecas de cliente de Cloud | Si usas las bibliotecas de cliente de Cloud en App Engine, no tienes que cambiar nada al migrar a Cloud Run. Estas bibliotecas de cliente funcionan en cualquier lugar, lo que significa que tu aplicación es más portátil. | ||||||||||||||||||||
Servicios agrupados antiguos de App Engine | Sí (solo Java, Python, Go y PHP) | No | No |
Modelo de recurso
El modelo de recursos de Cloud Run es muy similar al de App Engine, pero hay algunas diferencias clave:
- Cloud Run no tiene un recurso Application de nivel superior ni el servicio
default
correspondiente. - Los servicios de Cloud Run del mismo proyecto se pueden desplegar en diferentes regiones. En App Engine, todos los servicios del proyecto están en la misma región.
- Cloud Run usa el término Revisión en lugar de Versión para ajustarse al modelo de recursos de Knative.
- Los nombres de las revisiones de Cloud Run tienen el formato
SERVICE_NAME-REVISION_SUFFIX
, dondeREVISION_SUFFIX
se genera automáticamente o se define mediante la marca de despliegue--revision-suffix=REVISION_SUFFIX
. - Las revisiones de Cloud Run son inmutables, lo que significa que no puedes reutilizar nombres como en las versiones de App Engine (con la marca de implementación
--version=VERSION_ID
). - Las URLs de servicio de Cloud Run se basan en un identificador de servicio que se genera automáticamente en el primer despliegue del servicio. Los identificadores de servicio tienen el formato
SERVICE_NAME-<auto-generated identifier>
. El identificador de servicio es único y no cambia durante el tiempo de vida del servicio. - En Cloud Run, solo se exponen de forma predeterminada las URLs de servicio (
SERVICE_IDENTIFIER.run.app
yhttps://SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
). Para dirigirte a una revisión específica, debes configurar una etiqueta de tráfico. En App Engine, se exponen automáticamente tanto las URLs de servicio como las de versión.
Implementación y configuración
En App Engine, la mayoría de las configuraciones se realizan en el archivo app.yaml
, que se incluye en cada implementación. Esta sencillez tiene un coste, ya que, aunque se pueden actualizar algunos ajustes mediante la API Admin, la mayoría de los cambios requieren volver a implementar el servicio.
Aunque Cloud Run tiene el archivo de configuración service.yaml
, no se usa de la misma forma que app.yaml
. El service.yaml
de Cloud Run no se puede usar al implementar desde el código fuente, ya que uno de los elementos obligatorios es la ruta a la imagen de contenedor final. Además, service.yaml
cumple las especificaciones de Knative y puede resultar difícil de leer para quienes no estén familiarizados con los archivos de configuración de Kubernetes. Para obtener más información sobre cómo usar service.yaml
para gestionar la configuración, consulta la documentación de Cloud Run.
Para los clientes de App Engine que empiezan a usar Cloud Run, el uso de las marcas de despliegue de la CLI gcloud se ajusta mucho más a la gestión de la configuración de App Engine en el momento del despliegue.
Para definir la configuración al desplegar código nuevo en Cloud Run, usa las marcas gcloud run deploy
:
gcloud run deploy SERVICE_NAME \
--cpu CPU \
--memory MEMORY \
--concurrency CONCURRENCY
Aunque no es necesario usar las marcas de configuración en todas las implementaciones (consulta Gestión de configuraciones), puedes hacerlo para simplificar la gestión de la configuración.
En Cloud Run, también puedes actualizar la configuración sin volver a desplegar el código fuente mediante gcloud run services update
:
gcloud run services update SERVICE_NAME \
--cpu CPU \
--memory MEMORY \
--concurrency CONCURRENCY
Como las revisiones de Cloud Run son inmutables, este comando creará una nueva revisión con la configuración actualizada, pero usará la misma imagen de contenedor que la revisión actual.
Gestionar configuraciones
En las implementaciones de App Engine, se deben proporcionar todos los ajustes para cada implementación. Los ajustes que no se proporcionen tendrán valores predeterminados. Por ejemplo, App Engine service-a
, con versiones que usan los archivos app.yaml
de la siguiente tabla:
Versión 1 del servicio A de App Engine | Servicio de App Engine: versión 2 |
---|---|
app.yaml | |
runtime: python39 service: service-a instance_class: F4 |
runtime: python39 service: service-a |
Configuración aplicada | |
runtime: python39 service: service-a instance_class: F4 default values: |
runtime: python39 service: service-a default values: |
version1
se configura con instance_class: F4
, mientras que version2
, que no ha proporcionado ningún valor para instance_class
, se configura con el valor predeterminado instance_class: F1
.
En Cloud Run, se aplican los ajustes de configuración que se proporcionen, pero los que no se proporcionen mantienen sus valores. Solo tiene que proporcionar valores para los ajustes que quiera cambiar. Por ejemplo:
Servicio de Cloud Run: revisión 1 | Cloud Run service-a revision2 |
---|---|
Comando de despliegue | |
gcloud run deploy service-a \ --cpu=4 |
gcloud run deploy service-a |
Configuración aplicada | |
service: service-a vCPUs: 4 default values: |
service: service-a vCPUs: 4 default values: |
En App Engine, si se realiza un despliegue sin ajustes de configuración, se crea una versión con todos los ajustes predeterminados. En Cloud Run, si se hace un despliegue sin ajustes de configuración, se crea una revisión con los mismos ajustes de configuración que la revisión anterior. En la primera revisión de un servicio de Cloud Run, si se despliega sin ajustes de configuración, se crea una revisión con todos los ajustes predeterminados.
Valores predeterminados de configuración
Ajuste de configuración | Entorno estándar de App Engine | Entorno flexible de App Engine | Cloud Run |
---|---|---|---|
Recursos de computación | F1 | 1 vCPU, 0,6 GB | 1 vCPU y 512 MB |
Simultaneidad máxima (solicitudes) | 10 | Ninguno | 80 |
Tiempo de espera de solicitud |
|
60 minutos | 5 minutos |
Uso de CPU objetivo | 60 % | 50 % | 60 % |
Número máximo de instancias | Ninguno | 20 | 100 |
Número mínimo de instancias | 0 | 2 | 0 |
Punto de entrada
Cuando se implementa desde el origen, App Engine lee el comando de punto de entrada del atributo entrypoint
en el archivo app.yaml
. Si no se proporciona ningún punto de entrada, se utiliza un valor predeterminado específico del tiempo de ejecución. Cloud Run usa buildpacks de Google Cloud al desplegar desde una fuente. Algunos lenguajes no tienen un punto de entrada predeterminado, por lo que debes proporcionar uno o la compilación fallará. Por ejemplo, los paquetes de compilación de Python requieren un Procfile
o especificar la variable de entorno de compilación GOOGLE_ENTRYPOINT
.
Consulta la documentación de los buildpacks para ver los requisitos de configuración específicos de cada lenguaje.
Escalado
Aunque Cloud Run y el entorno estándar de App Engine comparten gran parte de la misma infraestructura de escalado, Cloud Run se ha optimizado para permitir un escalado mucho más rápido. Como parte de esta optimización, los ajustes configurables se limitan a los siguientes:
- Simultaneidad máxima
- Instancias máximas y mínimas
En las instancias de Cloud Run, la utilización de CPU objetivo no se puede configurar y se fija en el 60%. Consulta más información sobre el autoescalado en la documentación de Cloud Run.
El entorno flexible de App Engine usa la función Autoscaler de Compute Engine, por lo que tiene características de escalado muy diferentes a las del entorno estándar de App Engine y Cloud Run.
Tiempo de espera de instancia inactiva
En App Engine, las instancias inactivas permanecen activas hasta 15 minutos después de que se haya terminado de procesar la última solicitud. Cloud Run te permite configurar este comportamiento mediante la asignación de CPU. Para obtener el mismo comportamiento que App Engine, define la asignación de CPU como CPU siempre asignada. También puedes usar la opción CPU solo asignada durante el procesamiento de solicitudes para que las instancias inactivas se cierren inmediatamente (si no hay solicitudes pendientes).
Solicitudes de preparación
Cloud Run activa automáticamente las instancias mediante el comando de punto de entrada del contenedor, por lo que no tienes que habilitar manualmente las solicitudes de activación ni configurar un controlador /_ah/warmup
. Si tienes código que quieres ejecutar al iniciar la instancia, antes de que se procese ninguna solicitud, puedes hacer lo siguiente:
- Configurar la aplicación para que escuche las solicitudes
- Configurar una sonda de inicio personalizada
Contenido estático
En el entorno estándar de App Engine, puedes publicar contenido estático sin usar recursos de computación publicándolo desde Cloud Storage o configurando gestores.Cloud Run no tiene la opción de gestores para publicar contenido estático, por lo que puedes publicar el contenido desde el servicio Cloud Run (igual que el contenido dinámico) o desde Cloud Storage.
Rol Invocador de Cloud Run
Cloud Run también ofrece la posibilidad de controlar el acceso a un servicio con Gestión de Identidades y Accesos (IAM). Los enlaces de políticas de gestión de identidades y accesos de un servicio se pueden configurar mediante la CLI de gcloud, la consola o Terraform.
Para replicar el comportamiento de App Engine, puedes hacer que el servicio sea público permitiendo las solicitudes sin autenticar. Se puede definir durante la implementación o actualizando los enlaces de la política de gestión de identidades y accesos en un servicio.
Implementación
Usa la marca de implementación --allow-unauthenticated
:
gcloud run deploy SERVICE_NAME ... --allow-unauthenticated
Servicio actual
Usa el comando gcloud run services add-iam-policy-binding
:
gcloud run services add-iam-policy-binding SERVICE_NAME \ --member="allUsers" \ --role="roles/run.invoker"
donde SERVICE_NAME
es el nombre del servicio de Cloud Run.
También puedes controlar quién tiene acceso al servicio concediendo el rol de gestión de identidades y accesos Invocador de Cloud Run, que se puede configurar por servicio.
Implementación
gcloud run deploy SERVICE_NAME ... --no-allow-unauthenticated gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=MEMBER_TYPE \ --role="roles/run.invoker"
donde SERVICE_NAME
es el nombre del servicio y
MEMBER_TYPE
es el tipo de principal. Por ejemplo, user:email@domain.com
.
Para ver una lista de los valores aceptables de MEMBER_TYPE
, consulta Identificadores principales.
Servicio actual
gcloud run services add-iam-policy-binding SERVICE_NAME \ --member=MEMBER_TYPE \ --role="roles/run.invoker"
donde SERVICE_NAME
es el nombre del servicio y
MEMBER_TYPE
es el tipo de principal. Por ejemplo, user:email@domain.com
.
Para ver una lista de los valores aceptables de MEMBER_TYPE
, consulta Identificadores principales.
Variables de entorno y metadatos
Tanto App Engine como Cloud Run tienen determinadas variables de entorno que se definen automáticamente. En la siguiente tabla se muestran las variables de entorno de App Engine y sus equivalentes en Cloud Run. Cloud Run solo implementa unas pocas variables de entorno, en comparación con App Engine, pero los datos disponibles en el servidor de metadatos son prácticamente los mismos.
Variables de entorno predeterminadas
Nombre de App Engine | Nombre de {[cloud_run_name]} | Descripción |
---|---|---|
GAE_SERVICE
|
K_SERVICE
|
El nombre del servicio actual. En App Engine, se asigna el valor `default` si no se especifica. |
GAE_VERSION
|
K_REVISION
|
La etiqueta de la versión actual de tu servicio. |
PORT
|
PORT
|
El puerto que recibe solicitudes HTTP. |
N/A | K_CONFIGURATION
|
Nombre de la configuración de Cloud Run que ha creado la revisión. |
GOOGLE_CLOUD_PROJECT
|
N/A | El ID de proyecto Google Cloud asociado a tu aplicación. |
GAE_APPLICATION
|
El ID de tu aplicación de App Engine. Este ID tiene el prefijo "region code~", como "e~" en el caso de las aplicaciones implementadas en Europa. | |
GAE_DEPLOYMENT_ID
|
ID de la implementación actual. | |
GAE_ENV
|
El entorno de App Engine. Se define como `standard` si está en el entorno estándar. | |
GAE_INSTANCE
|
El ID de la instancia en la que se ejecuta tu servicio. | |
GAE_MEMORY_MB
|
Cantidad de memoria disponible para el proceso de la aplicación, en MB. | |
NODE_ENV (solo disponible en el entorno de ejecución de Node.js)
|
Configúralo como producción cuando se haya implementado tu servicio. | |
GAE_RUNTIME
|
El entorno de ejecución especificado en el archivo app.yaml. |
Rutas comunes del servidor de metadatos
Ruta | Descripción | Ejemplo |
---|---|---|
/computeMetadata/v1/project/project-id
|
ID del proyecto al que pertenece el servicio. | test_project |
/computeMetadata/v1/project/numeric-project-id
|
Número de proyecto al que pertenece el servicio | 12345678912 |
/computeMetadata/v1/instance/id
|
Identificador único de la instancia del contenedor (también disponible en los registros). | 16a61494692b7432806a16
(cadena de caracteres alfanuméricos) |
/computeMetadata/v1/instance/region
** No disponible en el entorno flexible de App Engine |
Región de este servicio. Devuelve projects/PROJECT_NUMBER/regions/REGION .
|
projects/12345678912/regions/us-central1 |
/computeMetadata/v1/instance/service-accounts/default/email
|
Correo de la cuenta de servicio de tiempo de ejecución de este servicio. | service_account@test_project.iam.gserviceaccount.com |
/computeMetadata/v1/instance/service-accounts/default/token
|
Genera un token de acceso OAuth2 para la cuenta de servicio de este servicio. Este endpoint devolverá una respuesta JSON con un atributo access_token .
|
{ "access_token":"<TOKEN>", "expires_in":1799, "token_type":"Bearer" } |
Siguientes pasos
- Guía de inicio rápido: despliega un servicio web con Cloud Run
- ¿Mi aplicación es adecuada para Cloud Run?
- Migrar mi dominio personalizado de App Engine a Cloud Load Balancing
- Otros recursos:
- Migrar de App Engine a Cloud Run con Docker (Python: laboratorio, vídeo; Java: laboratorio)
- Migrar de App Engine a Cloud Run con buildpacks (Python: codelab, vídeo; Java: codelab)