Deployment in Cloud Run mediante Cloud Build

Questa pagina spiega come eseguire automaticamente il deployment dei servizi Cloud Run e Cloud Run for Anthos utilizzando Cloud Build. Se non hai mai utilizzato Cloud Build, leggi prima le guide rapide e la panoramica della configurazione di build.

Cloud Run e Cloud Run for Anthos sono piattaforme di computing che consentono di eseguire container stateless in un ambiente serverless. Con Cloud Build, puoi eseguire il deployment di immagini container da Container Registry e Artifact Registry in Cloud Run. Puoi eseguire il deployment di un'immagine esistente, crearne una e eseguirne il deployment oppure automatizzare il deployment.

Prima di iniziare

  • Abilita le API Cloud Build, Cloud Run, Container Registry, and Resource Manager.

    Abilita le API

Autorizzazioni IAM obbligatorie

Se l'immagine è archiviata nello stesso progetto Cloud di cui vuoi eseguire il deployment o se l'immagine è pubblica in Container Registry, devi disporre delle seguenti autorizzazioni IAM:

Cloud Run

Per eseguire il deployment in Cloud Run, concedi i ruoli Utente amministratore e Account di servizio Cloud Run all'account di servizio Cloud Build:

  1. Apri la pagina delle impostazioni di Cloud Build nella console:

    Vai alla pagina delle impostazioni di Cloud Build

  2. Nel riquadro Autorizzazioni account di servizio, imposta lo stato del ruolo Amministratore di Cloud Run su ENABLED:

    Screenshot della pagina Autorizzazioni dell'account di servizio

  3. Nella finestra popup Ulteriori passaggi potrebbe essere necessario fare clic su CONCEDI L'ACCESSO A TUTTI GLI ACCOUNT DI SERVIZIO.

Cloud Run for Anthos

Per eseguire il deployment in Cloud Run for Anthos, concedi il ruolo sviluppatore di Kubernetes Engine all'account di servizio Cloud Build:

  1. Apri la pagina delle impostazioni di Cloud Build nella console:

    Vai alla pagina delle impostazioni di Cloud Build

  2. Nel riquadro Autorizzazioni account di servizio, imposta lo stato del ruolo Sviluppatore Kubernetes Engine su Attivato:

    Screenshot della pagina Autorizzazioni dell'account di servizio

Se l'immagine viene archiviata in un progetto Cloud diverso da quello in cui vuoi eseguire il deployment, sono necessarie autorizzazioni IAM aggiuntive come descritto in Deployment di immagini da altri progetti GCP.

Creazione e deployment di un container

Cloud Build ti consente di creare l'immagine container, archiviare l'immagine creata in Container Registry e quindi eseguirne il deployment su Cloud Run.

Per creare ed eseguire il deployment di un'immagine container:

  1. Nella directory principale del progetto, crea un file di configurazione denominato cloudbuild.yaml.

  2. Nel file di configurazione della build, aggiungi docker passi di build per creare l'immagine ed eseguirne il push su Container Registry, quindi aggiungi un passaggio di build gcloud per richiamare il comando gcloud run deploy per eseguire il deployment dell'immagine su Cloud Run:

    Cloud Run

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'REGION']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • REGION è l'area geografica del servizio Cloud Run di cui esegui il deployment.
    • PROJECT_ID è l'ID progetto Google Cloud in cui è archiviata la tua immagine.
    • IMAGE è il nome della tua immagine in Container Registry.

    Cloud Run for Anthos

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run for Anthos
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE-NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--cluster', 'CLUSTER', '--cluster-location', 'CLUSTER_LOCATION', '--platform', 'gke']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • CLUSTER è il nome del cluster Cloud Run for Anthos.
    • CLUSTER_LOCATION è la località del tuo cluster Cloud Run for Anthos.
    • PROJECT_ID è l'ID progetto Google Cloud in cui è archiviata la tua immagine.
    • IMAGE è il nome della tua immagine in Container Registry.
  3. Passa alla directory radice del progetto ed esegui il comando seguente, dove REGION è una delle aree geografiche di build supportate per eseguire la build:

     gcloud builds submit --region=REGION
    

Al termine, viene visualizzato un messaggio con l'URL del servizio di cui è stato eseguito il deployment.

Deployment continuo

Puoi automatizzare il deployment del tuo software su Cloud Run e Cloud Run for Anthos creando trigger di Cloud Build. Puoi configurare i trigger per creare ed eseguire il deployment delle immagini ogni volta che aggiorni il codice sorgente.

