デバイスから Funnel の Google Cloud Pub/Sub アダプターを使用し、Google Cloud Pub/Sub にデータを送信します。
Funnel を使用すれば、デバイスに Google Cloud の認証情報や SDK をインストールする必要がありません。Google Cloud のクレデンシャル情報と転送先 URL を指定するだけで、デバイスからデータを送信できます。
ステップ 1: Google Cloud Pub/Sub を設定する
プロジェクトの作成と設定
Google Developers Console を開き、既存のプロジェクトを選択、または新規作成します。(ここでは新規に作成します。)
新しいプロジェクトにプロジェクト名などを入力して
をクリックします。
作成したプロジェクトで、Pub/Sub API を有効化します。(すでに有効になっている場合は、「トピックとサブスクリプションの作成」に進んでください)
をクリックします。
「Google Cloud Pub/Sub API」を検索します。
をクリックします。
トピックとサブスクリプションの作成
次に Pub/Sub のメニューでトピックとサブスクリプションを作成します。Google Cloud Pub/Sub の画面へ移動します。
メニューで
を選択します。
トピック ID を入力します (ここでは MyTopic
としています)。 にチェックを入れます。最後に、 をクリックします。
前の手順で
にチェックを入れると、トピックの作成と同時にサブスクリプションが作成されます。もしサブスクリプションを追加する場合は
をクリックします。ここではその手順を省略します。
メッセージのパブリッシュとサブスクライブ
ここまでの設定で、正しくサブスクライブできることを確認します。
のタブをクリックし、「ステップ 1」を実施します。
Hello world!!
) を入力して、 をクリックします。
次に「ステップ 2」を実施します。
pull 元の Cloud Pub/Sub サブスクリプションに、作成したサブスクリプションを選択し、
をクリックします。
すると、画面下部の表にパブリッシュしたメッセージが表示されます。
Cloud Shell でもメッセージのサブスクライブができます
Cloud Shell を立ち上げ、以下のコマンドを実行します。
$ gcloud pubsub subscriptions pull MyTopic-sub
以下のように、メッセージを受け取れれば正しく設定できています。
Funnel で使用するアカウントを作成する
Funnel に設定する認証情報を作成します。 ここでは、Pub/Sub のパブリッシュ権限のみを割り当てます。
「IAM と管理」から「サービスアカウント」を選択します。
をクリックします。
(1) サービスアカウントの詳細を設定します。「サービスアカウント名」(ここでは soracom-funnel
としました) と「サービスアカウントの説明」を入力します。サービスアカウント ID は自動的に設定されます。 をクリックします。
(2) このサービスアカウントにロールを設定し、プロジェクトへのアクセスを許可します。「Pub/Sub」から「Pub/Sub パブリッシャー」のロール選択します。
をクリックします。
(3) ユーザーにこのサービスアカウントへのアクセス許可を設定します。ここでは何も入力せずに
をクリックします。
次に、作成したサービスアカウントに鍵を追加します。
作成したサービスアカウントをクリックします。
のタブをクリックし、 → をクリックします。
キーのタイプに「JSON」を選び
をクリックします。このときダウンロードした JSON ファイルは紛失しないようにしてください。
以上で、Pub/Sub の設定は完了です。
ステップ 2: Funnel を設定する
Funnel の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「ON」にします。
転送先サービスには「Google Cloud Pub/Sub」を指定し、転送先トピックは作成したトピック (ここでは
MyTopic
) を入力します。認証情報は、右側の
をクリックして追加します。認証情報の登録画面が表示されます。次のように設定します。
- は任意の名前を指定します。
- は「Google Service Account (JSON)」を指定します。
- Funnel で使用するアカウントを作成する でダウンロードした JSON ファイルの内容をコピー&ペーストします。 では、
をクリックして認証情報を登録します。
登録した認証情報が Funnel の設定の
にセットされていることを確認して、 をクリックします。IoT SIM の Funnel の設定が完了しました。
ステップ 3: Funnel を使用して Pub/Sub にデータを送信する
いよいよ、Funnel を使用して、Pub/Sub にデータを送信します。
SORACOM Air を使用したデバイス (例として Raspberry Pi + USB ドングル型モデムを想定します) から Unified Endpoint を利用して Funnel にデータを送信します。ここでは Funnel のみが設定されたグループで、Unified Endpoint にリクエストします。
$ curl -v -H content-type:application/json -d '{"message": "Hello PubSub!"}' uni.soracom.io
* Host uni.soracom.io:80 was resolved.
* IPv6: (none)
* IPv4: 100.127.69.42
* Trying 100.127.69.42:80...
* Connected to uni.soracom.io (100.127.69.42) port 80
> POST / HTTP/1.1
> Host: uni.soracom.io
> User-Agent: curl/8.7.1
> Accept: */*
> content-type:application/json
> Content-Length: 28
>
* upload completely sent off: 28 bytes
< HTTP/1.1 204 No Content
< Date: Thu, 28 Nov 2024 05:23:55 GMT
< Connection: close
<
* Closing connection
上記のように、レスポンスとして HTTP/1.1 204 No Content
が返ってくれば、データ送信に成功しています。
他の HTTP レスポンスコードが返ってきた場合には、レスポンスコードを元に、送信データの形式などを確認してください。
Unified Endpoint からのレスポンスは条件によって変わります
Unified Endpoint のレスポンス形式を設定で変更できます。詳しくは Unified Endpoint の レスポンスの形式を設定する を参照してください。
たとえば、レスポンスフォーマットを「Auto (デフォルト)」にして、Unified Endpoint に HTTP でデータを送信し、Funnel と Harvest Data の 2 つに転送された場合、どちらのデータ送信も成功したときのレスポンスは、次のとおりです。
* Host uni.soracom.io:80 was resolved.
* IPv6: (none)
* IPv4: 100.127.69.42
* Trying 100.127.69.42:80...
* Connected to uni.soracom.io (100.127.69.42) port 80
> POST / HTTP/1.1
> Host: uni.soracom.io
> User-Agent: curl/8.7.1
> Accept: */*
> content-type:application/json
> Content-Length: 28
>
* upload completely sent off: 28 bytes
< HTTP/1.1 200 OK
< content-type: application/json
< Date: Thu, 28 Nov 2024 05:33:57 GMT
< Connection: close
< Content-Length: 97
<
* Closing connection
{"result":"ok","detail":{"SoracomFunnel":{"statusCode":204},"SoracomHarvest":{"statusCode":201}}}%
- リクエスト成功時のレスポンスのステータスコードは
HTTP/1.1 200 OK
です - レスポンスボディに、各サービス (ここでは Funnel と Harvest Data) それぞれへのリクエストの成否が JSON で返されます
送信されたデータを Google Cloud Pub/Sub 側で正しく受信できたことを確認します。データを送信した Cloud Pub/Sub のトピックを開き、
タブをクリックします。トピックを購読するサブスクリプションを選び、画面の をクリックすると、Funnel から送信されたデータが表示されます。
Cloud Shell でもメッセージのサブスクライブができます
Cloud Shell を立ち上げ、以下のコマンドを実行します。
$ while [ 1 ] ; do gcloud pubsub subscriptions pull --auto-ack MyTopic-sub ; sleep 1 ; done
Listed 0 items.
と表示されるようになったら、Unified Endpoint を利用して、Funnel にデータを送信します。Google Cloud Pub/Sub で正しくメッセージが受信されると、Cloud Shell で次のように確認できます。
$ while [ 1 ] ; do gcloud pubsub subscriptions pull --auto-ack MySub ; sleep 1 ; done
Listed 0 items.
Listed 0 items.
DATA: {"message": "Hello PubSub!"}
MESSAGE_ID: 13084458736322966
ORDERING_KEY:
ATTRIBUTES: credentialsId=Funnel-to-pubsub-doc-writing
destination={"provider": "google", "service": "pubsub", "resourceUrl": "MyTopic", "payloadsOnly": false}
imsi=295012345678901
operatorId=OP1234567890
simId=1234567890123456782
sourceProtocol=http
timestamp=1732772940251
DELIVERY_ATTEMPT:
ACK_STATUS: SUCCESS
Listed 0 items.
Listed 0 items.
サブスクライブできない (データを確認できない) 場合は、ステップ 1: Google Cloud Pub/Sub を設定する の設定、および Funnel で使用するアカウントを作成する で作成したサービスアカウントにパブリッシャー権限があることを確認してください。 また、エラーがあった場合は、ユーザーコンソールで対象の IoT SIM を選択し からエラー内容を確認できます。
Funnel を使用することで、デバイスに Google Cloud の認証情報や SDK をインストールすることなく、Google Cloud にデータを送信できました。
ここでは、デバイスは HTTP でパブリッシュしましたが、Funnel は TCP、UDP にも対応しています。Google Cloud のクレデンシャル情報と転送先 URL (ここでは、Pub/Sub) を Funnel で指定するだけで、デバイスからはシンプルなプロトコルを使用して、Google Cloud にデータを送信できます。