Eseguire il deployment in Cloud Run utilizzando Cloud Build

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

Cloud Run ti consente di eseguire immagini stateless in un ambiente serverless. Utilizzando Cloud Build, puoi eseguire il deployment di immagini da Artifact Registry a Cloud Run. Puoi eseguire il deployment di un'immagine esistente, creare ed eseguire il deployment di un'immagine o automatizzare il deployment.

Prima di iniziare

  • Enable the Cloud Build, Cloud Run, Artifact Registry, and Resource Manager APIs.

    Enable the APIs

Autorizzazioni Identity and Access Management richieste

Per ottenere le autorizzazioni necessarie per il deployment in Cloud Run utilizzando Cloud Build, chiedi all'amministratore di concederti i seguenti ruoli IAM per il account di servizio Cloud Build predefinito:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Creazione e deployment di un'immagine

Cloud Build ti consente di creare un'immagine, archiviarla in Artifact Registry e poi eseguirne il deployment in Cloud Run.

Per creare ed eseguire il deployment di un'immagine:

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

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

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION']
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'
    

    Dove:

    • REPOSITORY è il nome del repository Artifact Registry da cui viene eseguito il deployment dell'immagine.
    • LOCATION è la posizione del tuo repository Artifact Registry, ad esempio us-east1.
    • PROJECT_ID è l' Google Cloud ID progetto in cui è archiviata l'immagine.
    • SERVICE_NAME è il nome del servizio Cloud Run.
    • SERVICE_REGION è la regione del servizio Cloud Run di cui stai eseguendo il deployment.
    • IMAGE è il nome dell'immagine in Artifact Registry.
  3. Vai alla directory principale del progetto ed esegui questo comando, dove LOCATION è una delle regioni di build supportate per eseguire la build:

     gcloud builds submit --region=LOCATION
    

Al termine dell'operazione, viene visualizzato un messaggio di operazione riuscita insieme all'URL del servizio di cui è stato eseguito il deployment.

Deployment continuo

Puoi automatizzare il deployment del tuo software su Cloud Run 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 denominato cloudbuild.yaml con i passaggi per creare l'immagine, eseguirne il push ad Artifact Registry e poi richiamare il comando gcloud run deploy:

    steps:
    # Build the image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.']
    # Push the image to Artifact Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA']
    # Deploy image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: 
        - 'run'
        - 'deploy'
        - 'SERVICE_NAME'
        - '--image'
        - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
        - '--region'
        - 'SERVICE_REGION'
    images:
    - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'
    

    Dove:

    • REPOSITORY è il nome del repository Artifact Registry da cui viene eseguito il deployment dell'immagine.
    • LOCATION è la posizione del tuo repository Artifact Registry, ad esempio us-east1.
    • PROJECT_ID è l' Google Cloud ID progetto in cui è archiviata l'immagine.
    • SERVICE_NAME è il nome del servizio Cloud Run.
    • SERVICE_REGION è la regione del servizio Cloud Run di cui stai eseguendo il deployment.
    • IMAGE è il nome dell'immagine in Artifact Registry.

    La variabile di sostituzione $COMMIT_SHA viene compilata da Cloud Build quando viene attivata 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 Trigger

    2. Fai clic su Crea trigger.

    3. Nel campo Nome, inserisci un nome per il trigger.

    4. In Regione, seleziona la regione per il trigger.

    5. In Evento, seleziona l'evento del repository per avviare il trigger.

    6. In Origine, seleziona il repository e il nome del ramo o del tag che avvierà il trigger. Per ulteriori informazioni su come specificare i rami da compilare automaticamente, consulta Creazione di un trigger di build.

    7. In Configurazione, seleziona File di configurazione di Cloud Build (YAML o JSON).

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

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

    Ora, quando esegui il push di nuovo codice nel repository, Cloud Build richiama una build ed esegue il deployment del servizio su Cloud Run.

Per saperne di più sulla creazione di trigger Cloud Build, consulta Creare e gestire i trigger di build.

Utilizzo delle autorizzazioni IAM minime

Quando un'immagine viene sottoposta a deployment in un servizio Cloud Run, l'immagine viene eseguita utilizzando l'identità del service account di runtime del servizio Cloud Run. Poiché Cloud Build può eseguire il deployment automatico di nuove immagini, Cloud Build deve essere in grado di agire come service account di runtime del tuo servizio Cloud Run.

Per concedere l'accesso limitato a Cloud Build per il deployment a un servizio Cloud Run, procedi nel seguente modo:

Console

  1. Vai alla pagina Service Accounts della console Google Cloud :

    Vai ad Account di servizio

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

  3. Fai clic sulla scheda Autorizzazioni.

  4. Fai clic su Concedi l'accesso.

  5. Inserisci il service account 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

Utilizza 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à di servizio personalizzata, sostituisci PROJECT_NUMBER-compute@developer.gserviceaccount.com con l'indirizzo del account di servizio.

Per ulteriori informazioni, consulta la sezione 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 della build per eseguire 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: un esempio di codice che mostra come creare ed eseguire il deployment di un'immagine in Cloud Run.

Passaggi successivi