Migrar aplicaciones Node.js de Heroku a Cloud Run


En este tutorial se describe cómo migrar aplicaciones web Node.js que se ejecutan en Heroku a Cloud Run en Google Cloud. Este tutorial está dirigido a arquitectos y propietarios de productos que quieran migrar sus aplicaciones de Heroku a servicios gestionados en Google Cloud.

Cloud Run es una plataforma de computación gestionada que te permite ejecutar contenedores sin reconocimiento del estado, los cuales se pueden invocar mediante solicitudes HTTP. Se basa en Knative, un proyecto de código abierto que permite la portabilidad entre plataformas y admite flujos de trabajo de contenedores y estándares de entrega continua. La plataforma Cloud Run está bien integrada con la Google Cloud suite de productos, lo que te facilita el diseño y el desarrollo de aplicaciones portátiles, escalables y resistentes.

En este tutorial, aprenderás a migrar una aplicación escrita en Node.js que usa Heroku Postgres como servicio de respaldo en Heroku. Google Cloud La aplicación web está en contenedores y alojada en Cloud Run, y usa Cloud SQL para PostgreSQL como capa de persistencia.

En el tutorial, usarás una aplicación sencilla llamada Tareas que te permite ver y crear tareas. Estas tareas se almacenan en Heroku Postgres en la implementación actual de la aplicación en Heroku.

En este tutorial se da por supuesto que conoces las funciones básicas de Heroku y que tienes una cuenta de Heroku (o acceso a una). También se presupone que conoces Cloud Run, Cloud SQL, Docker y Node.js.

Objetivos

  • Crea una imagen Docker para desplegar la aplicación en Cloud Run.
  • Crea una instancia de Cloud SQL para PostgreSQL que actúe como backend después de la migración a Google Cloud.
  • Revisa el código de Node.js para entender cómo se conecta Cloud Run a Cloud SQL y para ver los cambios de código (si los hay) que se necesitan para migrar a Cloud Run desde Heroku.
  • Migrar datos de Heroku Postgres a Cloud SQL para PostgreSQL.
  • Despliega la aplicación en Cloud Run.
  • Prueba la aplicación desplegada.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

También es posible que se te cobre por los recursos que utilices en Heroku.

