Migrazione di un'app dell'ambiente flessibile di App Engine a Cloud Run

ID regione

REGION_ID è un codice abbreviato assegnato da Google in base all'area geografica selezionata al momento della creazione dell'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici paese e provincia 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 in modo che utilizzi lo stesso utente del database Cloud SQL per connettere l'istanza e il database esistenti.

I passaggi in questa guida non includono come utilizzare una connessione IP privato interno perché questo richiede prima la modifica del codice dell'applicazione. Tuttavia, dopo aver eseguito il deployment dell'app in Cloud Run, puoi seguire i passaggi descritti in Connettersi a Cloud SQL da Cloud Run per conoscere i requisiti e come utilizzare gli IP privati.

Per saperne di più sulle somiglianze e sulle 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. Consulta il confronto tra App Engine e Cloud Run per determinare se le risorse Cloud Run, come CPU e memoria, soddisfano le tue esigenze.
  2. Questa guida presuppone che l'app venga eseguita senza errori.

  3. Per connettere la tua app, devi accedere all'istanza Cloud SQL, incluso il nome utente e la password del database. Cloud Run utilizza la crittografia e si connette tramite il proxy di autenticazione Cloud SQL utilizzando i socket Unix o i connettori Cloud SQL.

  4. Esamina le seguenti differenze in Cloud Run:

    • Cloud Run utilizza il termine Revision, anziché Version per rappresentare ogni volta che esegui il deployment di modifiche a un servizio specifico. Quando esegui il deployment dell'app in un servizio in Cloud Run per la prima volta, viene creata la sua 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 tuo codice sorgente in Cloud Run utilizzando Google Cloud CLI o la console Google Cloud per configurare e gestire le impostazioni delle app. Cloud Run non richiede la configurazione basata su file, ma la configurazione YAML è supportata e puoi utilizzare lo strumento app2run per tradurre il file App Engine esistente per Cloud Run.

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

    • 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).

Esegui la migrazione della tua app a Cloud Run

A livello generale, il processo di migrazione dell'app App Engine a Cloud Run prevede i seguenti passaggi:

  1. Abilita le API richieste
  2. Configura l'account di servizio Cloud Run
  3. Esegui il deployment dell'app in Cloud Run

Abilita le API richieste

Prima di poter eseguire il deployment dell'app in Cloud Run, devi abilitare entrambe le API Cloud Run e Artifact Registry.

Utilizza la console Google Cloud per abilitare le API:

Vai ad API e servizi

Configura l'account di servizio Cloud Run

Puoi scegliere di creare un nuovo account di servizio o continuare a utilizzare in Cloud Run lo stesso account di servizio gestito dall'utente che utilizzi per App Engine. Nell'account di servizio, devi assicurarti che siano configurati i seguenti ruoli IAM (Identity and Access Management) o le autorizzazioni equivalenti:

Per eseguire il deployment in Cloud Run, devi avere uno dei seguenti requisiti:

  • Proprietario
  • Editor
  • Entrambi i ruoli Amministratore Cloud Run e Utente account di servizio
  • Autorizzazioni Cloud Run equivalenti

Per le connessioni con IP pubblico a Cloud SQL, devi disporre di una delle seguenti opzioni:

Esegui il deployment dell'app in Cloud Run

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

Nei passaggi seguenti, eseguirai il deployment della tua app in un nuovo servizio in Cloud Run e allo stesso tempo configurerai il servizio per la connessione a Cloud SQL.

Come l'ambiente flessibile di App Engine, Cloud Run supporta deployment sia basati su container che sull'origine. Devi accedere all'immagine container o al repository del codice sorgente a seconda del metodo di deployment che segui.

Deployment delle immagini container

Se il deployment dei servizi App Engine è stato eseguito utilizzando un container creato manualmente, puoi utilizzare la stessa immagine container per eseguire il deployment del tuo servizio in Cloud Run. Per eseguire il deployment dell'immagine container di 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 flag --image-url durante il deployment su App Engine.

  2. Esegui il deployment dell'immagine container:

    console

    1. Nella console Google Cloud, 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 per Cloud Run le stesse variabili di ambiente definite nel file app.yaml 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 che seguono il formato project:region:instance-id. Puoi trovarlo nella pagina Panoramica dell'istanza nella console Google Cloud.

        Queste connessioni vengono criptate automaticamente senza alcuna configurazione aggiuntiva.

      • DB_NAME: nome del database.

      • DB_USER: nome utente dell'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 creata in precedenza per App Engine.

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

    gcloud

    Esegui questo comando per creare un nuovo servizio in Cloud Run.Devi impostare i flag di configurazione in modo da includere le stesse variabili dell'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 di connessione istanza della tua istanza Cloud SQL o un elenco di nomi di connessione delimitato da virgole. Puoi trovare INSTANCE_CONNECTION_NAME eseguendo:

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

    • DB_USER con il nome utente del tuo database.

    • DB_PASS con la password dell'utente del database.

Esegui il deployment del codice sorgente

Cloud Run utilizza internamente buildpacks e Cloud Build per creare automaticamente immagini container dal codice sorgente e non richiede la creazione manuale di un container o la specifica di un Dockerfile. Tuttavia, verrà utilizzato un Dockerfile se è presente.

Il deployment di un servizio Cloud Run dall'origine 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 in precedenza:

  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 della tua app 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"
    

    Sostituisci:

    • SOURCE con il percorso della directory di origine di App Engine
    • INSTANCE_CONNECTION_NAME con il nome di connessione istanza della tua istanza Cloud SQL o un elenco di nomi di connessione delimitato da virgole. Puoi trovare INSTANCE_CONNECTION_NAME eseguendo:
        gcloud instances describe INSTANCE_NAME
    
    • DB_NAME con il nome del tuo database.
    • DB_USER con il nome utente del tuo database.
    • DB_PASS con la password dell'utente del database.
  3. Inserisci un nome per il SERVICE quando richiesto.

  4. Rispondi alle richieste di installazione delle API richieste rispondendo y quando richiesto. Devi eseguire questa operazione una sola volta per un progetto. Attendi il completamento della build e del deployment. Al termine, viene visualizzato un messaggio simile a questo:

    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 scoprire di più sul deployment del codice sorgente in Cloud Run, consulta Deployment da codice sorgente.

Passaggi successivi