Panoramica del processo di compilazione

Quando esegui il deployment del codice sorgente della tua funzione nelle funzioni Cloud Run, l'origine in un bucket Cloud Storage. Cloud Build quindi compila automaticamente il codice in un'immagine container ed esegue il push dell'immagine in un registry di immagini. Le funzioni Cloud Run accedono a questa immagine quando deve eseguire il container per eseguire la funzione.

Il processo di creazione dell'immagine è completamente automatico e non richiede alcun input diretto da parte tua. Tutte le risorse utilizzate nel processo di compilazione vengono eseguite nel tuo progetto utente.

L'esecuzione del processo di compilazione all'interno del progetto significa che:

  • Hai accesso diretto a tutti i log di compilazione.

  • Non esiste una quota preimpostata per il tempo di creazione, anche se Cloud Build ha la sua della tua quota di contemporaneità predefinita.

  • Puoi visualizzare l'immagine container attuale e quella di cui è stato eseguito il deployment in precedenza containerizzate, entrambe archiviate in Artifact Registry.

  • Cloud Storage viene utilizzato direttamente nel progetto e la directory del codice sorgente per le funzioni viene archiviata in un bucket all'interno del progetto. Tieni presente quanto segue:

    • Se utilizzi la crittografia predefinita, questo bucket si chiama gcf-sources-PROJECT_NUMBER-REGION.
    • Se proteggi i tuoi dati con CMEK, il bucket si chiama gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH.
    • Il bucket non ha un periodo di conservazione.

Caratteristiche del processo di compilazione

Il processo di compilazione ha le seguenti caratteristiche:

  • L'API Cloud Build devono essere abilitati per il tuo progetto.

    Per attivare l'API manualmente, fai clic sul link qui sopra, seleziona il tuo progetto dal menu a discesa e segui le istruzioni per attivare l'interfaccia utente.

  • Poiché l'intero processo di compilazione si svolge nel contesto del tuo progetto, il progetto è soggetto al prezzo delle risorse incluse:

    • Per i prezzi di Cloud Build, consulta la pagina Prezzi. Questo processo utilizza la dimensione predefinita dell'istanza di Cloud Build, poiché queste vengono pre-addestrate e sono disponibili più rapidamente. Cloud Build offre un livello gratuito: consulta il documento relativo ai prezzi per ulteriori dettagli.

    • Per i prezzi di Cloud Storage, consulta la pagina Prezzi. Cloud Storage offre un Livello gratuito: rivedi i prezzi per ulteriori dettagli.

    • Per i prezzi di Artifact Registry, consulta la pagina Prezzi.

    • Per i prezzi di Container Registry (deprecato), consulta Prezzi.

  • Poiché il processo di compilazione è soggetto alla fatturazione, al progetto deve essere associato un account di fatturazione Cloud.

visualizza i log delle immagini di build

Un vantaggio chiave dell'avere il processo di creazione dell'immagine nel progetto utente è l'accesso ai log di compilazione. Puoi utilizzare gcloud CLI o la console Google Cloud per raggiungere i log, disponibili tramite Cloud Logging.

gcloud

  1. Esegui il deployment della funzione utilizzando il gcloud functions deploy comando.

  2. L'URL dei log viene visualizzato come parte della risposta nel tuo terminale finestra. Ad esempio:

    Deploying function (may take a while - up to 2 minutes)...⠹
    **For Cloud Build Stackdriver Logs**, visit:
    https://console.cloud.google.com/logs/viewer?project=&advancedFilter=resource.type%
    3Dbuild%0Aresource.labels.build_id%3D38d5b662-2315-45dd-8aa2-
    380d50d4f5e8%0AlogName%3Dprojects%2F%
    2Flogs%2Fcloudbuild
    Deploying function (may take a while - up to 2 minutes)...done.

Console Google Cloud

  1. Nella finestra Panoramica delle funzioni Cloud Run, fai clic sul nome della funzione in esame.
  2. Fai clic sulla scheda Dettagli.
  3. Nel riquadro Informazioni generali, fai clic sul link Log di compilazione del contenitore per aprire il riquadro Esplora log.
  4. Fai clic su una riga per visualizzare i dettagli della voce del log di compilazione. Se si tratta di un elemento associato a un file, questi dettagli includono il nome, la riga e la colonna del file.

Registro di immagini

Le funzioni Cloud Run utilizzano Artifact Registry per archiviare le immagini create dal codice sorgente della funzione. Le immagini vengono archiviate in un repository denominato REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts nello stesso progetto in cui è stata creata la funzione.

Per specificare un repository Artifact Registry autogestito, esegui il seguente comando:

gcloud

gcloud functions deploy FUNCTION \
  --docker-registry=artifact-registry \
  [FLAGS...]

