Comparar App Engine y Cloud Run

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.

Más información sobre los IDs de región

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
  • https://SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
  • https://SERVICE_IDENTIFIER.run.app
URL de la versión o revisión https://VERSION-dot-SERVICE-dot-PROJECT_ID.REGION_ID.r.appspot.com
  • https://TAG---SERVICE_NAME-PROJECT_NUMBER.REGION.run.app
  • https://TAG---SERVICE_IDENTIFIER.run.app

Escalado

Escalado automático
Escalado manual
Escalado a cero No
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
  • Escalado automático: 10 minutos
  • Escalado manual o básico: 24 horas
60 minutos Se puede configurar hasta 60 minutos (el valor predeterminado es 5 minutos).

Implementación

De la fuente
Imagen de contenedor No Sí (runtimes personalizados)
Contenedores sidecar No . Los sidecars se ejecutan junto al contenedor principal y atienden solicitudes web.

Recursos de computación

vCPU
Clase de instancia vCPU* Memoria
F/B1 0,25 384 MB
F/B2 0.5 768 MB
F/B4 1 1,5 GB
F/B4_1G 1 3 GB
B8 2 3 GB
* Los equivalentes de vCPU son aproximados
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
Facturación basada en instancias (coste por hora de instancia) Instancia F4/B4: 0,2 USD
  • vCPU: 0,0526 USD
  • Memoria: 0,0071 USD
    • vCPU: 0,0648 USD
    • Memoria: 0,0072 USD

    Seguridad

    Configuración de entrada
    Rol de invocador No
    IAP
    Cortafuegos Configurar con Google Cloud Armor
    Secret Manager Sí, con las bibliotecas de cliente de Cloud. . Puedes montar cada secreto como un volumen o pasar un secreto mediante variables de entorno.

    Conectividad

    Dominios personalizados
    Conectividad de VPC (incluida la VPC compartida) N/A
    Configuración de salida de VPC N/A
    Balanceo de carga multirregional No
    Streaming del servidor No

    Acceder a los servicios de Google Cloud

    Cloud SQL
    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 (solo Java, Python, Go y PHP) No No

    Modelo de recurso

    Diagrama del modelo de recursos de App Engine y Cloud Run

    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, donde REVISION_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 y https://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:
    instance_class: F1
    ..
    ..

    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
    • Escalado automático: 10 minutos
    • Escalado manual o básico: 24 horas
    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:

    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:

    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