Panoramica del processo di compilazione

Quando esegui il deployment del codice sorgente della funzione nelle funzioni Cloud Run, questo viene archiviato in un bucket Cloud Storage. Cloud Build quindi automaticamente crea il tuo codice in un'immagine container e ne esegue il push registro di immagini. Le funzioni Cloud Run accedono a questa immagine quando devono 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 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. Nota le seguenti:

    • Se utilizzi la crittografia predefinita, questo bucket è denominato gcf-sources-PROJECT_NUMBER-REGION.
    • Se stai proteggendo i tuoi dati con CMEK, il bucket è denominato 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 presenta le seguenti caratteristiche:

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

    Per abilitare l'API manualmente, fai clic sul link qui sopra, seleziona il tuo progetto da il 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 le dimensioni dell'istanza predefinite di Cloud Build, poiché queste istanze sono preriscaldate e sono disponibili più rapidamente. Cloud Build offre un Livello gratuito: consulta il documento sui prezzi per ulteriori i 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 nella pagina Prezzi.

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

  • Poiché il processo di compilazione è soggetto a fatturazione, il progetto deve disporre di un account di fatturazione Cloud collegati.

visualizza i log delle immagini di build

Un vantaggio chiave del processo dell'immagine di compilazione nel progetto utente è l'accesso per creare i log. 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 di Cloud Run, fai clic sul nome la funzione che stai esaminando.
  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 relativa voce di log. 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.

Il registry degli elementi deve trovarsi nello stesso progetto della funzione. Puoi creare o aggiornare una funzione basata su Artifact Registry come segue:

gcloud

Per Artifact Registry gestito dal cliente, esegui il comando seguente:

gcloud functions deploy --no-gen2 FUNCTION \
--docker-repository=REPOSITORY
[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.

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 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 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 ti interessa o segui le istruzioni per crearne 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 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 dei Controlli di servizio VPC (VPC SC) e vuoi limitare l'accesso della build solo alle dipendenze archiviate all'interno del perimetro, puoi usare nei pool di worker privati di Cloud Build funzionalità.

In generale, segui questi passaggi per configurare il tuo 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 di nel 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 per creare 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 stai utilizzando, mentre PRIVATE_POOL_NAME è il nome del pool.

Per interrompere l'utilizzo di un determinato pool privato e utilizzare il pool Cloud Build predefinito, utilizza il flag --clear-build-worker-pool al momento del 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 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 saperne di più, consulta Eseguire le 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 agisca come entità durante l'esecuzione della build. A partire da luglio 2024, i nuovi progetti di un'organizzazione utilizzeranno l'account di servizio predefinito di Compute Engine per fungere da principale che esegue una compilazione. 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 l'account di servizio Cloud Build precedente. 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 creazione.
  2. Impedisci l'utilizzo dell'account di servizio Compute predefinito per la compilazione.
  3. Configura un nuovo account di servizio con autorizzazioni con ambito appropriato per da usare per la build.
  4. Utilizza l'account di servizio configurato per la build.

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. La build predefinita 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 creare le funzioni

Come parte della configurazione di una funzione, è possibile specificare un account di servizio di build durante il deployment della funzione. Quando non è possibile utilizzare l'account di servizio Cloud Build legacy e l'account di servizio Compute Engine predefinito per la compilazione, devi specificare un account di servizio di compilazione per eseguire il deployment di una funzione.

Consulta Account di servizio personalizzato per Cloud Build per la configurazione e l'utilizzo di un account di servizio di build per la funzione.