Migra una app del entorno flexible de App Engine a Cloud Run

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.

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

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

En los pasos de esta guía, no se incluye cómo usar una conexión IP privada interna porque eso requiere que primero modifiques el código de la aplicación. Sin embargo, después de implementar tu app en Cloud Run, puedes seguir los pasos de Conéctate a Cloud SQL desde Cloud Run para conocer los requisitos y cómo usar IP privadas.

Para obtener más información sobre las similitudes y diferencias entre App Engine y Cloud Run, incluidos los beneficios de migrar a Cloud Run, consulta el resumen de comparaciones.

Antes de comenzar

  1. Asegúrate de que Cloud Run cumpla con los requisitos de la aplicación. Revisa la comparación de App Engine y Cloud Run para determinar si los recursos de Cloud Run, como la CPU y la memoria, satisfacen tus necesidades.
  2. En esta guía, se da por sentado que tu app 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 app. Cloud Run usa encriptación y se conecta a través del proxy de autenticación de Cloud SQL mediante Sockets Unix o conectores de Cloud SQL.

  4. Revisa las siguientes diferencias de Cloud Run:

    • Cloud Run usa el término Revision, en lugar de Version, para representar cada vez que implementas cambios en un servicio específico. Cuando implementas tu app en un servicio en Cloud Run por primera vez, se crea su primera revisión. Cada implementación posterior de un servicio crea otra revisión. Obtén más información sobre la implementación en Cloud Run.

    • Puedes implementar tu código fuente en Cloud Run mediante Google Cloud CLI o la consola de Google Cloud para configurar y administrar la configuración de tus apps. Cloud Run no requiere configuración basada en archivos. Sin embargo, la configuración de YAML es compatible y puedes usar la herramienta app2run para traducir tu archivo existente de App Engine para Cloud Run.

    • Cada servicio que implementas en Cloud Run usa 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 el acceso público (no autenticado).

Migra tu app a Cloud Run

En un nivel alto, el proceso para migrar tu app de App Engine a Cloud Run consta de los siguientes pasos:

  1. Habilite las API necesarias
  2. Configura la cuenta de servicio de Cloud Run
  3. Implementa tu app en Cloud Run

Habilite las API necesarias

Antes de implementar la app en Cloud Run, primero debes habilitar las APIs de Cloud Run y Artifact Registry.

Usa la consola de Google Cloud para habilitar las APIs:

Ir a API y Services.

Configura la cuenta de servicio de Cloud Run

Puedes elegir crear una cuenta de servicio nueva o seguir usando la misma cuenta de servicio administrada por el usuario en Cloud Run que usas en App Engine. En la cuenta de servicio, debes asegurarte de que se configuren los siguientes roles de Identity and Access Management (IAM) o los permisos equivalentes:

Para implementar en Cloud Run, debes tener uno de los siguientes roles:

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

Para las conexiones IP públicas a Cloud SQL, debes contar con uno de los siguientes roles:

Implementa tu app en Cloud Run

No es necesario realizar cambios en el código para implementar tu app de App Engine en Cloud Run.

En los siguientes pasos, implementarás la app en un servicio nuevo de Cloud Run y configurarás ese servicio de forma simultánea 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 acceso a la imagen de contenedor o al repositorio de código fuente, según el método de implementación que sigas.

Implementar imágenes de contenedor

