Migrazione delle applicazioni Node.js da Heroku a Cloud Run

Last reviewed 2023-10-01 UTC

Questo tutorial descrive come eseguire la migrazione delle app web Node.js in esecuzione su Heroku in Cloud Run su Google Cloud. Questo tutorial è rivolto agli architect e ai proprietari di prodotti che vogliono eseguire la migrazione delle loro app da Heroku ai servizi gestiti su Google Cloud.

Cloud Run è una piattaforma di computing gestita che consente di eseguire container stateless richiamabili tramite richieste HTTP. Si basa su Knative open source, che consente la portabilità tra più piattaforme e supporta flussi di lavoro e standard dei container per la distribuzione continua. La piattaforma Cloud Run è ben integrata con la suite di prodotti Google Cloud e ti consente di progettare e sviluppare più facilmente app portabili, scalabili e resilienti.

In questo tutorial imparerai a eseguire la migrazione in Google Cloud di un'app scritta in Node.js e che utilizza Heroku Postgres come servizio di supporto su Heroku. L'app web è containerizzata e ospitata in Cloud Run e utilizza Cloud SQL per PostgreSQL come livello di persistenza.

Nel tutorial, utilizzerai una semplice app chiamata Tasks, che ti consente di visualizzare e creare attività. Queste attività sono archiviate in Heroku Postgres nell'attuale deployment dell'app su Heroku.

Questo tutorial presuppone che tu conosca le funzionalità di base di Heroku e che tu disponga di un account Heroku (o accesso a uno di questi account). Presuppone inoltre che tu conosca Cloud Run, Cloud SQL, Docker e Node.js.

Obiettivi

  • Creare un'immagine Docker per eseguire il deployment dell'app in Cloud Run.
  • Crea un'istanza Cloud SQL per PostgreSQL da utilizzare come backend dopo la migrazione a Google Cloud.
  • Esamina il codice Node.js per capire come si connette Cloud Run a Cloud SQL e per vedere le eventuali modifiche al codice necessarie per eseguire la migrazione da Heroku a Cloud Run.
  • Esegui la migrazione dei dati da Heroku Postgres a Cloud SQL per PostgreSQL.
  • Eseguire il deployment dell'app in Cloud Run.
  • Testare l'app di cui è stato eseguito il deployment.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Ti potrebbero essere addebitati anche i costi per le risorse che utilizzi su Heroku.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Cloud SQL, Cloud Build, Cloud Run, Container Registry, Service Networking, Serverless VPC Access.

    Abilita le API

  5. Assicurati di disporre dei seguenti ruoli nel progetto: 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

    Verifica i ruoli

    1. Nella console Google Cloud, vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Nella colonna Entità, individua la riga contenente il tuo indirizzo email.

      Se il tuo indirizzo email non è in questa colonna, significa che non disponi di alcun ruolo.

    4. Nella colonna Ruolo per la riga contenente il tuo indirizzo email, controlla se l'elenco dei ruoli include quelli richiesti.

    Concedi i ruoli

    1. Nella console Google Cloud, vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo indirizzo email.
    5. Nell'elenco Seleziona un ruolo, scegli un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ciascun ruolo aggiuntivo.
    7. Fai clic su Salva.
  6. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  7. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  8. Abilita le API Cloud SQL, Cloud Build, Cloud Run, Container Registry, Service Networking, Serverless VPC Access.

    Abilita le API

  9. Assicurati di disporre dei seguenti ruoli nel progetto: 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

    Verifica i ruoli

    1. Nella console Google Cloud, vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Nella colonna Entità, individua la riga contenente il tuo indirizzo email.

      Se il tuo indirizzo email non è in questa colonna, significa che non disponi di alcun ruolo.

    4. Nella colonna Ruolo per la riga contenente il tuo indirizzo email, controlla se l'elenco dei ruoli include quelli richiesti.

    Concedi i ruoli

    1. Nella console Google Cloud, vai alla pagina IAM.

      Vai a IAM
    2. Seleziona il progetto.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo indirizzo email.
    5. Nell'elenco Seleziona un ruolo, scegli un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ciascun ruolo aggiuntivo.
    7. Fai clic su Salva.

