Migrar una aplicación del entorno flexible de App Engine a 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

En esta guía se describe cómo migrar una aplicación de App Engine que se conecta a una instancia de Cloud SQL con una IP pública.

En general, los pasos de esta guía muestran cómo puedes desplegar el mismo código fuente de la aplicación en Cloud Run y, a continuación, configurarlo para que use el mismo usuario de la base de datos de Cloud SQL para conectar tu instancia y tu base de datos.

En los pasos de esta guía no se explica cómo usar una conexión IP privada interna, ya que primero debes modificar el código de tu aplicación. Sin embargo, después de desplegar tu aplicación en Cloud Run, puedes seguir los pasos que se indican en Conectarse a Cloud SQL desde Cloud Run para consultar los requisitos y cómo usar las IPs privadas.

Para obtener más información sobre las similitudes y diferencias entre App Engine y Cloud Run, incluidas las ventajas de migrar a Cloud Run, consulta el resumen de la comparación.

Antes de empezar

  1. Asegúrate de que Cloud Run cumpla los requisitos de tu aplicación. Consulta la comparación entre App Engine y Cloud Run para determinar si los recursos de Cloud Run, como la CPU y la memoria, se ajustan a tus necesidades.
  2. En esta guía se da por hecho que tu aplicación se ejecuta sin errores.

  3. Necesitas acceso a tu instancia de Cloud SQL, incluido el nombre de usuario y la contraseña de la base de datos para conectar tu aplicación. Cloud Run usa el cifrado y se conecta a través del proxy de autenticación de Cloud SQL mediante sockets Unix o conectores de Cloud SQL.

  4. Consulta las siguientes diferencias de Cloud Run:

    • Cloud Run usa el término Revision en lugar de Version para representar cada vez que despliegas cambios en un servicio específico. Cuando despliegas tu aplicación en un servicio de Cloud Run por primera vez, se crea su primera revisión. Cada despliegue posterior de un servicio crea otra revisión. Más información sobre cómo desplegar en Cloud Run

    • Puedes desplegar tu código fuente en Cloud Run mediante la interfaz de línea de comandos de Google Cloud o la consola para configurar y gestionar los ajustes de tus aplicaciones. Google Cloud Cloud Run no requiere una configuración basada en archivos, pero admite la configuración YAML y puedes usar la herramienta app2run para traducir tu archivo de App Engine a Cloud Run.

    • Todos los servicios que despliegues en Cloud Run usan el dominio run.app en la URL para acceder al servicio públicamente.

    • A diferencia de los servicios de App Engine, que son públicos de forma predeterminada, los servicios de Cloud Run son privados de forma predeterminada y requieren que los configures para que tengan acceso público (sin autenticar).

Migrar tu aplicación a Cloud Run

A grandes rasgos, el proceso para migrar tu aplicación de App Engine a Cloud Run consta de los siguientes pasos:

  1. Habilita las APIs necesarias.
  2. Configurar la cuenta de servicio de Cloud Run
  3. Desplegar una aplicación en Cloud Run

Habilitar las APIs necesarias

Antes de desplegar tu aplicación en Cloud Run, debes habilitar las APIs de Cloud Run y Artifact Registry.

Usa la Google Cloud consola para habilitar las APIs:

Ir a APIs y servicios

Configurar la cuenta de servicio de Cloud Run

Puedes crear una cuenta de servicio o seguir usando la misma cuenta de servicio gestionada por el usuario en Cloud Run que usas en App Engine. En la cuenta de servicio, debes asegurarte de que estén configurados los siguientes roles de Gestión de Identidades y Accesos (IAM) o los permisos equivalentes:

Para desplegar en Cloud Run, debes tener una de las siguientes opciones:

  • Propietario
  • Editor
  • Los roles Administrador de Cloud Run y Usuario de cuenta de servicio
  • Permisos de Cloud Run equivalentes

Para las conexiones de IP pública a Cloud SQL, debe tener una de las siguientes opciones:

Desplegar una aplicación en Cloud Run

No es necesario modificar el código para desplegar tu aplicación de App Engine en Cloud Run.

En los siguientes pasos, desplegarás tu aplicación en un nuevo servicio de Cloud Run y, al mismo tiempo, configurarás ese servicio para que se conecte a Cloud SQL.

Al igual que el entorno flexible de App Engine, Cloud Run admite implementaciones basadas en contenedores y en código fuente. Necesitas tener acceso a la imagen de contenedor o al repositorio de código fuente, según el método de implementación que sigas.

Desplegar imágenes de contenedor

