Deployment in Cloud Run mediante 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 consente di eseguire container stateless in un ambiente serverless. Con Cloud Build, puoi eseguire il deployment delle immagini container da Container Registry (deprecato) e Artifact Registry a Cloud Run. Puoi eseguire il deployment di un'immagine esistente, creare un'immagine ed 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

  • Tieni a portata di mano il codice sorgente della tua applicazione. Il codice sorgente deve essere archiviato in un repository come Cloud Source Repositories, GitHub o Bitbucket.

  • Per eseguire i comandi gcloud in questa pagina, installa Google Cloud CLI.

Autorizzazioni IAM richieste

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

Per eseguire il deployment su Cloud Run, concedi i ruoli Amministratore e Utente account di servizio di Cloud Run all'account di servizio Cloud Build:

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

    Vai alla pagina delle impostazioni di Cloud Build

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

    Screenshot della pagina Autorizzazioni account di servizio

  3. Nel popup "Ulteriori passaggi potrebbero essere richiesti", fai clic su CONCEDI L'ACCESSO A TUTTI GLI ACCOUNT DI SERVIZIO.

crea ed esegui il deployment di un container

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

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

  1. Nella directory root 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 eseguine il push a 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:

    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', 'SERVICE_REGION']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    Dove:

    • SERVICE_NAME è il nome del servizio Cloud Run.
    • SERVICE_REGION è la regione del servizio Cloud Run di cui stai eseguendo il deployment.
    • PROJECT_ID è l'ID progetto Google Cloud in cui è archiviata l'immagine.
    • IMAGE è il nome dell'immagine in Container Registry.
  3. Passa alla directory root del progetto ed esegui il comando seguente, dove BUILD_REGION è una delle regioni di build supportate per l'esecuzione della build:

     gcloud builds submit --region=BUILD_REGION
    

Al termine, 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 software in Cloud Run creando trigger di Cloud Build. Puoi configurare i trigger per la creazione e il deployment delle immagini ogni volta che aggiorni il codice sorgente.

Per automatizzare il deployment:

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

      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'
        - 'SERVICE_REGION'
      images:
      - 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA'
    

    Dove:

    • SERVICE_NAME è il nome del servizio Cloud Run.
    • SERVICE_REGION è la regione del servizio Cloud Run di cui stai eseguendo il deployment.

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

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

    1. Apri la pagina Attivatori:

      Vai alla pagina Attivatori

    2. Fai clic su Crea attivatore.

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

    4. In Regione, seleziona la regione per l'attivatore.

    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 avvia l'attivatore. Per saperne di più sulla specifica dei rami da creare 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.

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

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

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

Utilizzo delle autorizzazioni IAM minime

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

Per concedere un accesso limitato a Cloud Build per il deployment in un servizio Cloud Run:

Console

  1. Vai alla pagina Account di servizio 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 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

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 tuo account di servizio.

Per ulteriori informazioni, consulta Autorizzazioni per il deployment.

Esempi di codice

Ecco alcuni repository di esempio, ognuno dei quali contiene un'applicazione di esempio e un file di configurazione di compilazione 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 un'immagine ed eseguirne il deployment in Cloud Run.

Passaggi successivi