Soracom

Users

ドキュメント
Home ドキュメント SORACOM Funnel Getting Started

Google Cloud Pub/Sub アダプターを使用する

デバイスから Funnel の Google Cloud Pub/Sub アダプターを使用し、Google Cloud Pub/Sub にデータを送信します。

Funnel の Cloud Pub/Sub アダプター Funnel の Cloud Pub/Sub アダプター

Funnel を使用すれば、デバイスに Google Cloud の認証情報や SDK をインストールする必要がありません。Google Cloud のクレデンシャル情報と転送先 URL を指定するだけで、デバイスからデータを送信できます。

ステップ 1: Google Cloud Pub/Sub を設定する

プロジェクトの作成と設定

Google Developers Console を開き、既存のプロジェクトを選択、または新規作成します。(ここでは新規に作成します。)

Google Developers Console プロジェクトの新規作成 Google Developers Console プロジェクトの新規作成

新しいプロジェクトにプロジェクト名などを入力して [作成] をクリックします。

Google Developers Console プロジェクトの新規作成 Google Developers Console プロジェクトの新規作成

作成したプロジェクトで、Pub/Sub API を有効化します。(すでに有効になっている場合は、「トピックとサブスクリプションの作成」に進んでください) [API とサービスを有効にする] をクリックします。

Pub/Sub API Pub/Sub API

「Google Cloud Pub/Sub API」を検索します。

Google Cloud Pub/Sub API Google Cloud Pub/Sub API

[有効にする]をクリックします。

Google Cloud Pub/Sub API Google Cloud Pub/Sub API

トピックとサブスクリプションの作成

次に Pub/Sub のメニューでトピックとサブスクリプションを作成します。Google Cloud Pub/Sub の画面へ移動します。

トピックの作成 トピックの作成

メニューで [トピックを作成] を選択します。

トピックの作成 トピックの作成

トピック ID を入力します (ここでは MyTopic としています)。[デフォルトのサブスクリプションを追加する] にチェックを入れます。最後に、[作成] をクリックします。

トピックの作成 トピックの作成

前の手順で [デフォルトのサブスクリプションを追加する] にチェックを入れると、トピックの作成と同時にサブスクリプションが作成されます。

もしサブスクリプションを追加する場合は [サブスクリプションを作成] をクリックします。ここではその手順を省略します。

トピックの作成 トピックの作成

メッセージのパブリッシュとサブスクライブ

ここまでの設定で、正しくサブスクライブできることを確認します。

[メッセージ] のタブをクリックし、「ステップ 1」を実施します。

[メッセージをパブリッシュ] をクリックします。その後表示されたフォームにメッセージ (例: Hello world!!) を入力して、[公開] をクリックします。

メッセージをパブリッシュ メッセージをパブリッシュ

次に「ステップ 2」を実施します。

pull 元の Cloud Pub/Sub サブスクリプションに、作成したサブスクリプションを選択し、[PULL] をクリックします。

メッセージをサブスクライブ メッセージをサブスクライブ

すると、画面下部の表にパブリッシュしたメッセージが表示されます。

メッセージをサブスクライブ メッセージをサブスクライブ

Cloud Shell でもメッセージのサブスクライブができます

Cloud Shell を立ち上げ、以下のコマンドを実行します。

$ gcloud pubsub subscriptions pull MyTopic-sub

以下のように、メッセージを受け取れれば正しく設定できています。

Cloud Shell Cloud Shell

Funnel で使用するアカウントを作成する

Funnel に設定する認証情報を作成します。 ここでは、Pub/Sub のパブリッシュ権限のみを割り当てます。

「IAM と管理」から「サービスアカウント」を選択します。

サービスアカウントの作成 サービスアカウントの作成

[サービスアカウントを作成] をクリックします。

サービスアカウントの作成 サービスアカウントの作成

(1) サービスアカウントの詳細を設定します。「サービスアカウント名」(ここでは soracom-funnel としました) と「サービスアカウントの説明」を入力します。サービスアカウント ID は自動的に設定されます。[作成して続行] をクリックします。

サービスアカウントの作成 サービスアカウントの作成

(2) このサービスアカウントにロールを設定し、プロジェクトへのアクセスを許可します。「Pub/Sub」から「Pub/Sub パブリッシャー」のロール選択します。[続行] をクリックします。

サービスアカウントの作成 サービスアカウントの作成

(3) ユーザーにこのサービスアカウントへのアクセス許可を設定します。ここでは何も入力せずに [完了] をクリックします。

サービスアカウントの作成 サービスアカウントの作成

次に、作成したサービスアカウントに鍵を追加します。

作成したサービスアカウントをクリックします。

サービスアカウントの作成 サービスアカウントの作成

[鍵] のタブをクリックし、[キーを追加][新しい鍵を作成] をクリックします。

サービスアカウントの作成 サービスアカウントの作成

キーのタイプに「JSON」を選び [作成] をクリックします。このときダウンロードした JSON ファイルは紛失しないようにしてください。

サービスアカウントの作成 サービスアカウントの作成

以上で、Pub/Sub の設定は完了です。

ステップ 2: Funnel を設定する

Funnel の設定はグループに対して行います

ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。

  1. SIM グループ画面で [SORACOM Funnel 設定] をクリックします。

    SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。

  2. スイッチをクリックして「ON」にします。

  3. 転送先サービスには「Google Cloud Pub/Sub」を指定し、転送先トピックは作成したトピック (ここでは MyTopic) を入力します。

  4. 認証情報は、右側の [+] をクリックして追加します。

    Funnelの設定 Funnelの設定

    認証情報の登録画面が表示されます。次のように設定します。

    • [認証情報 ID] は任意の名前を指定します。
    • [種別] は「Google Service Account (JSON)」を指定します。
    • [Credentials] では、Funnel で使用するアカウントを作成する でダウンロードした JSON ファイルの内容をコピー&ペーストします。

    [登録] をクリックして認証情報を登録します。

    認証情報の登録 認証情報の登録

  5. 登録した認証情報が Funnel の設定の [認証情報] にセットされていることを確認して、[保存] をクリックします。

    認証情報の登録 認証情報の登録

  6. IoT SIM が所属するグループを切り替えます。

    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 のトピックを開き、[メッセージ] タブをクリックします。トピックを購読するサブスクリプションを選び、画面の [PULL] をクリックすると、Funnel から送信されたデータが表示されます。

Pub/Sub 側受信確認 Pub/Sub 側受信確認

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 にデータを送信できます。