Si tus servicios de App Engine se han desplegado con un contenedor creado manualmente, puedes usar la misma imagen de contenedor para desplegar tu servicio en Cloud Run. Para desplegar la imagen de contenedor de App Engine en Cloud Run, sigue estos pasos:

  1. Anota la URL del registro en el que se encuentra la imagen de tu contenedor. Es la misma URL que proporciona en la marca --image-url al implementar en App Engine.

  2. Despliega tu imagen de contenedor:

    consola

    1. En la Google Cloud consola, ve a la página Cloud Run.

      Ir a Cloud Run

    2. Haz clic en Crear servicio.

    3. Haz clic en el botón Seleccionar del campo URL de la imagen del contenedor y elige la imagen del contenedor que has desplegado en App Engine.

    4. Escribe un nombre para el servicio. Elige un nombre único que represente la aplicación que vas a implementar.

    5. En la sección Autenticación, selecciona Permitir las invocaciones sin autenticar.

    6. Debes crear las mismas variables de entorno para Cloud Run que definiste en el archivo app.yaml de tu aplicación App Engine. Despliega la sección Contenedor, Redes y Seguridad y crea las siguientes variables de entorno haciendo clic en Añadir variable en Variables de entorno:

      • Para los sockets Unix, añade lo siguiente:

          INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAME
        
      • En el caso de los conectores de Cloud SQL, añade lo siguiente:

          INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAME
        

        Sustituye INSTANCE_CONNECTION_NAME por el ID del proyecto, la región y la instancia, siguiendo el formato de project:region:instance-id. Puedes encontrarlo en la página Resumen de tu instancia en la Google Cloud consola.

        Estas conexiones se cifran automáticamente sin necesidad de configuración adicional.

      • DB_NAME: nombre de la base de datos.

      • DB_USER: nombre de usuario de tu base de datos.

      • DB_PASS: contraseña que especificaste al crear la base de datos.

    7. En la sección Conexiones de Cloud SQL, haz clic en el botón Añadir conexión y selecciona la instancia que has creado anteriormente para App Engine.

    8. Haz clic en Desplegar. Una vez que se haya desplegado el servicio de Cloud Run, en la parte superior de la página Detalles del servicio se mostrará una URL. Haz clic en el enlace URL para ver la aplicación desplegada en Cloud Run conectada a Cloud SQL.

    gcloud

    Ejecuta el siguiente comando para crear un servicio en Cloud Run.Debes definir las marcas de configuración para incluir las mismas variables de entorno de conexión SQL definidas en el archivo app.yaml de tu aplicación de App Engine:

    gcloud run deploy run-sql --image IMAGE \
      --allow-unauthenticated \
      --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
      --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
      --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
      --set-env-vars DB_NAME="DB_NAME" \
      --set-env-vars DB_USER="DB_USER" \
      --set-env-vars DB_PASS="DB_PASS"
    

    Sustituye:

    • IMAGE con la imagen que vas a implementar
    • INSTANCE_CONNECTION_NAME con el nombre de conexión de la instancia de Cloud SQL o una lista de nombres de conexión separados por comas. Puedes encontrar el INSTANCE_CONNECTION_NAME ejecutando el siguiente comando:

        gcloud instances describe INSTANCE_NAME
      
    • DB_NAME con el nombre de tu base de datos.

    • DB_USER con el nombre de usuario de tu base de datos.

    • DB_PASS con la contraseña de tu usuario de base de datos.

Desplegar código fuente

Cloud Run usa internamente paquetes de compilación y Cloud Build para compilar automáticamente imágenes de contenedor a partir de tu código fuente, por lo que no es necesario que compiles manualmente un contenedor ni que especifiques un Dockerfile. Sin embargo, si hay un Dockerfile, se usará.

Para desplegar un servicio de Cloud Run desde el código fuente, se usa Artifact Registry, por lo que esta función solo está disponible en las regiones admitidas por Artifact Registry.

Para desplegar el mismo código fuente que desplegaste anteriormente en App Engine, sigue estos pasos:

  1. Cambia al directorio de origen donde se encuentra el código fuente de tu aplicación.

      cd YOUR_APPENGINE_CODE_DIR
    
  2. Despliega en Cloud Run.

    Para compilar el código fuente y desplegar la aplicación, ejecuta el comando deploy con la marca --source. Debes definir marcas de configuración para incluir las mismas variables de entorno de conexión SQL que se definen en el archivo app.yaml de tu aplicación de App Engine:

      gcloud run deploy run-sql --source SOURCE \
        --allow-unauthenticated \
        --add-cloudsql-instances INSTANCE_CONNECTION_NAME\
        --set-env-vars INSTANCE_UNIX_SOCKET="/cloudsql/INSTANCE_CONNECTION_NAME" \
        --set-env-vars INSTANCE_CONNECTION_NAME="INSTANCE_CONNECTION_NAME" \
        --set-env-vars DB_NAME="DB_NAME" \
        --set-env-vars DB_USER="DB_USER" \
        --set-env-vars DB_PASS="DB_PASS"
    

    Sustituye:

    • SOURCE con la ruta al directorio de origen de App Engine
    • INSTANCE_CONNECTION_NAME con el nombre de conexión de la instancia de Cloud SQL o una lista de nombres de conexión separados por comas. Puedes encontrar el INSTANCE_CONNECTION_NAME ejecutando el siguiente comando:
        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME con el nombre de tu base de datos.
    • DB_USER con el nombre de usuario de tu base de datos.
    • DB_PASS con la contraseña de tu usuario de base de datos.
  3. Introduce el nombre del SERVICIO cuando se te pida.

  4. Responde y cuando se te pida que instales las APIs necesarias. Solo tienes que hacerlo una vez por proyecto. Espera a que se complete la compilación y la implementación. Cuando termine, se mostrará un mensaje similar a este:

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://sample.run.app
    

    Para obtener más información sobre cómo desplegar código fuente en Cloud Run, consulta Desplegar desde código fuente.

Pasos siguientes