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 registry e dei dispositivi Cloud IoT (creazione, eliminazione e aggiornamenti dei metadati). Per maggiori dettagli, consulta la sezione Eventi supportati.

I payload degli eventi sono codificati in JSON e gli schemi degli 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 instrada 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 tal caso, potresti non essere in grado di completare attività come la creazione di indirizzi IP pubblici o le chiavi degli account di servizio. Se effettui una richiesta che restituisce un errore relativo ai vincoli, scopri come sviluppare applicazioni in un ambiente Google Cloud vincolato.

  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 e inizializza Google Cloud CLI.
  3. 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
  4. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  5. Installa e inizializza Google Cloud CLI.
  6. 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
  7. Assicurati che la fatturazione sia attivata per il tuo progetto Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.

  8. Aggiorna i componenti di gcloud:
    gcloud components update
    
  9. Accedi con il tuo account:
    gcloud auth login
    
  10. Abilita le API:
    gcloud services enable cloudiot.googleapis.com \
       eventarc.googleapis.com \
       run.googleapis.com
    
  11. 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
    
  12. 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 per l'utilizzo. Se provi a utilizzare un account di servizio subito dopo averlo creato e ricevi un messaggio di errore, attendi almeno 60 secondi e riprova.
  13. Conferma 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
  14. 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 la sezione Deployment di immagini container.

  2. Nel 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 filtri in base a un nome di registro o di 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 deve 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. Visualizzare 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 li vedi subito, 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 mantenerlo senza le modifiche aggiunte 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 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 Google Cloud Console.

  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 tuo trigger.

    • Elimina il registro Cloud IoT:

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

Passaggi successivi