Creazione di immagini Cloud Functions

Panoramica

Quando esegui il deployment del codice sorgente della funzione in Cloud Functions, tale origine viene archiviata in un bucket Cloud Storage. Cloud Build crea automaticamente il codice in un'immagine container e ne esegue il push a un registro immagini (Container Registry o Artifact Registry). Cloud Functions accede a questa immagine quando deve eseguire il container per eseguire la funzione.

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

Eseguire il processo di compilazione all'interno del progetto significa che:

  • Hai accesso diretto a tutti i log di build.

  • Non esiste una quota di tempo di build preimpostata, anche se Cloud Build ha la propria quota di contemporaneità predefinita.

  • Puoi visualizzare l'immagine container attuale e quella container di cui hai eseguito il deployment in precedenza, entrambe archiviate in Container Registry o Artifact Registry.

  • Poiché Cloud Storage viene utilizzato direttamente nel progetto, la directory del codice sorgente per le funzioni è visibile in un bucket denominato gcf-sources-PROJECT_NUMBER-REGION.

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 riportato sopra, seleziona il progetto nel menu a discesa e fai clic su Continua.

  • Poiché l'intero processo di compilazione avviene nel contesto del tuo progetto, questo è 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 istanze sono preconfigurate e sono disponibili più rapidamente. Cloud Build offre un livello gratuito: consulta il documento sui prezzi per ulteriori dettagli.

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

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

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

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

Accesso ai log dell'immagine della build

Uno dei vantaggi principali del processo di creazione di immagini nel progetto utente è l'accesso ai log di build. Per raggiungere i log, disponibili tramite Cloud Logging, puoi utilizzare gcloud CLI o Google Cloud Console.

gcloud

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

  2. L'URL dei log viene visualizzato 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 schermata Funzioni, fai clic sul Nome della funzione che ti interessa. Viene visualizzata la pagina Dettagli funzione.

  2. Scorri verso il basso fino a visualizzare la sezione Build container. Se la build non ha riscontrato errori, viene visualizzato un link che puoi seguire per visualizzare il log di build. Se la build ha errori, come mostrato di seguito, la sezione Build container li mostra in linea; fai clic su Ulteriori informazioni per visualizzare direttamente il log Build.

    Screenshot che mostra l'output della sezione della build del container

  3. Viene visualizzata la schermata Visualizzatore log. Fai clic sulla voce che ti interessa.

  4. Si apre una voce completa del log di build che mostra il file interessato, una descrizione dell'errore: in questo caso una parentesi mancante in pom.xml e la riga e la colonna dell'errore.

    Screenshot che mostra la voce di log di build

Opzioni del registro di immagini

Cloud Functions (2nd gen) utilizza esclusivamente 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.

Cloud Functions (1st gen) utilizza Container Registry per impostazione predefinita, ma consente anche di utilizzare Artifact Registry. In Cloud Functions (1a generazione), puoi creare o aggiornare una funzione basata su Artifact Registry come segue:

Console

  1. Vai alla pagina Cloud Functions in Google Cloud Console:
    Vai alla pagina Cloud Functions

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

  3. Fai clic su Modifica.

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

  5. Fai clic su Sicurezza e repository di immagini per aprire la scheda Sicurezza.

  6. In Repository di immagini > Posizione container, seleziona una delle opzioni seguenti, a seconda del tipo di Artifact Registry che stai utilizzando:

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

  8. Tocca Avanti.

  9. Fai clic su Esegui il deployment.

gcloud

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

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

Sostituisci quanto segue:

  • FUNCTION: il nome della funzione.
  • REPOSITORY: 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 FUNCTION \
--docker-registry=artifact-registry
[FLAGS...]

Per informazioni più dettagliate sui prezzi, consulta i prezzi di Cloud Functions.

Protezione della build con pool privati

Per consentire alle tue funzioni di utilizzare le dipendenze (ad esempio, pacchetti npm), Cloud Build dispone per impostazione predefinita di 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 utilizzare la funzionalità dei pool di worker privati di Cloud Build.

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

  1. Crea il pool di worker privato. Vedi Creazione e gestione dei pool privati.
  2. Configura il perimetro dei Controlli di servizio VPC. Consulta la pagina relativa all'utilizzo dei controlli di servizio VPC.

  3. Se il pool di worker privato si trova in un progetto diverso da quello della tua funzione, devi concedere all'account di servizio Agente di servizio (service-FUNCTION_PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) Cloud Functions il ruolo cloudbuild.workerPoolUser in modo che il servizio Cloud Build può 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 Esecuzione di build in un pool privato.

  4. Esegui il deployment della funzione per creare la risorsa 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 usando 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 durante il nuovo deployment.

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

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

    Console Google Cloud

    Nella pagina Create function, nella sezione Runtime, build and connections settings, seleziona la scheda Build e inserisci PRIVATE_POOL_NAME nella casella di testo Build worker pools Selected environment, dove PRIVATE_POOL_NAME è il nome del pool.

    Screenshot della console Cloud