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 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 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 comporta quanto segue:
Hai accesso diretto a tutti i log di compilazione.
Non è presente una quota preimpostata per il momento di compilazione, anche se Cloud Build ha la propria quota di concorrenza predefinita.
Puoi visualizzare l'immagine container corrente e quelle di cui è stato eseguito il deployment in precedenza, 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 conto 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.
- Se utilizzi la crittografia predefinita, questo bucket si chiama
Caratteristiche del processo di compilazione
Il processo di compilazione presenta le seguenti caratteristiche:
L'API Cloud Build deve essere abilitata 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 avviene nel contesto del 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 sono preriscaldate e sono disponibili più rapidamente. Cloud Build offre un livello gratuito: consulta il documento relativo ai prezzi per ulteriori dettagli.
Per informazioni sui prezzi di Cloud Storage, consulta la pagina Prezzi. Cloud Storage offre un livello gratuito: consulta il documento relativo ai 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 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 la gcloud CLI o la console Google Cloud per accedere ai log, che sono disponibili tramite Cloud Logging.
gcloud
Esegui il deployment della funzione utilizzando il
gcloud functions deploy
comando.L'URL dei log viene visualizzato nella 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
- Nella finestra Panoramica di Cloud Run Functions, fai clic sul nome della funzione in esame.
- Fai clic sulla scheda Dettagli.
- Nel riquadro Informazioni generali, fai clic sul link Log di compilazione del contenitore per aprire il riquadro Esplora log.
- Fai clic su una riga per visualizzare i dettagli della voce di log della build. Se si tratta di un elemento associato a un file, questi dettagli includono il nome, la riga e la colonna del file.
Registry delle 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 chiamato 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 nel seguente modo:
gcloud
Per Artifact Registry gestito dal cliente, esegui il seguente comando:
gcloud functions deploy --no-gen2 FUNCTION \ --docker-repository=REPOSITORY [FLAGS...]
Sostituisci quanto segue:
- FUNCTION: il nome della funzione.
- REPOSITORY: il nome del repository Artifact Registry completamente qualificato, 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
Vai alla pagina Funzioni Cloud Run nella console Google Cloud:
Vai alla pagina Funzioni Cloud RunFai clic sul nome della funzione per la quale vuoi utilizzare Artifact Registry.
Fai clic su Modifica.
Fai clic su Runtime, build… per espandere le opzioni di configurazione avanzata.
Fai clic su Repository per sicurezza e immagini nella barra dei menu per aprire la scheda Sicurezza.
In Repository di immagini, seleziona una delle opzioni seguenti, 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.
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.
Fai clic su Avanti.
Fai clic su Esegui il deployment.
Per informazioni dettagliate sui prezzi, consulta Prezzi di Cloud Run Functions.
Proteggi la tua 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, per configurare il pool privato:
- Crea il tuo pool di worker privato. Consulta Creare e gestire i pool privati.
Configura il perimetro dei Controlli di servizio VPC. Consulta Utilizzo dei Controlli di servizio VPC.
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 ruolocloudbuild.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.
Esegui il deployment della funzione da compilare 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 in uso e 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 in uso.
Console Google Cloud
Nella pagina Panoramica di Cloud Run Functions, seleziona Crea funzione.
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
Le funzioni Cloud Run acquisiscono il codice sorgente e lo inviano a Cloud Build per la containerizzazione. 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 di un'organizzazione utilizzeranno l'account di servizio predefinito di Compute Engine come principale che esegue una compilazione. Per maggiori dettagli, consulta la sezione 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 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 account di servizio, puoi seguire questi passaggi per proteggere ulteriormente l'ambiente di compilazione delle funzioni:
- Impedisci l'utilizzo dell'account di servizio Cloud Build legacy per la compilazione.
- Impedisci l'utilizzo dell'account di servizio Compute predefinito per la compilazione.
- Configura un nuovo account di servizio con autorizzazioni con ambito appropriato da utilizzare per la compilazione.
- 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 tuo progetto utilizzi l'account di servizio Cloud Build precedente esaminando 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 di ruolo limiterà la sua capacità di accedere alle risorse di Google Cloud.
Impedire l'utilizzo dell'account di servizio Compute predefinito per la compilazione
L'account di servizio Compute predefinito ha il formatoPROJECT_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 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 configurare e utilizzare un account di servizio di compilazione per la tua funzione.