Ricevi un evento Cloud IoT

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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:

  1. Eseguire il deployment di un servizio di ricezione di eventi in Cloud Run.

  2. Creare un trigger Eventarc che indirizzi gli eventi di creazione del registro al servizio Cloud Run.

  3. Creare un registro Cloud IoT in modo che venga generato un evento.

  4. 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. I nuovi utenti di Google Cloud possono beneficiare di una prova gratuita.

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.

  1. 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.
  2. Installa Google Cloud CLI.
  3. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

    gcloud init
  4. 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
  5. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  6. Installa Google Cloud CLI.
  7. Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:

    gcloud init
  8. 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
  9. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  10. Aggiorna i componenti gcloud:
    gcloud components update
    
  11. Accedi utilizzando il tuo account:
    gcloud auth login
    
  12. Abilita le API:
    gcloud services enable cloudiot.googleapis.com \
       eventarc.googleapis.com \
       run.googleapis.com
    
  13. 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
    
  14. 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.
  15. 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
  16. 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.

  1. 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.

  2. Al messaggio Allow unauthenticated invocations?, digita y.

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.

  1. 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 nome test-registry-*.

  2. 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.

  1. Crea un registro Cloud IoT:

    gcloud iot registries create test-registry-iot-events \
       --region=$REGION
    
  2. 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:

  1. In Google Cloud Console, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina risorse del tutorial

  1. 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.

  2. 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

  3. Elimina le altre risorse Google Cloud create in questo tutorial:

    • Elimina il trigger Eventarc:

      gcloud eventarc triggers delete TRIGGER_NAME
      
      Sostituisci TRIGGER_NAME con il nome del trigger.

    • Elimina il registro Cloud IoT:

      gcloud iot registries delete test-registry-iot-events \
         --region=$REGION
      

Passaggi successivi