このチュートリアルでは、Eventarc を使用して、未認証の Cloud Run サービスで Cloud IoT から直接イベントを受信する方法について説明します。
Cloud IoT は、IoT デバイスに安全に接続し、データの管理と取り込みを行います。特定の Cloud IoT レジストリやデバイス イベント(作成、削除、メタデータの更新)をフィルタリングする Eventarc トリガーを作成できます。詳細については、サポートされているイベントをご覧ください。
イベント ペイロードは JSON でエンコードされます。イベント スキーマは CloudEvents リポジトリで確認できます。
詳細については、IoT Core の概要とレジストリとデバイスの作成をご覧ください。
目標
このチュートリアルの内容は次のとおりです。
イベント レシーバ サービスを Cloud Run にデプロイする。
レジストリ作成イベントを Cloud Run サービスに転送する Eventarc トリガーを作成する。
Cloud IoT レジストリを作成して、イベントを生成する。
Cloud Run のログでイベントを確認する。
費用
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
組織が Google Cloud 環境に制約を適用すると、このドキュメントの一部の手順が正しく機能しない場合があります。その場合、パブリック IP アドレスやサービス アカウント キーを作成するようなタスクを完了できない場合があります。制約に関するエラーを返すリクエストを行う場合は、制約がある Google Cloud 環境でアプリケーションを開発する方法をご覧ください。
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
-
作成した Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
- Google Cloud CLI をインストールします。
-
gcloud CLI を初期化するには:
gcloud init
-
Google Cloud プロジェクトを作成または選択します。
-
Cloud プロジェクトを作成します。
gcloud projects create PROJECT_ID
-
作成した Cloud プロジェクトを選択します。
gcloud config set project PROJECT_ID
-
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
gcloud
コンポーネントを更新します。gcloud components update
- 自分のアカウントでログインします。
gcloud auth login
- API を有効にします。
gcloud services enable cloudiot.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com
- このチュートリアルで使用する構成変数を設定します。
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
- Eventarc トリガーのサービス アカウントを作成します。
SA_NAME=cloudiot-events-sa gcloud iam service-accounts create $SA_NAME \ --display-name="Cloud IoT events service account"
サービス アカウントを作成した後、サービス アカウントを使用できるようになるまで最大で 7 分かかることがあります。サービス アカウントを作成した直後に使用しようとしてエラーが表示された場合は、60 秒以上待ってからもう一度お試しください。 cloudiot-events-sa
サービス アカウントが作成されていることを確認します。gcloud iam service-accounts list
出力例を以下に示します。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
- サービス アカウントに
eventarc.eventReceiver
ロールを付与します。gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$SA_NAME@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/eventarc.eventReceiver"
Cloud Run にイベント レシーバをデプロイする
ビルド済みのイメージ gcr.io/cloudrun/hello
を使用して、イベントを受信してログに記録する Cloud Run サービスをデプロイします。
コンテナ イメージをデプロイします。
SERVICE_NAME=hello-iot-service gcloud run deploy $SERVICE_NAME \ --image=gcr.io/cloudrun/hello \ --allow-unauthenticated
詳細については、コンテナ イメージのデプロイをご覧ください。
Allow unauthenticated invocations?
プロンプトで、「y
」と入力します。
Cloud Run サービスの URL が表示されたら、デプロイは完了しています。
Eventarc トリガーを作成する
Cloud IoT レジストリが作成されると、Eventarc トリガーによってイベントが Cloud Run サービスに転送されます。
レジストリ作成イベントをリッスンするトリガーを作成します。
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
レジストリまたはデバイスのリソース名でフィルタリングする場合は、パスパターンを適用できます。
上記のコマンドにより、
iot-events-trigger
という名前のトリガーが作成されます。このトリガーは、test-registry-*
という名前の Cloud IoT レジストリが作成されると呼び出されます。トリガーが正常に作成されたことを確認します。
gcloud eventarc triggers list --location=us-central1
返されたトリガーのステータスは
ACTIVE: Yes
になります。
イベントを生成して表示する
Cloud IoT レジストリを作成してイベントを生成し、Cloud Run サービスをトリガーします。Cloud Run サービスは、メッセージをサービスログに記録します。
Cloud IoT レジストリを作成します。
gcloud iot registries create test-registry-iot-events \ --region=$REGION
Cloud Run サービスによって作成されたイベント関連のログエントリを表示します。
gcloud logging read "resource.type=cloud_run_revision AND \ resource.labels.service_name=$SERVICE_NAME" --limit 5
ログエントリは次のようになります。
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"}}}' [...]
ログが表示されるまで少し時間がかかることがあります。すぐに表示されない場合は、1 分後に再度確認してください。
クリーンアップ
このチュートリアル用に新規プロジェクトを作成した場合は、そのプロジェクトを削除します。既存のプロジェクトを使用し、このチュートリアルで変更を加えずに残す場合は、チュートリアル用に作成したリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Google Cloud コンソールで、[リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
チュートリアル リソースの削除
このチュートリアルでデプロイした Cloud Run サービスを削除します。
gcloud run services delete SERVICE_NAME
SERVICE_NAME
は、選択したサービス名です。Cloud Run サービスは Google Cloud コンソールから削除することもできます。
チュートリアルの設定時に追加した gcloud CLI のデフォルト構成を削除します。
例:
gcloud config unset run/region
または
gcloud config unset project
このチュートリアルで作成した他の Google Cloud リソースを削除します。
Eventarc トリガーを削除します。
gcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
は実際のトリガー名に置き換えます。Cloud IoT レジストリを削除します。
gcloud iot registries delete test-registry-iot-events \ --region=$REGION