Per automatizzare il deployment:

  1. Nella radice del repository, aggiungi un file di configurazione con i passaggi per creare l'immagine, esegui il push dell'immagine a Container Registry, quindi richiama il comando gcloud run deploy:

    Cloud Run

     steps:
     # Build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # Push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--region'
       - 'REGION'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • REGION è l'area geografica del servizio Cloud Run di cui esegui il deployment.

    Cloud Run for Anthos

     steps:
     # build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA', '.']
     # push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA']
     # Deploy container image to Cloud Run for Anthos
     - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
       entrypoint: gcloud
       args:
       - 'run'
       - 'deploy'
       - 'SERVICE-NAME'
       - '--image'
       - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
       - '--cluster'
       - 'CLUSTER'
       - '--cluster-location'
       - 'CLUSTER_LOCATION'
       - '--platform'
       - 'gke'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    Dove:

    • SERVICE-NAME è il nome del servizio Cloud Run.
    • CLUSTER è il nome del cluster Cloud Run for Anthos.
    • CLUSTER_LOCATION è la località del tuo cluster Cloud Run for Anthos.

    L'utilizzo della variabile di sostituzione $COMMIT_SHA è completato da Cloud Build quando è attivato da un repository Git.

  2. Crea un trigger di build con il file di configurazione creato nel passaggio precedente:

    1. Apri la pagina Trigger:

      Vai alla pagina Attivatori

    2. Fai clic su Crea trigger.

    3. Nel campo Nome, inserisci un nome per l'attivatore.

    4. In Evento, seleziona l'evento del repository per avviare l'attivatore.

    5. In Origine, seleziona il tuo repository e il ramo o il nome del tag che avvierà l'attivatore. Per ulteriori informazioni su come specificare i rami da creare automaticamente, consulta la sezione Creare un trigger di build.

    6. In Configurazione, seleziona File di configurazione di Cloud Build (yaml o json).

    7. Nel campo Posizione file di configurazione Cloud Build, digita cloudbuild.yaml dopo /.

    8. Fai clic su Crea per salvare il trigger di build.

  3. Hai finito. D'ora in poi, ogni volta che esegui il push al tuo repository, verrà richiamata automaticamente una build e un deployment nel tuo servizio.

Ogni volta che esegui il push di nuovo codice nel tuo repository, attiverai automaticamente una build e il deployment sul tuo servizio Cloud Run.

Per ulteriori informazioni sulla creazione di trigger di Cloud Build, consulta Creazione e gestione dei trigger di build.

Utilizzo delle autorizzazioni IAM minime

Quando un container viene sottoposto a deployment in un servizio Cloud Run, viene eseguito con l'identità dell'account di servizio di runtime di questo servizio Cloud Run. Poiché Cloud Build può eseguire automaticamente il deployment di nuovi container, Cloud Build deve essere in grado di agire come account di servizio di runtime del tuo servizio Cloud Run.

Per concedere l'accesso limitato a Cloud Build al deployment di un servizio Cloud Run:

console

  1. Vai alla pagina Account di servizio di Google Cloud Console:

    Vai agli account di servizio

  2. Fai clic sull'indirizzo email del tuo account Cloud Run di Cloud Run (per impostazione predefinita, è PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  3. Fai clic sulla scheda Permissions (Autorizzazioni).

  4. Fai clic su Concedi l'accesso.

  5. Inserisci l'account di servizio Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com)

  6. Nel menu a discesa Seleziona un ruolo, seleziona il ruolo Account di servizio > Utente account di servizio.

  7. Fai clic su Salva.

gcloud

Usa il comando gcloud iam service-accounts add-iam-policy-binding, dove PROJECT_NUMBER è l'ID numerico del tuo progetto:

gcloud iam service-accounts add-iam-policy-binding \
  PROJECT_NUMBER-compute@developer.gserviceaccount.com \
  --member="serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com" \
  --role="roles/iam.serviceAccountUser"

Sostituisci PROJECT_NUMBER con l'ID numerico del tuo progetto.

Se utilizzi Cloud Run con un'identità personalizzata del servizio, sostituisci PROJECT_NUMBER-compute@developer.gserviceaccount.com con l'indirizzo del tuo account di servizio.

Per ulteriori informazioni, consulta le autorizzazioni di deployment.

Esempi di codice

Di seguito sono riportati alcuni repository di esempio, ognuno dei quali contiene un'applicazione di esempio e un file di configurazione di compilazione per il deployment dell'applicazione in Cloud Run:

  • deploy-prebuilt: Un esempio di codice che mostra come eseguire il deployment di un'immagine predefinita in Cloud Run.
  • run-example-builddeploy: esempio di codice che mostra come creare ed eseguire il deployment di un'immagine in Cloud Run.

Passaggi successivi