Configurazione dell'ambiente

  1. Apri Cloud Shell.

    APRI Cloud Shell

  2. In Cloud Shell, imposta le variabili di ambiente e i valori predefiniti per Google Cloud CLI utilizzati in questo tutorial.

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

    Sostituisci PROJECT_ID con l'ID progetto.

Architettura

Le figure seguenti descrivono l'architettura dell'app web su Heroku (così com'è) e il suo layout architetturale su Google Cloud (che creerai tu stesso).

l'architettura così com'è su Heroku.
Figura 1. Architettura "così com'è" su Heroku

L'app Tasks di cui è stato eseguito il deployment in Heroku è composta da uno o più segnali web. I sistemi dinamici web sono in grado di ricevere e rispondere al traffico HTTP, a differenza di quelli dei worker, che sono più adatti per lavori in background e attività a tempo. L'app pubblica una pagina di indice che mostra le attività archiviate in un database Postgres, utilizzando la libreria dei modelli Mustache per Node.js.

Puoi accedere all'app tramite un URL HTTPS. Una route /tasks a quell'URL consente di creare nuove attività.

l'architettura così com'è su Heroku.
Figura 2. Architettura creata su Google Cloud

Su Google Cloud, Cloud Run è utilizzato come piattaforma serverless per eseguire il deployment dell'app Tasks. Cloud Run è progettato per eseguire container stateless basati su richiesta. È ideale quando hai bisogno che il tuo servizio gestito supporti app containerizzate con scalabilità automatica e scalabilità automatica quando non gestiscono il traffico.

Mappatura dei componenti utilizzati in Heroku su Google Cloud

La tabella seguente mappa i componenti nella piattaforma Heroku su Google Cloud. Questo mapping ti aiuta a tradurre l'architettura descritta in questo tutorial da Heroku a Google Cloud.

Componente Piattaforma Heroku Google Cloud
Container Dynos: Heroku utilizza il modello di container per creare e scalare le app Heroku. Questi container Linux sono chiamati dyno e possono scalare fino a un numero da te specificato per supportare la richiesta di risorse per l'app Heroku. Puoi scegliere tra una gamma di tipi di origini dinamiche in base ai requisiti di memoria e CPU dell'app. Container Cloud Run: Google Cloud supporta l'esecuzione di carichi di lavoro containerizzati in container stateless che possono essere eseguiti in un ambiente completamente gestito o in cluster Google Kubernetes Engine (GKE).
App web App Heroku: i Dyno sono gli elementi di base delle app Heroku. Le app in genere sono costituite da uno o più tipi di dati dinamici, di solito una combinazione di connessioni Web e worker. Servizio Cloud Run: un'app web può essere modellata come servizio Cloud Run. Ogni servizio riceve il proprio endpoint HTTPS e può fare automaticamente lo scale up o lo scale down da 0 a N in base al traffico verso l'endpoint di servizio.
Database Heroku Postgres è il database as a Service (DaaS) di Heroku basato su PostgreSQL. Cloud SQL è un servizio di database gestito per database relazionali su Google Cloud.

Deployment dell'app web Tasks di esempio in Heroku

Le sezioni successive mostrano come configurare l'interfaccia a riga di comando (CLI) per Heroku, clonare il repository di codice sorgente GitHub ed eseguire il deployment dell'app su Heroku.

Configurare l'interfaccia a riga di comando per Heroku

Questo tutorial esegue l'interfaccia a riga di comando Heroku in Cloud Shell e deve eseguire l'autenticazione utilizzando una chiave API Heroku. Quando viene eseguita in Cloud Shell, l'interfaccia a riga di comando Heroku non può eseguire l'autenticazione utilizzando una password o l'autenticazione basata sul web.

In alternativa, se esegui l'esempio su un terminale locale, puoi utilizzare qualsiasi metodo di autenticazione dell'interfaccia a riga di comando Heroku. Quando esegui il tutorial su un terminale locale, devi installare anche Google Cloud CLI, git e Docker.

  1. Accedi alla console web per Heroku, quindi copia il valore della tua chiave API dalla pagina delle impostazioni dell'account.

  2. In Cloud Shell, installa l'interfaccia a riga di comando Heroku

  3. In Cloud Shell, autentica l'interfaccia a riga di comando Heroku. Quando ti viene chiesta la password, inserisci il valore della chiave API che hai copiato dalla console Heroku, non la password che utilizzi per accedere alla console.

    heroku login --interactive
    

clona il repository del codice sorgente

  1. In Cloud Shell, clona il repository GitHub dell'app Tasks di esempio:

    git clone https://github.com/GoogleCloudPlatform/migrate-webapp-heroku-to-cloudrun-node.git
    
  2. Cambia le directory nella directory creata clonando il repository:

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

    La directory contiene i seguenti file:

    • Uno script Node.js chiamato index.js con il codice delle route pubblicate dall'app web.
    • File package.json e package-lock.json che evidenziano le dipendenze dell'app web. Devi installare queste dipendenze per consentire l'esecuzione dell'app.
    • Un file Procfile che specifica il comando che l'app esegue all'avvio. Puoi creare un file Procfile per eseguire il deployment della tua app in Heroku.
    • Una directory views, con i contenuti HTML pubblicati dall'app web sulla route "/".
    • Un file .gitignore.

Eseguire il deployment di un'app in Heroku

  1. In Cloud Shell, crea un'app Heroku:

    heroku create
    

    Prendi nota del nome creato per l'app. Questo valore ti servirà nel passaggio successivo.

  2. Crea una variabile di ambiente per il nome dell'app Heroku:

    export APP_NAME=APP_NAME
    

    Sostituisci APP_NAME con il nome dell'app restituito dal comando heroku create.

  3. Aggiungi il componente aggiuntivo Heroku Postgres per eseguire il provisioning di un database PostgreSQL:

    heroku addons:create heroku-postgresql:mini
    
  4. Assicurati che il componente aggiuntivo sia stato aggiunto correttamente:

    heroku addons
    

    Se il componente aggiuntivo Postgres è stato aggiunto correttamente, viene visualizzato un messaggio simile al seguente:

    Add-on               Plan     Price       State
    -----------------    -----    --------    -----
    heroku-postgresql    mini     5$/month    created
    
  5. Esegui il deployment dell'app in Heroku:

    git push heroku master
    
  6. Esegui questo comando per confermare il valore di DATABASE_URL.

    heroku config
    

    Prendi nota del valore recuperato per DATABASE_URL. Questo valore ti servirà nel passaggio successivo.

  7. Eseguire un container Docker.

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

    Sostituisci DATABASE_URL con l'URL Heroku Postgres che hai annotato nel passaggio precedente.

  8. Nel container Docker, crea la tabella TASKS utilizzando questo comando:

    CREATE TABLE TASKS
    (DESCRIPTION TEXT NOT NULL);
    
  9. Esci dal contenitore:

    exit
    
  10. In Cloud Shell, recupera l'URL web dell'app Heroku eseguendo questo comando:

    heroku info
    
  11. Apri l'URL web in una finestra del browser. L'app ha il seguente screenshot (anche se la tua versione non avrà le attività elencate):

    App di promemoria nel browser web.

  12. Crea attività di esempio nella tua app dal browser. Assicurati che le attività vengano recuperate dal database e visibili nell'interfaccia utente.

Preparazione del codice dell'app web per la migrazione a Cloud Run

Questa sezione descrive in dettaglio i passaggi da completare per preparare l'app web per il deployment in Cloud Run.

Crea e pubblica il tuo container Docker in Container Registry

Hai bisogno di un'immagine Docker per creare il container dell'app in modo che possa essere eseguito in Cloud Run. Puoi creare il container manualmente o utilizzando Buildpacks.

Crea il container manualmente

  1. In Cloud Shell, crea un Dockerfile nella directory creata clonando il repository per questo 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 il tuo container con Cloud Build e pubblica l'immagine in Container Registry:

    gcloud builds submit --tag gcr.io/PROJECT_ID/APP_NAME:1 \
      --gcs-log-dir=gs://PROJECT_ID_cloudbuild
    
  3. Crea una variabile di ambiente che contenga il nome dell'immagine Docker che hai creato:

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

Crea container con Buildpacks

  1. In Cloud Shell, installa l'interfaccia a riga di comando pack.

  2. Imposta l'interfaccia a riga di comando del pacchetto per utilizzare il builder Heroku per impostazione predefinita:

    pack config default-builder heroku/buildpacks:22
    
  3. Crea una variabile di ambiente in cui inserire il nome dell'immagine Docker:

    export IMAGE_NAME=gcr.io/PROJECT_ID/APP_NAME:1
    
  4. Crea l'immagine utilizzando il comando pack ed eseguine il push o pubblicala in Container Registry:

    pack build --publish $IMAGE_NAME
    

Crea un'istanza Cloud SQL per PostgreSQL

Puoi creare un'istanza Cloud SQL per PostgreSQL da utilizzare come backend per l'app web. In questo tutorial, PostgreSQL è l'app più adatta come applicazione di esempio di cui è stato eseguito il deployment in Heroku, che utilizza un database Postgres come backend. Ai fini di questa app, la migrazione a Cloud SQL per PostgreSQL da un servizio Postgres gestito non richiede modifiche allo schema.

  1. Prepara la tua rete per Cloud SQL con un indirizzo IP privato.

    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 variabile di ambiente denominata CLOUDSQL_DB_NAME per contenere il nome dell'istanza di database che creerai nel passaggio successivo:

    export CLOUDSQL_DB_NAME=tasks-db
    
  3. Crea il database:

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

    L'inizializzazione dell'istanza potrebbe richiedere alcuni minuti.

  4. Imposta una password per l'utente Postgres:

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

    Sostituisci POSTGRES_PASSWORD con la password che vuoi utilizzare per il database Postgres.

Importa i dati in Cloud SQL da Heroku Postgres

Esistono diversi pattern di migrazione che puoi utilizzare per eseguire la migrazione dei dati in Cloud SQL. In generale, l'approccio migliore che richiede tempi di inattività minimi o nulli è configurare Cloud SQL come replica del database da migrare e rendere Cloud SQL l'istanza principale dopo la migrazione. Heroku Postgres non supporta le repliche esterne (follower), pertanto in questo tutorial utilizzerai strumenti open source per eseguire la migrazione dello schema dell'app.

Per l'app Tasks in questo tutorial, utilizzerai l'utilità pg_dump per esportare i dati da Heroku Postgres a un bucket Cloud Storage e poi importarli in Cloud SQL. Questa utilità può trasferire i dati in più versioni omogenee o quando la versione del database di destinazione è più recente del database di origine.

  1. In Cloud Shell, recupera le credenziali per il database Heroku Postgres collegato all'app di esempio. Queste credenziali saranno necessarie nel passaggio successivo.

    heroku pg:credentials:url
    

    Questo comando restituisce la stringa delle informazioni di connessione e l'URL di connessione per l'applicazione. La stringa delle informazioni sulla connessione ha il seguente formato:

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

    Devi utilizzare i valori mostrati nella stringa di connessione nel passaggio successivo.

    Per un esempio di valore FQDN (nome di dominio completo) in una stringa di informazioni sulla connessione, consulta la documentazione di Heroku.

  2. Imposta le variabili di ambiente in modo da contenere i valori Heroku che utilizzi nei passaggi successivi:

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

    Sostituisci quanto segue:

    • DATABASE_NAME: il nome del database mostrato nella stringa di informazioni.
    • FQDN: il nome di dominio completo mostrato nella stringa di informazioni.
    • USER_NAME: il nome utente mostrato nella stringa di informazioni.
    • PASSWORD_STRING: la stringa della password mostrata nella stringa di informazioni.
  3. Crea un backup in formato SQL del tuo database 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 variabile di ambiente che contenga il nome del bucket Cloud Storage:

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

    gcloud storage buckets create $PG_BACKUP_BUCKET \
      --location=us-central1 \
      --public-access-prevention \
      --uniform-bucket-level-access
    
  6. Carica il file SQL in questo bucket:

    gcloud storage cp herokudump.sql $PG_BACKUP_BUCKET/herokudump.sql
    
  7. Autorizza la tua istanza Cloud SQL con i ruoli necessari per importare il file SQL dal bucket 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 il file SQL nell'istanza Cloud SQL:

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

    Quando ti viene richiesto do you want to continue (y/n), inserisci "y".

Modalità di accesso di Cloud Run al database Cloud SQL

Proprio come l'app web di cui è stato eseguito il deployment in Heroku deve connettersi all'istanza gestita di Heroku Postgres, Cloud Run richiede l'accesso a Cloud SQL per poter leggere e scrivere dati.

Cloud Run comunica con Cloud SQL utilizzando il proxy Cloud SQL che viene attivato e configurato automaticamente quando esegui il deployment del container in Cloud Run. Il database non ha bisogno di approvare indirizzi IP esterni perché tutte le comunicazioni che riceve provengono dal proxy che utilizza il protocollo TCP sicuro.

Il codice deve richiamare le operazioni di database (ad esempio il recupero dei dati dal database o la scrittura al suo interno) richiamando il proxy su un socket UNIX.

Poiché questa app web è scritta in Node.js, puoi utilizzare la libreria pg-connection-string per analizzare l'URL di un database e creare un oggetto config. Il vantaggio di questo approccio è che la connessione al database di backend semplifica la connessione tra Heroku e Cloud Run.

Nel passaggio successivo, passi l'URL del database come variabile di ambiente quando esegui il deployment dell'app web.

Esegui il deployment dell'app di esempio in Cloud Run

  1. In Cloud Shell, configura l'accesso serverless VPC per consentire il traffico privato da 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. In Cloud Shell, crea una variabile di ambiente contenente il nome della connessione dell'istanza Cloud SQL che hai creato:

    export DB_CONN_NAME=$(gcloud sql instances describe $CLOUDSQL_DB_NAME --format='value(connectionName)')
    
  3. Crea una variabile di ambiente denominata DATABASE_URL in cui memorizzare la stringa di connessione per connettersi al proxy Cloud SQL tramite una porta UNIX.

    export DATABASE_URL="socket:/cloudsql/${DB_CONN_NAME}?db=postgres&user=postgres&password=POSTGRES_PASSWORD"
    
  4. Crea un account di servizio per Cloud Run con un ruolo IAM da connettere al database:

    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. Esegui il deployment dell'app web in 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
    
    

    Il comando precedente collega anche il container Cloud Run all'istanza del database Cloud SQL che hai creato. Il comando imposta una variabile di ambiente affinché Cloud Run punti alla stringa DATABASE_URL creata nel passaggio precedente.

Testare l'applicazione

  1. In Cloud Shell, recupera l'URL da cui Cloud Run gestisce il traffico:

    gcloud run services list
    

    Puoi anche esaminare il servizio Cloud Run nella console Google Cloud.

  2. Per assicurarti che la tua app web accetti le richieste HTTP, vai all'URL del servizio Cloud Run.

Cloud Run crea, o avvia, un nuovo container quando viene inviata una richiesta HTTP all'endpoint di gestione e se un container non è già in esecuzione. Ciò significa che la richiesta che causa l'avvio di un nuovo container potrebbe richiedere un po' più di tempo per essere pubblicata. Dato il tempo extra, prendi in considerazione il numero di richieste in parallelo che la tua app può supportare e gli eventuali requisiti di memoria specifici che potrebbe avere.

Per questa app, utilizzi le impostazioni di contemporaneità predefinite, che consentono a un servizio Cloud Run di gestire 80 richieste contemporaneamente da un singolo container.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial. Potresti anche eliminare le risorse create in Heroku per questo tutorial.

Elimina il progetto Google Cloud

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Eliminare l'app Heroku

Per eliminare l'app di esempio di cui hai eseguito il deployment in Heroku e il componente aggiuntivo PostgreSQL associato, esegui questo comando:

heroku apps:destroy -a APP_NAME

Passaggi successivi