Sostituisci quanto segue:

  • FUNCTION: il nome della funzione.
  • REPOSITORY: Artifact Registry completo nome del repository, nel formato seguente: projects/PROJECT_NAME/locations/LOCATION/repositories/REPOSITORY.

Quando specifichi un repository Artifact Registry in un progetto o una regione diversa, potresti dover prendere in considerazione configurazioni aggiuntive:

Configurazioni IAM:

  • Assicurati che l'account di servizio di build abbia l'accesso autorizzato in lettura e scrivere al REPOSITORY.

Configurazioni di rete:

  • Assicurati che la destinazione REPOSITORY sia raggiungibile dalla configurazione del progetto corrente.

Configurazioni di Controlli di servizio VPC:

  • Assicurati che l'account di servizio di build possa raggiungere la destinazione REPOSITORY all'interno del perimetro VPC-SC.

Vincoli di residenza dei dati:

  • Tieni presente che se specifichi un REPOSITORY in una regione diversa da quella in cui si trova la funzione, i dati verranno trasferiti tra le regioni.

Console Google Cloud

  1. Vai alla pagina delle funzioni di Cloud Run nella console Google Cloud:
    Vai alla pagina delle funzioni di Cloud Run

  2. Fai clic sul nome della funzione per la quale vuoi utilizzare Artifact Registry.

  3. Fai clic su Modifica.

  4. Fai clic su Runtime, build... (Runtime, build...) per espandere le opzioni di configurazione avanzate.

  5. Fai clic su Repository per sicurezza e immagini nella barra dei menu per aprire la scheda Sicurezza.

  6. In Repository di immagini, seleziona una delle a seconda del tipo di Artifact Registry in uso:

    • Artifact Registry gestito dal cliente. Utilizza questa opzione se configuri il tuo repository Docker.
    • Artifact Registry gestito da Google. Utilizza questa opzione se desideri utilizzare un repository Docker gestito da Google anziché configurarne uno tuo.
  7. Per Artifact Registry gestito dal cliente, utilizza la classe Artifact registry per selezionare il repository Artifact Registry desiderato, o seguire le istruzioni e crearne uno nuovo.

  8. Fai clic su Avanti.

  9. Fai clic su Esegui il deployment.

Per passare da Artifact Registry gestito da Google a Container Registry gestito da Google, utilizza il menu a discesa Artifact Registry per selezionare il repository Artifact Registry desiderato, o seguire le istruzioni e crearne uno nuovo.

gcloud

gcloud beta functions deploy FUNCTION \
  --docker-registry=artifact-registry \
  [FLAGS...]

Console Google Cloud

  1. Vai alla pagina delle funzioni di Cloud Run nella console Google Cloud:
    Vai alla pagina delle funzioni di Cloud Run

  2. Fai clic sul nome della funzione per la quale vuoi utilizzare Artifact Registry.

  3. Fai clic su Modifica.

  4. Fai clic su Runtime, build... (Runtime, build...) per espandere le opzioni di configurazione avanzate.

  5. Fai clic su Repository per sicurezza e immagini nella barra dei menu per aprire la scheda Sicurezza.

  6. In Repository di immagini, seleziona una delle a seconda del tipo di Artifact Registry in uso:

    • Artifact Registry gestito dal cliente. Utilizza questa opzione se configuri il tuo repository Docker.
    • Artifact Registry gestito da Google. Utilizza questa opzione se desideri utilizzare un repository Docker gestito da Google anziché configurarne uno tuo.
  7. Per Artifact Registry gestito dal cliente, utilizza la classe Artifact registry per selezionare il repository Artifact Registry desiderato, o seguire le istruzioni e crearne uno nuovo.

  8. Fai clic su Avanti.

  9. Fai clic su Esegui il deployment.

Per informazioni più dettagliate sui prezzi, vedi Prezzi delle funzioni Cloud Run.

Proteggi la build con i pool privati

Per consentire alle funzioni di utilizzare le dipendenze (ad esempio i pacchetti npm), per impostazione predefinita Cloud Build ha accesso a internet illimitato durante il processo di compilazione. Se hai configurato un perimetro Controlli di servizio VPC (VPC SC) e vuoi limitare l'accesso della compilazione solo alle dipendenze memorizzate all'interno del perimetro, puoi utilizzare la funzionalità Pool di worker privati di Cloud Build.

In generale, segui questi passaggi per configurare il pool privato:

  1. Crea il tuo pool di worker privato. Consulta Creazione e gestione di pool privati.
  2. Configura il perimetro dei Controlli di servizio VPC. Consulta Utilizzo dei Controlli di servizio VPC.

  3. Se il pool di worker privato si trova in un progetto diverso da quello della funzione, devi concedere all'account di servizio Agente di servizio delle funzioni Cloud Run (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) il ruolo cloudbuild.workerPoolUser in modo che il servizio Cloud Build possa accedere al pool di worker.

    gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \
        --member serviceAccount:service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com
        --role roles/cloudbuild.workerPoolUser

    dove FUNCTION_PROJECT_NUMBER è il numero del progetto in cui viene eseguita la funzione e PRIVATE_POOL_PROJECT_ID è l'ID del progetto in cui si trova il pool di worker. Per ulteriori informazioni, consulta Eseguire le build in un pool privato.

  4. Esegui il deployment della funzione da compilare utilizzando un pool privato:

gcloud

gcloud functions deploy FUNCTION_NAME \
  --runtime RUNTIME \
  --build-worker-pool PRIVATE_POOL_NAME
  [FLAGS...]

dove FUNCTION_NAME è il nome della funzione, RUNTIME è il runtime che stai utilizzando, mentre PRIVATE_POOL_NAME è il nome del pool.

Per interrompere l'utilizzo di un determinato pool privato e utilizzare invece quello predefinito per il pool di Cloud Build, usa il flag --clear-build-worker-pool quando rieseguire il deployment.

gcloud functions deploy FUNCTION_NAME \
  --runtime RUNTIME \
  --clear-build-worker-pool
  [FLAGS...]

dove FUNCTION_NAME è il nome della funzione e RUNTIME è il runtime in uso.

Console Google Cloud

  1. Nella pagina Panoramica delle funzioni Cloud Run, seleziona Crea funzione.

  2. Nella sezione Runtime, build…, fai clic sulla scheda Build e inserisci il nome completo della risorsa del tuo pool privato nella casella di testo Crea pool di worker.

Per ulteriori informazioni, vedi Esegui build in un pool privato.

Proteggi la tua build con un account di servizio personalizzato

Cloud Run riceve il codice sorgente e lo invia a Cloud Build per containerizzate. La funzione containerizzata viene archiviata in Artifact Registry ed eseguita in Cloud Run come servizio. Per impostazione predefinita, Cloud Build assegna un account di servizio che agisce come principale durante l'esecuzione della build. A partire da luglio 2024, i nuovi progetti in un'organizzazione utilizzeranno l'Compute Engine l'account di servizio predefinito che funga da entità che esegue una build. Per maggiori dettagli, consulta Modifica dell'account di servizio predefinito di Cloud Build. Per motivi di sicurezza, l'account di servizio predefinito di Compute Engine non dispone delle autorizzazioni sufficienti per eseguire la compilazione.

Per i progetti Google Cloud creati prima di luglio 2024, Cloud Build utilizza la classe l'account di servizio Cloud Build legacy. Questo account di servizio è stato progettato per aiutare gli utenti a eseguire una vasta gamma di casi d'uso che potrebbero essere troppo permissivi per le esigenze del tuo progetto. Se vuoi spostare i progetti esistenti da questo di account di servizio, puoi seguire questi passaggi per proteggere ulteriormente il tuo dell'ambiente di build delle funzioni:

  1. Impedisci l'utilizzo dell'account di servizio Cloud Build legacy per la compilazione.
  2. Impedisce l'utilizzo dell'account di servizio Compute predefinito per la build.
  3. Configura un nuovo account di servizio con autorizzazioni con ambito appropriato da utilizzare per la compilazione.
  4. Utilizza l'account di servizio configurato per la compilazione.

Impedire l'utilizzo dell'account di servizio Cloud Build legacy per la compilazione

Puoi verificare che il progetto stia utilizzando il servizio Cloud Build legacy ispeziona i dettagli della build della funzione. L'account di servizio di compilazione predefinito ha il seguente formato:

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

Puoi disattivare forzatamente l'utilizzo di questo account di servizio impostando il vincolo del criterio dell'organizzazione cloudbuild.useBuildServiceAccount su Not Enforced. In alternativa, la rimozione di tutte le concessioni dei ruoli limiterà la sua capacità di accedere a Google Cloud Google Cloud.

Impedisci l'utilizzo dell'account di servizio Compute predefinito per la build

L'account di servizio Compute predefinito ha il formato PROJECT_NUMBER-compute@developer.gserviceaccount.com. Puoi disattivare l'impostazione predefinita utilizzata per la compilazione impostando il criterio dell'organizzazione cloudbuild.useComputeServiceAccount su Not Enforced. In alternativa, la disattivazione di questo account di servizio ne impedisce l'utilizzo per accedere alle risorse Google Cloud.

Fornisci un account di servizio per la creazione di funzioni

Nell'ambito della configurazione di una funzione, è possibile specificare un account di servizio di compilazione al momento del deployment della funzione. Quando l'account di servizio Cloud Build legacy e l'account di servizio Compute predefinito non può essere usato per la build, è necessario specificare un account di servizio di build per eseguire il deployment di una funzione.

Consulta Account di servizio personalizzato per Cloud Build per configurare e utilizzare un account di servizio di compilazione per la tua funzione.