Si tus servicios de App Engine se implementan mediante un contenedor compilado de forma manual, puedes usar la misma imagen de contenedor para implementar tu servicio en Cloud Run. Para implementar tu imagen de contenedor de App Engine en Cloud Run, debes hacer lo siguiente:

  1. Toma nota de la URL del registro en la que se encuentra la imagen de contenedor. Esta es la misma URL que proporcionas en la marca --image-url cuando implementas en App Engine.

  2. Implementa la imagen de contenedor:

    Console

    1. En la consola de Google Cloud, 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 en el campo URL de imagen de contenedor y elige la imagen de contenedor que implementaste para App Engine.

    4. Ingresa un nombre para tu servicio. Elige un nombre único que represente la aplicación que estás implementando.

    5. En la sección Autenticación, selecciona Permitir invocaciones no autenticadas.

    6. Debes crear las mismas variables de entorno para Cloud Run que definiste en el archivo app.yaml de tu app de App Engine. Expande la sección Contenedor, Herramientas de redes, Seguridad y crea las siguientes variables de entorno mediante un clic en Agregar variable en Variables de entorno:

      • Para los sockets Unix, agrega lo siguiente:

          INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAME
        
      • Para los conectores de Cloud SQL, agrega lo siguiente:

          INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAME
        

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

        Estas conexiones se encriptan de forma automática sin ninguna configuración adicional.

      • DB_NAME: el nombre de tu base de datos.

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

      • DB_PASS: la contraseña que especificaste cuando creaste la base de datos.

    7. En la sección Conexiones de Cloud SQL, haz clic en el botón Agregar conexión y selecciona la instancia que creaste antes para App Engine.

    8. Haz clic en Implementar. Una vez implementado el servicio de Cloud Run, en la página Detalles del servicio, se mostrará una URL en la parte superior de la página. Haz clic en el vínculo URL para ver la aplicación implementada en Cloud Run conectada a Cloud SQL.

    gcloud

    Ejecuta el siguiente comando para crear un servicio nuevo en Cloud Run. Debes establecer marcas de configuración a fin de incluir las mismas variables de entorno de conexión de SQL definidas en el archivo app.yaml de tu app 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"
    

    Reemplaza lo siguiente:

    • IMAGE por la imagen que implementas
    • INSTANCE_CONNECTION_NAME por el nombre de conexión de la instancia de Cloud SQL o por una lista delimitada por comas de nombres de conexión. Para buscar el INSTANCE_CONNECTION_NAME, ejecuta lo siguiente:

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

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

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

Implementa código fuente

Cloud Run usa buildpacks y Cloud Build de forma interna para compilar imágenes de contenedor automáticamente a partir del código fuente y no requiere que compiles un contenedor de forma manual ni especifiques un Dockerfile. Sin embargo, si hay un Dockerfile, se usará.

En la implementación de un servicio de Cloud Run desde la fuente, se usa Artifact Registry, por lo que esta función solo está disponible en regiones compatibles con Artifact Registry.

Para implementar el mismo código fuente que implementaste antes en App Engine, haz lo siguiente:

  1. Cambia al directorio del código fuente donde reside el código fuente de tu aplicación.

      cd YOUR_APPENGINE_CODE_DIR
    
  2. Implementa en Cloud Run.

    Para compilar el código fuente e implementar la aplicación, ejecuta el comando de implementación con la marca --source. Debes establecer marcas de configuración para incluir las mismas variables de entorno de conexión de SQL definidas en el archivo app.yaml de tu app 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"
    

    Reemplaza lo siguiente:

    • SOURCE por la ruta de acceso al directorio del código fuente de App Engine
    • INSTANCE_CONNECTION_NAME por el nombre de conexión de la instancia de Cloud SQL o por una lista delimitada por comas de nombres de conexión. Para buscar el INSTANCE_CONNECTION_NAME, ejecuta lo siguiente:
        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME por el nombre de tu base de datos.
    • DB_USER por el nombre de usuario de tu base de datos.
    • DB_PASS por la contraseña del usuario de tu base de datos.
  3. Ingresa el nombre del SERVICE cuando se te solicite.

  4. Responde a cualquier solicitud para instalar las API obligatorias. Para ello, responde y cuando se te solicite. Solo debes hacer esto una vez en un proyecto. Espera a que se completen la compilación y la implementación. Cuando termines, 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 la implementación del código fuente en Cloud Run, consulta Implementa desde el código fuente.

Próximos pasos