1. Introduzione
Panoramica
Le funzioni Cloud Run sono un nuovo modo per eseguire il deployment dei carichi di lavoro utilizzando i paradigmi di gestione degli eventi e la firma delle funzioni di GCF che già conosci. Anziché utilizzare il nostro processo di compilazione e le configurazioni di deployment, le funzioni Cloud Run ti offrono il controllo diretto sul servizio di base creato su Cloud Run.
Con le funzioni Cloud Run, offriamo l'esperienza utente semplice del deployment del codice sorgente di Cloud Run, offrendo agli sviluppatori il controllo completo sui loro carichi di lavoro utilizzando le configurazioni di Cloud Run.
In questa sezione imparerai a eseguire il deployment di una funzione basata su eventi in Node. Eseguirai il deployment di una funzione che viene attivata ogni volta che un oggetto viene finalizzato in un bucket Google Cloud Storage.
Questo codelab utilizza esempi di nodejs negli esempi riportati di seguito. Tuttavia, puoi utilizzare gli esempi di codice di Cloud Functions 2ª gen. nella lingua che preferisci:
- Esempi di funzioni Python
- Esempi di funzioni Node.js
- Esempi di funzioni Go
- Esempi di funzioni Java
- Esempi di funzioni PHP
- Esempi di funzioni Ruby
- Esempi di funzioni.NET
Cosa imparerai a fare
- Come eseguire il deployment di una funzione Cloud Run basata su eventi che viene attivata ogni volta che un oggetto viene caricato in un bucket GCS
- Come creare un account di servizio con i ruoli appropriati per ricevere un evento da Cloud Storage e richiamare la funzione Cloud Run
2. Configura le variabili di ambiente e abilita le API
Aggiornare l'interfaccia a riga di comando gcloud
Questo codelab richiede l'installazione di una versione recente della CLI gcloud. Puoi aggiornare la CLI eseguendo
gcloud components update
Abilita API
Prima di poter iniziare a utilizzare questo codelab, devi abilitare diverse API. Questo codelab richiede l'utilizzo delle seguenti API. Puoi abilitare queste API eseguendo il seguente comando:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ artifactregistry.googleapis.com
Configura le variabili di ambiente
Puoi impostare le variabili di ambiente che verranno utilizzate durante questo codelab.
PROJECT_ID=<YOUR_PROJECT_ID> REGION=<YOUR_REGION, e.g. us-central1> gcloud config set project $PROJECT_ID SERVICE_NAME=crf-event-codelab BUCKET_NAME=$PROJECT_ID-$SERVICE_NAME TRIGGER_NAME=$SERVICE_NAME-trigger
3. Crea un bucket di archiviazione e un account di servizio
Crea un bucket di archiviazione
Puoi creare un bucket Cloud Storage eseguendo il seguente comando:
gsutil mb -l us-central1 gs://$BUCKET_NAME
Crea un account di servizio
Per questo esempio, creerai un account di servizio con le autorizzazioni EventArc richieste e il ruolo Invoker di Cloud Run per ricevere un evento da Cloud Storage e richiamare la funzione Cloud Run.
Crea innanzitutto l'account di servizio.
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') SERVICE_ACCOUNT="cloud-run-functions" SERVICE_ACCOUNT_ADDRESS=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com gcloud iam service-accounts create $SERVICE_ACCOUNT \ --display-name="Cloud Run functions Eventarc service account"
Quindi, concedi il ruolo Event Receiver di Eventarc (roles/eventarc.eventReceiver) nel progetto all'account di servizio associato all'trigger Eventarc in modo che l'trigger possa ricevere eventi dai provider di eventi.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/eventarc.eventReceiver
Poi, concedi all'account di servizio il ruolo Invoker di Cloud Run in modo che possa richiamare la funzione.
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT_ADDRESS \ --role=roles/run.invoker
4. Crea ed esegui il deployment della funzione
Per prima cosa, crea una directory per il codice sorgente ed esegui cd in quella directory.
mkdir ../$SERVICE_NAME && cd $_
Quindi, crea un file package.json
con i seguenti contenuti:
{ "dependencies": { "@google-cloud/functions-framework": "^3.0.0" } }
Quindi, crea un file index.js
con i seguenti contenuti:
const functions = require("@google-cloud/functions-framework"); // Register a CloudEvent callback with the Functions Framework that will // be triggered by Cloud Storage. functions.cloudEvent("helloGCS", (cloudEvent) => { console.log(`Event ID: ${cloudEvent.id}`); console.log(`Event Type: ${cloudEvent.type}`); const file = cloudEvent.data; console.log(`Bucket: ${file.bucket}`); console.log(`File: ${file.name}`); console.log(`Metageneration: ${file.metageneration}`); console.log(`Created: ${file.timeCreated}`); console.log(`Updated: ${file.updated}`); });
Ora puoi eseguire il deployment della funzione Cloud Run eseguendo il seguente comando:
gcloud beta run deploy $SERVICE_NAME \ --source . \ --function helloGCS \ --region $REGION \ --no-allow-unauthenticated
Tieni presente quanto segue:
- il flag -source viene utilizzato per indicare a Cloud Run di compilare la funzione in un servizio basato su container eseguibile
- Il flag -function (novità) viene utilizzato per impostare il punto di ingresso del nuovo servizio come la firma della funzione che vuoi che venga richiamata
- (Facoltativo) l'opzione –no-allow-unauthenticated per impedire che la funzione sia invocabile pubblicamente
Puoi visualizzare il nuovo servizio crf-nodejs-event
eseguendo il seguente comando:
gcloud beta run services describe $SERVICE_NAME
5. Creare l'evento
Possiamo creare un attivatore Eventarc per inviare messaggi alla nostra funzione ogni volta che un oggetto viene finalizzato in Google Cloud Storage:
BUCKET_REGION=$REGION gcloud eventarc triggers create $TRIGGER_NAME \ --location=$REGION \ --destination-run-service=crf-nodejs-event \ --destination-run-region=$BUCKET_REGION \ --event-filters="type=google.cloud.storage.object.v1.finalized" \ --event-filters="bucket=$BUCKET_NAME" \ --service-account=$SERVICE_ACCOUNT_ADDRESS
Tieni presente quanto segue:
- gcs-function-trigger è il nome dell'attivatore
- crf-nodejs-event è il nome del servizio Cloud Run in cui è dipiattaforma la nostra funzione
- Per il flag –event-filters, non utilizzare il prefisso gs:// nel nome del bucket.
Un tutorial dettagliato sulla configurazione del servizio Trigger da Cloud Storage utilizzando Eventarc è disponibile nella documentazione di Cloud Run all'indirizzo https://cloud.google.com/run/docs/tutorials/eventarc
6. Testa la funzione
Al termine del deployment, viene visualizzato l'URL del servizio. Per richiamare la funzione, devi inviare una richiesta autenticata con il tuo token di identità o il token di identità di un principio che dispone del ruolo Invoker di Cloud Run, come mostrato di seguito:
# get the Service URL SERVICE_URL="$(gcloud run services describe crf-nodejs-event --region us-central1 --format 'value(status.url)')" # invoke the service curl -H "Authorization: bearer $(gcloud auth print-identity-token)" -X GET $SERVICE_URL
Ora che la funzione è stata dispiata e abbiamo creato un trigger, siamo pronti per invocarla.
Crea un file e caricalo nel tuo bucket Cloud Storage. Puoi farlo tramite l'interfaccia web della console Cloud o utilizzando lo strumento a riga di comando gsutil, ad esempio
echo "hello world" > test.txt gsutil cp test gs://$BUCKET_NAME
Quando il file viene caricato correttamente, viene generato un evento e la funzione stampa alcune informazioni di base sull'oggetto, ad esempio il nome del file. Puoi trovare questo output nelle voci di log della funzione nella console Cloud. In alternativa, puoi eseguire una query per questo output utilizzando l'interfaccia a riga di comando gcloud:
gcloud logging read "resource.labels.service_name=crf-nodejs-event AND textPayload: File" --format=json
e dovresti vedere il seguente output
"textPayload": "File: test.txt"
7. Complimenti!
Complimenti per aver completato il codelab.
Ti consigliamo di consultare la documentazione relativa alle funzioni Cloud Run.
Argomenti trattati
- Come eseguire il deployment di una funzione Cloud Run basata su eventi che viene attivata ogni volta che un oggetto viene caricato in un bucket GCS
- Come creare un account di servizio con i ruoli appropriati per ricevere un evento da Cloud Storage e richiamare la funzione Cloud Run
8. Esegui la pulizia
Per evitare addebiti involontari, ad esempio se questo servizio Cloud Run viene invocato inavvertitamente più volte rispetto alla allocazione mensile di invocazioni Cloud Run nel livello senza costi, puoi eliminare il servizio Cloud Run o il progetto creato nel passaggio 2.
Per eliminare i servizi Cloud Run, vai alla console Cloud Run all'indirizzo https://console.cloud.google.com/run/ ed elimina il servizio crf-event-codelab
che hai creato in questo codelab.
Se scegli di eliminare l'intero progetto, puoi andare alla pagina https://console.cloud.google.com/cloud-resource-manager, selezionare il progetto creato nel passaggio 2 e scegliere Elimina. Se elimini il progetto, dovrai modificare i progetti nel tuo Cloud SDK. Puoi visualizzare l'elenco di tutti i progetti disponibili eseguendo gcloud projects list
.