Questo tutorial mostra come ricevere eventi direttamente da Cloud IoT in un servizio Cloud Run non autenticato utilizzando Eventarc.
Cloud IoT si connette, gestisce e importa in modo sicuro i dati da dispositivi IoT. Puoi creare trigger Eventarc che filtrano specifici eventi del Registro di sistema e dei dispositivi Cloud IoT (creazione, eliminazione e aggiornamenti dei metadati). Per i dettagli, consulta Eventi supportati.
I payload degli eventi sono codificati in JSON e gli schemi di eventi sono disponibili nel repository CloudEvents.
Per saperne di più, consulta la panoramica di IoT Core e Creare registri e dispositivi.
Obiettivi
In questo tutorial, imparerai a:
Eseguire il deployment di un servizio di ricezione di eventi in Cloud Run.
Creare un trigger Eventarc che indirizzi gli eventi di creazione del registro al servizio Cloud Run.
Creare un registro Cloud IoT in modo che venga generato un evento.
Visualizzare i dettagli dell'evento nei log di Cloud Run.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Prima di iniziare
Alcuni passaggi di questo documento potrebbero non funzionare correttamente se la tua organizzazione applica vincoli al tuo ambiente Google Cloud. In questo caso, potresti non riuscire a completare attività come la creazione di indirizzi IP pubblici o delle chiavi degli account di servizio. Se effettui una richiesta che restituisce un errore sui vincoli, scopri come sviluppare applicazioni in un ambiente Google Cloud con restrizioni.
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Creare un progetto Cloud:
gcloud projects create PROJECT_ID
-
Seleziona il progetto Cloud che hai creato:
gcloud config set project PROJECT_ID
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Creare un progetto Cloud:
gcloud projects create PROJECT_ID
-
Seleziona il progetto Cloud che hai creato:
gcloud config set project PROJECT_ID
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
- Aggiorna i componenti
gcloud
:gcloud components update
- Accedi utilizzando il tuo account:
gcloud auth login
- Abilita le API:
gcloud services enable cloudiot.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com
- Imposta le variabili di configurazione utilizzate in questo tutorial:
PROJECT_ID=$(gcloud config get-value project) REGION=us-central1 gcloud config set project PROJECT_ID gcloud config set run/region $REGION gcloud config set eventarc/location $REGION
- Crea un account di servizio per il trigger Eventarc:
SA_NAME=cloudiot-events-sa gcloud iam service-accounts create $SA_NAME \ --display-name="Cloud IoT events service account"
Dopo aver creato un account di servizio, possono essere necessari fino a 7 minuti prima di poterlo utilizzare. Se provi a utilizzare un account di servizio subito dopo averlo creato e ricevi un messaggio di errore, attendi almeno 60 secondi e riprova. - Verifica che l'account di servizio
cloudiot-events-sa
sia stato creato:gcloud iam service-accounts list
L'output dovrebbe essere simile al seguente:DISPLAY NAME EMAIL DISABLED Default compute service account PROJECT_NUMBER-compute@developer.gserviceaccount.com False Cloud IoT events service account cloudiot-events-sa@PROJECT_ID.iam.gserviceaccount.com False
- Concedi
eventarc.eventReceiver
all'account di servizio:gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/eventarc.eventReceiver"
Esegui il deployment di un destinatario di eventi in Cloud Run
Utilizzando un'immagine predefinita, gcr.io/cloudrun/hello
, esegui il deployment di un servizio Cloud Run che riceve e registra gli eventi.
Esegui il deployment dell'immagine container:
SERVICE_NAME=hello-iot-service gcloud run deploy $SERVICE_NAME \ --image=gcr.io/cloudrun/hello \ --allow-unauthenticated
Per ulteriori informazioni, consulta Deployment delle immagini container.
Al messaggio
Allow unauthenticated invocations?
, digitay
.
Quando vedi l'URL del servizio Cloud Run, il deployment è completo.
Crea un trigger Eventarc
Quando viene creato un registro di Cloud IoT, l'evento viene instradato al servizio Cloud Run da un trigger Eventarc.
Crea un trigger per ascoltare gli eventi di creazione del registro:
gcloud eventarc triggers create iot-events-trigger \ --destination-run-service=$SERVICE_NAME \ --destination-run-region=$REGION \ --event-filters="type=google.cloud.iot.v1.DeviceManager.CreateDeviceRegistry" \ --event-filters-path-pattern="registry=test-registry-*" \ --service-account=$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Tieni presente che puoi applicare un pattern del percorso quando applichi un filtro in base al nome di un registro o di una risorsa del dispositivo.
Il comando precedente crea un trigger denominato
iot-events-trigger
che viene richiamato quando viene creato un registro Cloud IoT con il nometest-registry-*
.Verifica che il trigger sia stato creato correttamente:
gcloud eventarc triggers list --location=us-central1
Lo stato dell'attivatore restituito dovrebbe essere
ACTIVE: Yes
.
Generare e visualizzare un evento
Creare un registro Cloud IoT per generare un evento e attivare il servizio Cloud Run. Il servizio Cloud Run registra i messaggi nei log del servizio.
Crea un registro Cloud IoT:
gcloud iot registries create test-registry-iot-events \ --region=$REGION
Visualizza le voci di log relative agli eventi create dal servizio Cloud Run:
gcloud logging read "resource.type=cloud_run_revision AND \ resource.labels.service_name=$SERVICE_NAME" --limit 5
La voce di log deve essere simile alla seguente:
insertId: 630393ce000678246a2bbac4 jsonPayload: event: data: payload: '@type': type.googleapis.com/google.events.cloud.iot.v1.DeviceRegistry httpConfig: httpEnabledState: HTTP_ENABLED id: test-registry-iot-events mqttConfig: mqttEnabledState: MQTT_ENABLED name: projects/test-project/locations/us-central1/registries/test-registry-iot-events stateNotificationConfig: {} datacontenttype: application/json; charset=utf-8 dataschema: https://googleapis.github.io/google-cloudevents/proto/google/events/cloud/iot/v1/data.proto#RegistryEventData id: d3a24b8a1c820027df4a38c2fac68f8d location: us-central1 project: '1234567891011' registry: projects/test-project/locations/us-central1/registries/test-registry-iot-events source: //cloudiot.googleapis.com/projects/test-project/locations/us-central1 specversion: '1.0' subject: registries/test-registry-iot-events time: '2022-08-22T14:33:47.697834192Z' type: google.cloud.iot.v1.DeviceManager.CreateDeviceRegistry eventType: google.cloud.iot.v1.DeviceManager.CreateDeviceRegistry message: 'Received event of type google.cloud.iot.v1.DeviceManager.CreateDeviceRegistry. Event data: {"payload":{"@type":"type.googleapis.com/google.events.cloud.iot.v1.DeviceRegistry","id":"test-registry-iot-events","name":"projects/test-project/locations/us-central1/registries/test-registry-iot-events","mqttConfig":{"mqttEnabledState":"MQTT_ENABLED"},"stateNotificationConfig":{},"httpConfig":{"httpEnabledState":"HTTP_ENABLED"}}}' [...]
La visualizzazione dei log potrebbe richiedere alcuni istanti. Se non trovi subito l'opzione, ricontrolla dopo un minuto.
Esegui la pulizia
Se hai creato un nuovo progetto per questo tutorial, elimina il progetto. Se hai utilizzato un progetto esistente e vuoi conservarlo senza apportare modifiche in questo tutorial, elimina le risorse create per il tutorial.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- In Google Cloud Console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Elimina risorse del tutorial
Elimina il servizio Cloud Run di cui hai eseguito il deployment in questo tutorial:
gcloud run services delete SERVICE_NAME
Dove
SERVICE_NAME
è il nome del servizio che hai scelto.Puoi anche eliminare i servizi Cloud Run dalla console Google Cloud.
Rimuovi le configurazioni predefinite dell'interfaccia a riga di comando gcloud aggiunte durante la configurazione del tutorial.
Ad esempio:
gcloud config unset run/region
o
gcloud config unset project
Elimina le altre risorse Google Cloud create in questo tutorial:
Elimina il trigger Eventarc:
gcloud eventarc triggers delete TRIGGER_NAME
SostituisciTRIGGER_NAME
con il nome del trigger.Elimina il registro Cloud IoT:
gcloud iot registries delete test-registry-iot-events \ --region=$REGION