Panoramica del processo di compilazione

Quando esegui il deployment del codice sorgente della funzione in Cloud Run Functions, il codice viene archiviato in un bucket Cloud Storage. Cloud Build compila quindi automaticamente il codice in un'immagine container ed esegue il push dell'immagine in un registro delle immagini. Cloud Run Functions accede a questa immagine quando deve eseguire il container per eseguire la tua 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 comporta quanto segue:

  • Hai accesso diretto a tutti i log di build.

  • Non esiste una quota preimpostata per il tempo di compilazione, anche se Cloud Build ha una propria quota di concorrenza predefinita.

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

  • Cloud Storage viene utilizzato nel tuo progetto per archiviare la directory del codice sorgente per le tue funzioni. Tieni presente quanto segue:

    • Se crei una funzione, viene creato un bucket di caricamento per contenere il codice sorgente. Il nome di questo bucket di caricamento è gcf-uploads-PROJECT_NUMBER-REGION.cloudfunctions.appspot.com.
    • Dopo il caricamento, il codice della funzione viene archiviato in un bucket di origine separato:
      • Se utilizzi la crittografia predefinita, il nome di questo bucket è gcf-sources-PROJECT_NUMBER-REGION.
      • Se proteggi i tuoi dati con CMEK, il nome del bucket è gcf-sources-PROJECT_NUMBER-REGION-CMEK_KEY_HASH.
    • Sia il bucket di origine che quelli di caricamento non hanno un periodo di conservazione.

Caratteristiche del processo di compilazione

Il processo di compilazione ha le seguenti caratteristiche:

  • L'API Cloud Build deve essere abilitata per il tuo progetto.

    Per abilitare l'API manualmente, fai clic sul link precedente, seleziona il tuo progetto dal menu a discesa e segui le istruzioni per abilitare la UI.

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

    • Per i prezzi di Cloud Build, consulta la pagina Prezzi. Questo processo utilizza le dimensioni dell'istanza predefinite di Cloud Build, poiché queste istanze vengono preparate in anticipo e sono disponibili più rapidamente. Cloud Build offre un livello gratuito: consulta il documento sui prezzi per ulteriori dettagli.

    • Per informazioni sui prezzi di Cloud Storage, consulta la pagina Prezzi. Cloud Storage offre un livello gratuito: consulta il documento sui prezzi per ulteriori dettagli.

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

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

  • Poiché il processo di compilazione è soggetto a fatturazione, il tuo progetto deve avere un account di fatturazione Cloud collegato.

Visualizza i log di build dell'immagine

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

gcloud

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

  2. L'URL dei log viene mostrato come parte della risposta nella finestra del terminale. 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 che stai esaminando.
  2. Fai clic sulla scheda Dettagli.
  3. Nel riquadro Informazioni generali, fai clic sul link Log di Container build per aprire il riquadro Esplora log.
  4. Fai clic su una riga per visualizzare i dettagli di quella voce del log di build. Se si tratta di una voce di errore associata a un file, questi dettagli includono il nome, la riga e la colonna del file.

Registro delle immagini

Cloud Run Functions utilizza Artifact Registry per archiviare le immagini create dal codice sorgente della funzione. Le immagini sono archiviate in un repository denominato REGION-docker.pkg.dev/PROJECT_ID/gcf-artifacts.

Artifact Registry deve trovarsi nello stesso progetto della funzione. Puoi creare o aggiornare una funzione basata su Artifact Registry nel seguente modo:

gcloud

Per Artifact Registry gestito dal cliente, esegui questo comando:

gcloud functions deploy --no-gen2 FUNCTION \
--docker-repository=REPOSITORY
[FLAGS...]

Sostituisci quanto segue:

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

Per Artifact Registry gestito da Google, utilizza:

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

Console Google Cloud

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

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

  3. Fai clic su Modifica.

  4. Fai clic su Impostazioni di runtime, build, connessioni e sicurezza per espandere le opzioni di configurazione avanzate.

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

  6. In Repository di immagini, seleziona una delle seguenti opzioni, a seconda del tipo di Artifact Registry che utilizzi:

    • Artifact Registry gestito dal cliente Utilizza questa opzione se hai configurato il tuo repository Docker.
    • Artifact Registry gestito da Google Utilizza questa opzione se vuoi utilizzare un repository Docker gestito da Google anziché configurarne uno tuo.
  7. Per Artifact Registry gestito dal cliente, utilizza il menu a discesa Artifact Registry per selezionare il repository Artifact Registry che preferisci, oppure segui le istruzioni e creane uno nuovo.

  8. Fai clic su Avanti.

  9. Fai clic su Esegui il deployment.

