Funnel の Google Cloud Pub/Sub アダプターを使用し、Google Cloud にデータを送信します。
Funnel を使用すれば、デバイスに Google Cloud の認証情報や SDK をインストールする必要がありません。Google Cloud のクレデンシャル情報と転送先 URL を指定するだけで、デバイスからデータを送信できます。
ステップ 1: Google Cloud Pub/Sub を設定する
プロジェクトの作成と設定
Google Developers Console を開き、既存のプロジェクトを選択、または新規作成します。(ここでは新規に作成します。)
作成したプロジェクトで、Pub/Sub API を有効化します。(すでに有効になっている場合は、「トピックとサブスクリプションの作成」に進んでください。) 「API を有効にする」をクリックします。
「Google Cloud Pub/Sub API」を選択します。
「有効にする」をクリックします。
トピックとサブスクリプションの作成
次に Pub/Sub のメニューからトピックとサブスクリプションを作成します。左のメニューから「Pub/Sub」から「トピック」を選択します。
トピックを作成します。ここでは MyTopic
としています。
次に作成したトピックにサブスクリプションを追加します。作成したトピックから「サブスクリプションを作成」をクリックします。
サブスクリプションを追加します。ここでは MySub
とします。その他の設定項目はそのままに [CREATE] をクリックします。
メッセージのパブリッシュとサブスクライブ
ここまでの設定で、正しくサブスクライブできることを確認します。
「トピックの名前」をクリックした後、「メッセージをパブリッシュ」をクリックします。その後表示されたフォームにメッセージ (例: Hello world!!
) を入力して、「公開」をクリックします。
Cloud Shell を立ち上げ、以下のコマンドを実行します。
$ gcloud pubsub subscriptions pull MySub
以下のように、メッセージをうけとれれば正しく設定できています。
Cloud Shell は閉じてしまって構いません。
Funnel で使用するアカウントを作成する
Funnel に設定する認証情報を作成します。 ここでは、Pub/Sub のパブリッシュ権限のみを割り当てます。
「IAM と管理」から「サービスアカウント」を選択します。
「認証情報を作成」>「サービス アカウント」とクリックしていきます。
ここではサービスアカウント名を soracom-funnel
としました。(サービスアカウント ID は自動的に設定されます。)
また、ロールでは Pub/Sub パブリッシャー を選択します。
「キーを作成」をクリックし、キーのタイプを JSON として「作成」をクリックします。このときダウンロードした JSON ファイルは紛失しないようにしてください。 戻ってきたら「完了」をクリックします。
以上で、Pub/Sub の設定は完了です。
ステップ 2: Funnel を設定する
Funnel の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「ON」にします。
転送先サービスには「Google Cloud Pub/Sub」を指定し、転送先トピックは作成したトピック (ここでは「MyTopic」) を入力します。
認証情報は、右側の「+」をクリックして追加します。
認証情報の登録画面が表示されます。 認証情報 ID は任意に、種別は「Google Service Account (JSON)」を指定します。
Credentials では、「Funnel で使用するアカウントを作成する」でダウンロードした JSON ファイルの内容をコピー&ペーストします。
保存します。
をクリックします。
IoT SIM の Funnel の設定が完了しました。
ステップ 3: Funnel を使用して Pub/Sub にデータを送信する
いよいよ、Funnel を使用して、Pub/Sub にデータを送信します。
Cloud Shell を立ち上げ、以下のコマンド入力します。
$ while [ 1 ] ; do gcloud pubsub subscriptions pull --auto-ack MySub ; sleep 1 ; done
Listed 0 items.
と表示されるようになったら、SORACOM Air を使用したデバイス (例として Raspberry Pi + USB ドングル型モデムを想定します) から Publish し、Cloud Shell の Subscriber で受信します。
Raspberry Pi から以下のコマンドを実行し、HTTP リクエストを投げます。
$ curl -v -H content-type:application/json -d "{\"message\":\"Hello PubSub!\"}" funnel.soracom.io
* About to connect() to funnel.soracom.io port 80 (#0)
* Trying 100.127.65.43...
* connected
* Connected to funnel.soracom.io (100.127.65.43) port 80 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.26.0
> Host: funnel.soracom.io
> Accept: */*
> content-type:application/json
> Content-Length: 27
>
* upload completely sent off: 27 out of 27 bytes
* additional stuff not fine transfer.c:1037: 0 0
* HTTP 1.1 or later with persistent connection, pipelining supported
< HTTP/1.1 204 No Content
< Date: Mon, 19 Jun 2017 09:23:39 GMT
< Connection: keep-alive
<
* Connection #0 to host funnel.soracom.io left intact
* Closing connection #0
PC で以下のように Publish したデータを確認できることを確認してください。
$ while [ 1 ] ; do gcloud pubsub subscriptions pull --auto-ack MySub ; sleep 1 ; done
Listed 0 items.
Listed 0 items.
Listed 0 items.
Listed 0 items.
┌──────────────────────────────┬─────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ DATA │ MESSAGE_ID │ ATTRIBUTES │
├──────────────────────────────┼─────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ {"message": "Hello PubSub!"} │ 130810319498202 │ credentialsId=GooglePubSub destination={"resourceUrl": "MyTopic", "service": "pubsub", "provider": "google"} imei=35316xxxxxxxxxx imsi=44010xxxxxxxxxx operatorId=OP00xxxxxxxx sourceProtocol=http timestamp=1497864219334 │
└──────────────────────────────┴─────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Listed 0 items.
Listed 0 items.
サブスクライブできない (データを確認できない) 場合は、Pub/Sub を設定する の設定、および Funnel で指定したサービスアカウントにパブリッシャー権限があることを確認してください。 また、エラーがあった場合は、ユーザーコンソールで対象の IoT SIM を選択し「ログを確認」からエラー内容を確認できます。
Funnel を使用することで、デバイスに Google Cloud の認証情報や SDK をインストールすることなく、Google Cloud にデータを送信できました。
ここでは、デバイスは HTTP でパブリッシュしましたが、Funnel は TCP、UDP にも対応しています。Google Cloud のクレデンシャル情報と転送先 URL (ここでは、Pub/Sub) を Funnel で指定するだけで、デバイスからはシンプルなプロトコルを使用して、Google Cloud にデータを送信できます。