Esegui la migrazione di un'app dell'ambiente flessibile di App Engine a Cloud Run

ID regione

L'elemento REGION_ID è un codice abbreviato che Google assegna in base alla regione selezionata quando crei l'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL di App Engine. Per le app esistenti create prima di questa data, l' ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Questa guida descrive come eseguire la migrazione di un'app App Engine esistente che si connette a un'istanza Cloud SQL con un IP pubblico.

In generale, i passaggi di questa guida mostrano come eseguire il deployment dello stesso codice sorgente dell'applicazione in Cloud Run e quindi configurarlo per utilizzare lo stesso utente del database Cloud SQL per connettere l'istanza e il database esistenti.

I passaggi di questa guida non includono la procedura per utilizzare una connessione IP privata interna perché richiede prima di modificare il codice dell'applicazione. Tuttavia, dopo aver eseguito il deployment dell'app in Cloud Run, puoi utilizzare i passaggi descritti in Connettersi a Cloud SQL da Cloud Run per scoprire i requisiti e come utilizzare gli IP privati.

Per saperne di più sulle somiglianze e le differenze tra App Engine e Cloud Run, inclusi i vantaggi della migrazione a Cloud Run, consulta il riepilogo del confronto.

Prima di iniziare

  1. Assicurati che Cloud Run soddisfi i requisiti dell'applicazione. Esamina il confronto tra App Engine e Cloud Run per determinare se le risorse di Cloud Run, come CPU e memoria, soddisfano le tue esigenze.

  2. Devi avere accesso all'istanza Cloud SQL, inclusi il nome utente e la password del database per connettere l'app. Cloud Run utilizza la crittografia e si connette tramite il proxy di autenticazione Cloud SQL utilizzando i socket Unix o i connettori Cloud SQL.

  3. Abilita l'API Cloud Run Admin e l'API Artifact Registry.

    Abilita le API

  4. Esamina le seguenti differenze di Cloud Run:

    • Cloud Run utilizza il termine Revision, anziché Version, per rappresentare ogni volta che esegui il deployment delle modifiche in un servizio specifico. Eseguendo il deployment dell'app in un servizio in Cloud Run per la prima volta viene creata la prima revisione. Ogni deployment successivo di un servizio crea un'altra revisione. Scopri di più sul deployment in Cloud Run.

    • Puoi eseguire il deployment del codice sorgente in Cloud Run utilizzando Google Cloud CLI o la Google Cloud console per configurare e gestire le impostazioni delle app. Cloud Run non richiede la configurazione basata su file, tuttavia la configurazione YAML è supportata e puoi utilizzare lo app2run strumento per tradurre il file App Engine esistente per Cloud Run.

    • Ogni servizio di cui esegui il deployment in Cloud Run utilizza il run.app dominio nell'URL per accedere pubblicamente al servizio.

    • A differenza dei servizi App Engine, che sono pubblici per impostazione predefinita, i servizi Cloud Run sono privati per impostazione predefinita e richiedono la configurazione per l'accesso pubblico (non autenticato).

    • Cloud Run non supporta i servizi in bundle legacy di App Engine.

Questa guida presuppone che l'applicazione App Engine venga eseguita senza errori.

Ruoli obbligatori

Puoi scegliere di creare un nuovo account di servizio o continuare a utilizzare lo stesso account di servizio gestito dall'utente in Cloud Run che utilizzi per App Engine. Tu o il tuo amministratore dovete concedere all'account di deployment e all'account di servizio Cloud Build i seguenti ruoli IAM.

Fai clic per visualizzare i ruoli richiesti per l'account di deployment

Per ottenere le autorizzazioni necessarie per creare ed eseguire il deployment dal codice sorgente, chiedi all'amministratore di concederti i seguenti ruoli IAM ruoli:

Fai clic per visualizzare i ruoli richiesti per l'account di servizio Cloud Build

Per impostazione predefinita, Cloud Build utilizza automaticamente l' account di servizio predefinito di Compute Engine come account di servizio Cloud Build predefinito per creare il codice sorgente e la risorsa Cloud Run, a meno che tu non sostituisca questo comportamento. Affinché Cloud Build possa creare le origini, chiedi all'amministratore di concedere Cloud Run Builder (roles/run.builder) all'account di servizio predefinito di Compute Engine nel tuo progetto:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

Sostituisci PROJECT_NUMBER con il tuo Google Cloud numero del progetto e PROJECT_ID con il tuo Google Cloud ID progetto. Per istruzioni dettagliate su come trovare l'ID progetto e il numero di progetto, consulta Creazione e gestione dei progetti.

La propagazione della concessione del ruolo di builder di Cloud Run all'account di servizio predefinito di Compute Engine richiede alcuni minuti per propagarsi.

Per un elenco di ruoli e autorizzazioni IAM associati a Cloud Run, consulta Ruoli IAM di Cloud Run e Autorizzazioni IAM di Cloud Run. Se il tuo servizio Cloud Run interagisce con le APIGoogle Cloud , come le librerie client Cloud, consulta la guida alla configurazione dell'identità del servizio. Per saperne di più sulla concessione dei ruoli, consulta Autorizzazioni di deployment e Gestisci l'accesso.

Per le connessioni IP pubbliche a Cloud SQL, devi avere uno dei seguenti ruoli:

Eseguire la migrazione dell'app a Cloud Run

Non è necessario apportare modifiche al codice per eseguire il deployment dell'app App Engine in Cloud Run.