Per informazioni dettagliate sui prezzi, consulta Prezzi di Cloud Run Functions.

Proteggi la build con i pool privati

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

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

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

  3. Se il tuo pool di worker privato si trova in un progetto diverso dalla tua funzione, devi concedere al service account Cloud Run Functions Service Agent (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 saperne di più, consulta Esecuzione delle build in un pool privato.

  4. Esegui il deployment della funzione per la build utilizzando un pool privato:

gcloud

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

dove FUNCTION_NAME è il nome della funzione, RUNTIME è il runtime che utilizzi e PRIVATE_POOL_NAME è il nome del pool.

Per interrompere l'utilizzo di un determinato pool privato e utilizzare invece il pool Cloud Build predefinito, utilizza il flag --clear-build-worker-pool durante il nuovo deployment.

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

dove FUNCTION_NAME è il nome della funzione e RUNTIME è il runtime che stai utilizzando.

Console Google Cloud

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

  2. Nella sezione Impostazioni di runtime, build, connessioni e sicurezza, fai clic sulla scheda Build e inserisci il nome completo della risorsa del tuo pool privato nella casella di testo Worker pool di build.

Per saperne di più, consulta Esegui build in un pool privato.

Proteggi la build con un service account personalizzato

Cloud Run Functions prende il tuo codice sorgente e lo invia a Cloud Build per containerizzarlo. La funzione containerizzata viene archiviata in Artifact Registry e ne viene eseguito il deployment in Cloud Run come servizio. Per impostazione predefinita, Cloud Build assegna un service account che funge da entità durante l'esecuzione della build. A partire da luglio 2024, i nuovi progetti di un'organizzazione utilizzeranno il service account predefinito di Compute Engine come entità che esegue una build. Per saperne di più, consulta Modifica del service account predefinito di Cloud Build. Per motivi di sicurezza, il service account predefinito di Compute Engine non dispone di autorizzazioni sufficienti per eseguire la build.

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

  1. Impedisci l'utilizzo del service account Cloud Build legacy per la build.
  2. Impedisci l'utilizzo del service account Compute predefinito per la build.
  3. Configura un nuovo service account con autorizzazioni con ambito appropriato da utilizzare per la build.
  4. Utilizza il service account configurato per la build.

Impedisci l'utilizzo del service account Cloud Build legacy per la build

Puoi verificare se il tuo progetto utilizza il service account Cloud Build legacy esaminando i dettagli della build della tua funzione. Il service account di build predefinito ha il seguente formato:

PROJECT_NUMBER@cloudbuild.gserviceaccount.com.

Puoi disattivare forzatamente l'utilizzo di questo service account impostando il vincolo della policy dell'organizzazione cloudbuild.useBuildServiceAccount su Not Enforced. In alternativa, la rimozione di tutti i ruoli concessi limiterà la sua capacità di accedere alle risorse Google Cloud.

Impedisci l'utilizzo del service account Compute predefinito per la build

Il service account Compute predefinito ha il formato PROJECT_NUMBER-compute@developer.gserviceaccount.com. Puoi disattivarne l'utilizzo come predefinito per la build impostando la policy dell'organizzazione cloudbuild.useComputeServiceAccount su Not Enforced. In alternativa, la disattivazione di questo service account impedisce che venga utilizzato per accedere alle risorse Google Cloud .

Fornisci un service account per la compilazione delle funzioni

Nell'ambito della configurazione di una funzione, è possibile specificare un service account per la build durante il deployment della funzione. Quando l'utilizzo del service account Cloud Build legacy e del service account Compute predefinito viene impedito per la build, devi specificare un service account per la build per eseguire il deployment di una funzione.

Consulta Service account personalizzato per Cloud Build per configurare e utilizzare un service account per la build per la tua funzione.