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 gli avvii rapidi e la panoramica della configurazione di compilazione.

Cloud Run ti consente di eseguire container stateless in un ambiente serverless. Con Cloud Build puoi eseguire il deployment di immagini container da Container Registry (Ritirato) e Artifact Registry a Cloud Run. Puoi eseguire il deployment di un'immagine esistente, creare e implementare un'immagine o automatizzare il deployment.

Prima di iniziare

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

    Enable the APIs

Autorizzazioni IAM richieste

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

Per eseguire il deployment in Cloud Run, concedi i ruoli Amministratore di Cloud Run e Utente account di servizio all'account di servizio che utilizzi per la compilazione:

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

    Vai alla pagina delle impostazioni di Cloud Build

  2. Dall'elenco a discesa, seleziona l'account di servizio di cui vuoi modificare i ruoli.

    Screenshot della pagina Autorizzazioni account di servizio

  3. Nel riquadro delle autorizzazioni dell'account di servizio, imposta lo stato del ruolo Amministratore di Cloud Run su ABILITA:

  4. Nel popup Potrebbero essere necessari ulteriori passaggi, fai clic su CONCEDI ACCESSO A TUTTI GLI ACCOUNT DI SERVIZIO.

Creazione e deployment di un container

Cloud Build ti consente di creare l'immagine del contenitore, archiviarla in Container Registry e poi eseguirne il deployment in Cloud Run.

Per creare e implementare un'immagine container:

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

  2. Nel file di configurazione di Build, aggiungi docker passaggi di compilazione per creare l'immagine e spingerla in Container Registry, quindi aggiungi un passaggio di compilazione gcloud per invocare 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 dove è archiviata l'immagine.
    • IMAGE è il nome dell'immagine in Container Registry.
  3. Vai alla directory principale del progetto ed esegui il seguente comando, dove BUILD_REGION è una delle regioni di compilazione supportate per eseguire la compilazione:

     gcloud builds submit --region=BUILD_REGION
    

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 in 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 directory principale del repository, aggiungi un file di configurazione denominato cloudbuild.yaml con i passaggi per compilare l'immagine, eseguirne il push in Container Registry e invocare 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 attivatore di compilazione 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 l'attivatore.

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

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

    6. In Origine, seleziona il repository e il nome del ramo o del tag che attiverà l'attivatore. Per ulteriori informazioni su come specificare i branch da compilare automaticamente, consulta Creare un attivatore di compilazione.

    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 tuo repository, viene invocata automaticamente una compilazione e un deployment nel tuo servizio.

Ogni volta che esegui il push di nuovo codice nel tuo repository, viene attivata automaticamente una build ed eseguito il deployment nel tuo servizio Cloud Run.

Per ulteriori informazioni sulla creazione di trigger Cloud Build, consulta Creare e gestire gli trigger di build.

Utilizzo di autorizzazioni IAM minime

Quando un contenitore viene dispiegato 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 il deployment automatico di nuovi container, deve essere in grado di agire come account di servizio di runtime del tuo servizio Cloud Run.

Per concedere a Cloud Build l'accesso limitato per eseguire 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 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 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 progetto.

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

Per ulteriori informazioni, consulta la sezione Autorizzazioni di 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 ed eseguire il deployment di un'immagine in Cloud Run.

Passaggi successivi