Antes de empezar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud SQL, Cloud Build, Cloud Run, Container Registry, Service Networking, Serverless VPC Access APIs.

    Enable the APIs

  5. Make sure that you have the following role or roles on the project: Cloud Run > Cloud Run Admin, Cloud Storage > Storage Admin, Cloud SQL > Cloud SQL Admin, Compute Engine > Compute Network Admin, Resource Manager > Project IAM Admin, Cloud Build > Cloud Build Editor, Serverless VPC Access > Serverless VPC Access Admin, Logging > Logs Viewer, Service Accounts > Service Account Admin, Service Accounts > Service Account User, and Service Usage > Service Usage Consumer

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Ir a IAM
    2. Selecciona el proyecto.
    3. Haz clic en Conceder acceso.
    4. En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.

    5. En la lista Selecciona un rol, elige un rol.
    6. Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
    7. Haz clic en Guardar.
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Verify that billing is enabled for your Google Cloud project.

  8. Enable the Cloud SQL, Cloud Build, Cloud Run, Container Registry, Service Networking, Serverless VPC Access APIs.

    Enable the APIs

  9. Make sure that you have the following role or roles on the project: Cloud Run > Cloud Run Admin, Cloud Storage > Storage Admin, Cloud SQL > Cloud SQL Admin, Compute Engine > Compute Network Admin, Resource Manager > Project IAM Admin, Cloud Build > Cloud Build Editor, Serverless VPC Access > Serverless VPC Access Admin, Logging > Logs Viewer, Service Accounts > Service Account Admin, Service Accounts > Service Account User, and Service Usage > Service Usage Consumer

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the project.
    3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Ir a IAM
    2. Selecciona el proyecto.
    3. Haz clic en Conceder acceso.
    4. En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.

    5. En la lista Selecciona un rol, elige un rol.
    6. Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
    7. Haz clic en Guardar.
  10. Configurar un entorno

    1. Abre Cloud Shell.

      ABRIR Cloud Shell

    2. En Cloud Shell, define las variables de entorno y los valores predeterminados de la CLI de Google Cloud que se usa en este tutorial.

      gcloud config set project PROJECT_ID
      gcloud config set run/region us-central1
      

      Sustituye PROJECT_ID por el ID del proyecto.

    Arquitectura

    En las siguientes figuras se muestra la arquitectura de la aplicación web en Heroku (tal cual) y su diseño arquitectónico en Google Cloud (que crearás).

    Arquitectura tal cual en Heroku.
    Imagen 1. Arquitectura tal cual en Heroku

    La aplicación Tareas que se ha implementado en Heroku consta de uno o varios web dynos. Los dynos web pueden recibir tráfico HTTP y responder a él, a diferencia de los dynos de trabajador, que son más adecuados para tareas en segundo plano y tareas programadas. La aplicación sirve una página de índice que muestra las tareas almacenadas en una base de datos de Postgres, usando la biblioteca de plantillas Mustache para Node.js.

    Puedes acceder a la aplicación a través de una URL HTTPS. Una ruta /tasks en esa URL te permite crear tareas nuevas.

    Arquitectura tal cual en Heroku.
    Imagen 2. Arquitectura en la que se basa Google Cloud

    En Google Cloud, Cloud Run se usa como plataforma sin servidor para desplegar la aplicación Tasks. Cloud Run se ha diseñado para ejecutar contenedores sin estado basados en solicitudes. Es una opción adecuada cuando necesitas que tu servicio gestionado admita aplicaciones contenerizadas que se escalen automáticamente y también a cero cuando no estén sirviendo tráfico.

    Asignación de componentes usados en Heroku a Google Cloud

    En la siguiente tabla se asignan los componentes de la plataforma Heroku a Google Cloud. Esta asignación te ayuda a traducir la arquitectura descrita en este tutorial de Heroku a Google Cloud.

    Componente Plataforma Heroku Google Cloud
    Contenedores Dynos Heroku usa el modelo de contenedor para crear y escalar aplicaciones de Heroku. Estos contenedores de Linux se denominan dynos y se pueden escalar hasta el número que especifiques para satisfacer las demandas de recursos de tu aplicación de Heroku. Puedes elegir entre varios tipos de dynos en función de los requisitos de memoria y CPU de tu aplicación. Contenedores de Cloud Run: Google Cloud permite ejecutar cargas de trabajo en contenedores sin reconocimiento del estado que se pueden ejecutar en un entorno totalmente gestionado o en clústeres de Google Kubernetes Engine (GKE).
    Aplicación web Aplicación Heroku: los dynos son los componentes básicos de las aplicaciones Heroku. Las aplicaciones suelen constar de uno o varios tipos de dyno, normalmente una combinación de dynos web y de trabajador. Servicio de Cloud Run: una aplicación web se puede modelar como un servicio de Cloud Run. Cada servicio obtiene su propio punto de conexión HTTPS y puede aumentar o reducir automáticamente de 0 a N en función del tráfico de su punto de conexión de servicio.
    Base de datos Heroku Postgres es la base de datos como servicio (DaaS) de Heroku basada en PostgreSQL. Cloud SQL es un servicio de base de datos gestionado para bases de datos relacionales en Google Cloud.

    Desplegar la aplicación web de ejemplo Tasks en Heroku

    En las siguientes secciones se muestra cómo configurar la interfaz de línea de comandos (CLI) de Heroku, clonar el repositorio de origen de GitHub y desplegar la aplicación en Heroku.

    Configurar la interfaz de línea de comandos de Heroku

    En este tutorial se ejecuta la CLI de Heroku en Cloud Shell y se debe autenticar mediante una clave de API de Heroku. Cuando se ejecuta en Cloud Shell, la CLI de Heroku no puede autenticarse mediante una contraseña o una autenticación basada en la Web.

    Si ejecutas el ejemplo en un terminal local, puedes usar cualquier método de autenticación de la CLI de Heroku. Si ejecutas el tutorial en una terminal local, también debes instalar Google Cloud CLI, git y Docker.

    1. Inicia sesión en la consola web de Heroku y, a continuación, en la página de configuración de tu cuenta, copia el valor de tu clave de API.

    2. En Cloud Shell, instala la CLI de Heroku.

    3. En Cloud Shell, autentica la CLI de Heroku. Cuando se te pida la contraseña, introduce el valor de la clave de API que has copiado de la consola de Heroku, no la contraseña que usas para iniciar sesión en la consola.

      heroku login --interactive
      

    Clonar el repositorio de origen

    1. En Cloud Shell, clona el repositorio de GitHub de la aplicación de ejemplo Tasks:

      git clone https://github.com/GoogleCloudPlatform/migrate-webapp-heroku-to-cloudrun-node.git
      
    2. Cambia el directorio por el directorio creado al clonar el repositorio:

      cd migrate-webapp-heroku-to-cloudrun-node
      

      El directorio contiene los siguientes archivos:

      • Una secuencia de comandos de Node.js llamada index.js con el código de las rutas que sirve la aplicación web.
      • Archivos package.json y package-lock.json que definen las dependencias de la aplicación web. Debes instalar estas dependencias para que la aplicación se ejecute.
      • Un archivo Procfile que especifica el comando que ejecuta la aplicación al iniciarse. Crea un archivo Procfile para desplegar tu aplicación en Heroku.
      • Un directorio views con el contenido HTML que sirve la aplicación web en la ruta "/".
      • Un archivo .gitignore.

    Desplegar una aplicación en Heroku

    1. En Cloud Shell, crea una aplicación de Heroku:

      heroku create
      

      Anota el nombre que se ha creado para la aplicación. Necesitarás este valor en el siguiente paso.

    2. Crea una variable de entorno para el nombre de la aplicación de Heroku:

      export APP_NAME=APP_NAME
      

      Sustituye APP_NAME por el nombre de la aplicación devuelto por el comando heroku create.

    3. Añade el complemento Heroku Postgres para aprovisionar una base de datos PostgreSQL:

      heroku addons:create heroku-postgresql:mini
      
    4. Comprueba que el complemento se haya añadido correctamente:

      heroku addons
      

      Si el complemento de Postgres se ha añadido correctamente, verás un mensaje similar al siguiente:

      Add-on               Plan     Price       State
      -----------------    -----    --------    -----
      heroku-postgresql    mini     5$/month    created
      
    5. Despliega la aplicación en Heroku:

      git push heroku master
      
    6. Ejecuta el siguiente comando para confirmar el valor de DATABASE_URL.

      heroku config
      

      Anota el valor obtenido de DATABASE_URL. Necesitarás este valor en el siguiente paso.

    7. Ejecuta un contenedor Docker.

      docker run -it --rm postgres psql "DATABASE_URL"
      

      Sustituye DATABASE_URL por la URL de Heroku Postgres que has anotado en el paso anterior.

    8. En el contenedor Docker, crea la tabla TASKS con el siguiente comando:

      CREATE TABLE TASKS
      (DESCRIPTION TEXT NOT NULL);
      
    9. Sal del contenedor:

      exit
      
    10. En Cloud Shell, obtén la URL web de tu aplicación de Heroku ejecutando el siguiente comando:

      heroku info
      
    11. Abre la URL web en una ventana del navegador. La aplicación tiene el siguiente aspecto (aunque tu versión no tendrá las tareas):

      Aplicación de tareas pendientes en el navegador web.

    12. Crea tareas de ejemplo en tu aplicación desde el navegador. Asegúrate de que las tareas se recuperan de la base de datos y se muestran en la interfaz de usuario.

    Preparar el código de la aplicación web para migrar a Cloud Run

    En esta sección se detallan los pasos que debe seguir para preparar su aplicación web para implementarla en Cloud Run.

    Compilar y publicar un contenedor Docker en Container Registry

    Necesitas una imagen de Docker para compilar el contenedor de la aplicación de forma que pueda ejecutarse en Cloud Run. Puedes crear el contenedor manualmente o con Buildpacks.

    Crear un contenedor manualmente

    1. En Cloud Shell, crea un Dockerfile en el directorio creado al clonar el repositorio de este tutorial:

      cat <<"EOF" > Dockerfile
      # Use the official Node image.
      # https://hub.docker.com/_/node
      FROM node:10-alpine
      
      # Create and change to the app directory.
      WORKDIR /app
      
      # Copying this separately prevents re-running npm install on every code change.
      COPY package*.json ./
      RUN npm install
      
      # Copy local code to the container image.
      COPY . /app
      
      # Configure and document the service HTTP port.
      ENV PORT 8080
      EXPOSE $PORT
      
      # Run the web service on container startup.
      CMD ["npm", "start"]
      EOF
      
    2. Crea tu contenedor con Cloud Build y publica la imagen en Container Registry:

      gcloud builds submit --tag gcr.io/PROJECT_ID/APP_NAME:1 \
        --gcs-log-dir=gs://PROJECT_ID_cloudbuild
      
    3. Crea una variable de entorno que contenga el nombre de la imagen de Docker que has creado:

      export IMAGE_NAME="gcr.io/PROJECT_ID/APP_NAME:1"
      

    Crear un contenedor con paquetes de compilación

    1. En Cloud Shell, instala la CLI de pack.

    2. Configura la CLI de paquetes para que use el compilador de Heroku de forma predeterminada:

      pack config default-builder heroku/buildpacks:22
      
    3. Crea una variable de entorno para almacenar el nombre de la imagen Docker:

      export IMAGE_NAME=gcr.io/PROJECT_ID/APP_NAME:1
      
    4. Crea la imagen con el comando pack y transfiérela o publícala en Container Registry:

      pack build --publish $IMAGE_NAME
      

    Crear una instancia de Cloud SQL para PostgreSQL

    Crea una instancia de Cloud SQL para PostgreSQL que sirva de backend para la aplicación web. En este tutorial, PostgreSQL es la opción más adecuada para la aplicación de ejemplo desplegada en Heroku, que usa una base de datos de PostgreSQL como backend. Para los fines de esta aplicación, la migración a Cloud SQL para PostgreSQL desde un servicio de Postgres gestionado no requiere ningún cambio de esquema.

    .
    1. Prepara tu red para Cloud SQL con una dirección IP privada.

      gcloud compute addresses create google-managed-services-default \
        --global \
        --purpose=VPC_PEERING \
        --prefix-length=16 \
        --description="peering range for CloudSQL Private Service Access" \
        --network=default
      
      gcloud services vpc-peerings connect \
        --service=servicenetworking.googleapis.com \
        --ranges=google-managed-services-default \
        --network=default \
        --project=PROJECT_ID
      
    2. Crea una variable de entorno llamada CLOUDSQL_DB_NAME para almacenar el nombre de la instancia de base de datos que crearás en el siguiente paso:

      export CLOUDSQL_DB_NAME=tasks-db
      
    3. Crea la base de datos:

      gcloud sql instances create $CLOUDSQL_DB_NAME \
      --cpu=1 \
      --memory=4352Mib \
      --database-version=POSTGRES_15 \
      --region=us-central1 \
      --network default \
      --no-assign-ip
      

      La instancia puede tardar unos minutos en inicializarse.

    4. Define una contraseña para el usuario de Postgres:

      gcloud sql users set-password postgres \
          --instance=$CLOUDSQL_DB_NAME  \
          --password=POSTGRES_PASSWORD
      

      Sustituye POSTGRES_PASSWORD por la contraseña que quieras usar para la base de datos de Postgres.

    Importar datos en Cloud SQL desde Heroku Postgres

    Hay varios patrones de migración que puedes usar para migrar datos a Cloud SQL. Por lo general, el mejor enfoque, que requiere poco o ningún tiempo de inactividad, es configurar Cloud SQL como réplica de la base de datos que se va a migrar y convertir Cloud SQL en la instancia principal después de la migración. Heroku Postgres no admite réplicas externas (seguidores), por lo que en este tutorial se utilizan herramientas de código abierto para migrar el esquema de la aplicación.

    En la aplicación Tareas de este tutorial, se usa la utilidad pg_dump para exportar datos de Heroku Postgres a un segmento de Cloud Storage y, a continuación, importarlos a Cloud SQL. Esta utilidad puede transferir datos entre versiones homogéneas o cuando la versión de la base de datos de destino es más reciente que la de la base de datos de origen.

    1. En Cloud Shell, obtén las credenciales de la base de datos de Heroku Postgres que está asociada a la aplicación de ejemplo. Necesitarás estas credenciales en el siguiente paso.

      heroku pg:credentials:url
      

      Este comando devuelve la cadena de información de conexión y la URL de conexión de tu aplicación. La cadena de información de conexión tiene el siguiente formato:

      "dbname=DATABASE_NAME host=FQDN port=5432 user=USER_NAME password=PASSWORD_STRING sslmode=require"
      

      Necesitarás los valores que se muestran en la cadena de conexión en el siguiente paso.

      Para ver un ejemplo de un valor de FQDN (nombre de dominio totalmente cualificado) en una cadena de información de conexión, consulta la documentación de Heroku.

    2. Define variables de entorno para almacenar los valores de Heroku que usarás en los pasos siguientes:

      export HEROKU_PG_DBNAME=DATABASE_NAME
      export HEROKU_PG_HOST=FQDN
      export HEROKU_PG_USER=USER_NAME
      export HEROKU_PG_PASSWORD=PASSWORD_STRING
      

      Haz los cambios siguientes:

      • DATABASE_NAME: el nombre de la base de datos que se muestra en la cadena de información.
      • FQDN: el FQDN que se muestra en la cadena de información.
      • USER_NAME: el nombre de usuario que se muestra en la cadena de información.
      • PASSWORD_STRING: la cadena de contraseña que se muestra en la cadena de información.
    3. Crea una copia de seguridad en formato SQL de tu base de datos de Heroku Postgres:

      docker run \
        -it --rm \
        -e PGPASSWORD=$HEROKU_PG_PASSWORD \
        -v $(pwd):/tmp \
        --entrypoint "pg_dump" \
        postgres \
        -Fp \
        --no-acl \
        --no-owner \
        -h $HEROKU_PG_HOST \
        -U $HEROKU_PG_USER \
        $HEROKU_PG_DBNAME > herokudump.sql
      
    4. Crea una variable de entorno para almacenar el nombre de tu segmento de Cloud Storage:

      export PG_BACKUP_BUCKET=gs://PROJECT_ID-pg-backup-bucket
      
    5. Crea un segmento de Cloud Storage:

      gcloud storage buckets create $PG_BACKUP_BUCKET \
        --location=us-central1 \
        --public-access-prevention \
        --uniform-bucket-level-access
      
    6. Sube el archivo SQL a este segmento:

      gcloud storage cp herokudump.sql $PG_BACKUP_BUCKET/herokudump.sql
      
    7. Autoriza tu instancia de Cloud SQL con los roles necesarios para importar el archivo SQL del segmento de Cloud Storage:

      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='get("serviceAccountEmailAddress")') \
        --role=roles/storage.objectAdmin
      
      gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='get("serviceAccountEmailAddress")') \
        --role=roles/cloudsql.editor
      
    8. Importa el archivo SQL a la instancia de Cloud SQL:

      gcloud sql import sql $CLOUDSQL_DB_NAME $PG_BACKUP_BUCKET/herokudump.sql \
        --database=postgres \
        --user=postgres
      

      Cuando se te pida do you want to continue (y/n), introduce "y".

    Cómo accede Cloud Run a la base de datos de Cloud SQL

    Del mismo modo que la aplicación web implementada en Heroku necesita conectarse a la instancia gestionada de Heroku Postgres, Cloud Run requiere acceso a Cloud SQL para poder leer y escribir datos.

    Cloud Run se comunica con Cloud SQL mediante el proxy de Cloud SQL, que se activa y configura automáticamente al desplegar el contenedor en Cloud Run. La base de datos no necesita tener aprobadas direcciones IP externas porque toda la comunicación que recibe es del proxy mediante TCP seguro.

    Tu código debe invocar operaciones de base de datos (como obtener datos de la base de datos o escribir en ella) invocando el proxy a través de un socket UNIX.

    Como esta aplicación web está escrita en Node.js, se usa la biblioteca pg-connection-string para analizar una URL de base de datos y crear un objeto config. La ventaja de este enfoque es que permite conectarse a la base de datos backend sin problemas en Heroku y Cloud Run.

    En el siguiente paso, pasará la URL de la base de datos como una variable de entorno al desplegar la aplicación web.

    Desplegar la aplicación de ejemplo en Cloud Run

    1. En Cloud Shell, configura el acceso a VPC sin servidor para permitir el tráfico privado de Cloud Run a Cloud SQL:

      gcloud compute networks subnets create serverless-connector-subnet \
      --network=default \
      --range=10.0.0.0/28 \
      --region=us-central1
      
      gcloud compute networks vpc-access connectors create serverless-connector \
      --region=us-central1 \
      --subnet=serverless-connector-subnet
      
    2. En Cloud Shell, crea una variable de entorno que contenga el nombre de conexión de la instancia de Cloud SQL que has creado:

      export DB_CONN_NAME=$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='value(connectionName)')
      
    3. Crea una variable de entorno llamada DATABASE_URL para almacenar la cadena de conexión con la que conectarte al proxy de Cloud SQL a través de un puerto UNIX.

      export DATABASE_URL="socket:/cloudsql/${DB_CONN_NAME}?db=postgres&user=postgres&password=POSTGRES_PASSWORD"
      
    4. Crea una cuenta de servicio para Cloud Run con un rol de gestión de identidades y accesos para conectarte a la base de datos:

      gcloud iam service-accounts create sa-run-db-client
      
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:sa-run-db-client@PROJECT_ID.iam.gserviceaccount.com \
          --role=roles/cloudsql.client
      
    5. Despliega la aplicación web en Cloud Run:

      gcloud run deploy tasksapp-PROJECT_ID \
          --image=$IMAGE_NAME \
          --service-account=sa-run-db-client@PROJECT_ID.iam.gserviceaccount.com \
          --set-env-vars=DATABASE_URL=$DATABASE_URL \
          --add-cloudsql-instances $DB_CONN_NAME \
          --vpc-connector serverless-connector \
          --allow-unauthenticated
      
      

      El comando anterior también vincula tu contenedor de Cloud Run a la instancia de base de datos de Cloud SQL que has creado. El comando define una variable de entorno para que Cloud Run apunte a la cadena DATABASE_URL que has creado en el paso anterior.

    Probar la aplicación

    1. En Cloud Shell, obtén la URL en la que Cloud Run sirve el tráfico:

      gcloud run services list
      

      También puedes revisar el servicio de Cloud Run en la Google Cloud consola.

    2. Asegúrate de que tu aplicación web acepta solicitudes HTTP. Para ello, ve a la URL del servicio de Cloud Run.

    Cloud Run crea o activa un nuevo contenedor cuando se envía una solicitud HTTP al punto de conexión de servicio y si aún no se está ejecutando ningún contenedor. Esto significa que la solicitud que provoca que se ponga en marcha un nuevo contenedor puede tardar un poco más en atenderse. Teniendo en cuenta ese tiempo adicional, ten en cuenta el número de solicitudes simultáneas que puede admitir tu aplicación y los requisitos de memoria específicos que pueda tener.

    En esta aplicación, se usan los ajustes de simultaneidad predeterminados, que permiten que un servicio de Cloud Run atienda 80 solicitudes simultáneamente desde un solo contenedor.

    Limpieza

    Para evitar que se apliquen cargos en tu Google Cloud cuenta por los recursos utilizados en este tutorial. También puedes eliminar los recursos creados en Heroku para este tutorial.

    Eliminar el Google Cloud proyecto

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Eliminar la aplicación de Heroku

    Para eliminar la aplicación de ejemplo que has implementado en Heroku y el complemento de PostgreSQL asociado, ejecuta el siguiente comando:

    heroku apps:destroy -a APP_NAME
    

    Siguientes pasos