Nei passaggi seguenti, esegui il deployment dell'app in un nuovo servizio in Cloud Run e contemporaneamente configuri il servizio per la connessione a Cloud SQL.

Come l'ambiente flessibile di App Engine, Cloud Run supporta i deployment basati su container e su codice sorgente. A seconda del metodo di deployment che segui, devi avere accesso all'immagine container o al repository del codice sorgente.

Deployment delle immagini container

Se i servizi App Engine vengono sottoposti a deployment utilizzando un container creato manualmente, puoi utilizzare la stessa immagine container per eseguire il deployment del servizio in Cloud Run. Per eseguire il deployment dell'immagine container App Engine in Cloud Run:

  1. Prendi nota dell'URL del registro in cui si trova l'immagine container. Si tratta dello stesso URL che fornisci nel --image-url flag quando esegui il deployment su App Engine.

  2. Esegui il deployment dell'immagine container:

    console

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

      Vai a Cloud Run

    2. Fai clic su Crea servizio.

    3. Fai clic sul pulsante Seleziona nel campo URL immagine container e scegli l'immagine container di cui hai eseguito il deployment per App Engine.

    4. Inserisci un nome per il servizio. Scegli un nome univoco che rappresenti l'app di cui stai eseguendo il deployment.

    5. Nella sezione Autenticazione, seleziona Consenti chiamate non autenticate.

    6. Devi creare le stesse variabili di ambiente per Cloud Run che hai definito nel app.yaml file dell' app App Engine. Espandi la sezione Container, Networking, sicurezza e crea le seguenti variabili di ambiente facendo clic su Aggiungi variabile in Variabili di ambiente:

      • Per i socket Unix, aggiungi:

          INSTANCE_UNIX_SOCKET: /cloudsql/INSTANCE_CONNECTION_NAME
        
      • Per i connettori Cloud SQL, aggiungi:

          INSTANCE_CONNECTION_NAME:INSTANCE_CONNECTION_NAME
        

        Sostituisci INSTANCE_CONNECTION_NAME con l'ID progetto, la regione e l'istanza nel formato project:region:instance-id. Puoi trovarlo nella pagina Panoramica dell'istanza nella Google Cloud console.

        Queste connessioni vengono criptate automaticamente senza alcuna configurazione aggiuntiva.

      • DB_NAME: nome del database.

      • DB_USER: nome utente del database.

      • DB_PASS: password specificata durante la creazione del database.

    7. Nella sezione Connessioni Cloud SQL, fai clic sul pulsante Aggiungi connessione e seleziona l' istanza che hai creato in precedenza per App Engine.

    8. Fai clic su Esegui il deployment. Una volta eseguito il deployment del servizio Cloud Run, nella parte superiore della pagina Dettagli del servizio viene visualizzato un URL. Fai clic sul link URL per visualizzare l'app di cui hai eseguito il deployment in Cloud Run connessa a Cloud SQL.

    gcloud

    Esegui il comando seguente per creare un nuovo servizio in Cloud Run.Devi impostare i flag di configurazione in modo da includere le stesse variabili di ambiente di connessione SQL definite nel file app.yaml dell'app 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"
    

    Sostituisci:

    • IMAGE con l'immagine di cui stai eseguendo il deployment
    • INSTANCE_CONNECTION_NAME con il nome della connessione istanza dell'istanza Cloud SQL o un elenco di nomi di connessione separati da virgole. Puoi trovare INSTANCE_CONNECTION_NAME eseguendo:

        gcloud instances describe INSTANCE_NAME
      
    • DB_NAME con il nome del database.

    • DB_USER con il nome utente del database.

    • DB_PASS con la password dell'utente del database.

Eseguire il deployment del codice sorgente

Cloud Run utilizza internamente i buildpack e Cloud Build per creare automaticamente immagini container dal codice sorgente e non richiede di creare manualmente un container o specificare un Dockerfile. Tuttavia, se è presente un Dockerfile, verrà utilizzato. Il deployment di un servizio Cloud Run dal codice sorgente utilizza Artifact Registry, quindi questa funzionalità è disponibile solo nelle regioni supportate da Artifact Registry.

Per eseguire il deployment dello stesso codice sorgente di cui hai eseguito il deployment in App Engine:

  1. Passa alla directory di origine in cui si trova il codice sorgente dell'applicazione.

      cd YOUR_APPENGINE_CODE_DIR
    
  2. Eseguire il deployment in Cloud Run.

    Per creare il codice sorgente ed eseguire il deployment dell'applicazione, esegui il comando di deployment con il flag --source. Devi impostare i flag di configurazione in modo da includere le stesse variabili di ambiente di connessione SQL definite nel file app.yaml dell'app App Engine:

      gcloud run deploy run-sql --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"
    

    Sostituisci INSTANCE_CONNECTION_NAME con il nome della connessione istanza dell'istanza Cloud SQL o un elenco di nomi di connessione separati da virgole. Puoi trovare INSTANCE_CONNECTION_NAME eseguendo:

        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME con il nome del database.
    • DB_USER con il nome utente del database.
    • DB_PASS con la password dell'utente del database.
  3. Quando richiesto, inserisci un nome per il SERVIZIO.

  4. Rispondi y a tutti i prompt per installare le API richieste. Dovrai eseguire questa operazione una sola volta per un progetto. Attendi il completamento della creazione e del deployment. Al termine, viene visualizzato un messaggio simile al seguente:

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

    Per saperne di più sul deployment del codice sorgente in Cloud Run, consulta Deployment dal codice sorgente.

Passaggi successivi