Beam を使用し、Google Cloud Pub/Sub にデータを送信します。
Beam を使用することで、デバイスに Google Cloud の認証情報 (サービスアカウントキー) や Google Cloud SDK をインストールする必要がなくなります。デバイスでは、以下のように Beam のエントリポイントを指定してデータを送信するだけで、Google Cloud Pub/Sub にデータが送信されます。
データ (Hello Google Cloud Pub/Sub!
) を送信する例:
$ curl -v -X POST http://beam.soracom.io:8888/ \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"data": "SGVsbG8gR29vZ2xlIENsb3VkIFB1Yi9TdWIh"
}
]
}'
data
には、送信するデータを Base64 エンコードしたデータを指定します。上記のコマンド例の SGVsbG8gR29vZ2xlIENsb3VkIFB1Yi9TdWIh
は、Hello Google Cloud Pub/Sub!
を Base64 エンコードしたデータです。
ステップ 1: Google Cloud Pub/Sub を設定する
プロジェクトを作成する
プロジェクトを作成して、Google Cloud Pub/Sub API を有効化します。
Google Cloud Console にアクセスして、 をクリックします。
を入力して、 をクリックします。
続けて、作成したプロジェクトで Pub/Sub API を有効化します。
(ナビゲーションメニュー) →
の順にクリックします。作成したプロジェクトを選択して、
をクリックします。に「Cloud Pub/Sub API」と入力して、Enter キーを押します。
をクリックします。
をクリックします。
トピックと Pub/Sub サブスクリプションを作成する
Google Cloud Pub/Sub のトピックと、Pub/Sub サブスクリプションを作成します。
(ナビゲーションメニュー) →
の順にクリックします。をクリックします。
→ の順にクリックします。
に「MyTopic」と入力して、 をクリックします。
にチェックを入れると、トピックを作成したときに Pub/Sub サブスクリプションも作成されます。このときに作成される Pub/Sub サブスクリプションの名前は、トピック ID に-sub
を追加したものです (例:MyTopic-sub
)。
メッセージをパブリッシュしてサブスクライブする
メッセージをパブリッシュできることと、サブスクライブできることを確認します。
→ 作成したトピックの順にクリックします。
をコピーし、 をクリックし、 で、作成した Cloud Pub/Sub サブスクリプションを選択して、 をクリックします。
は、これ以降、${topic_name} と表記します。例:projects/long-stack-371107/topics/MyTopic
に「Hello world from Pub/Sub!!」と入力して、 をクリックします。
メッセージがパブリッシュされます。続けて、Cloud Shell を使って、パブリッシュされたメッセージを確認します。
(Cloud Shell をアクティブにする) をクリックします。
Cloud Shell が表示されます。
以下のコマンドを入力して、Enter キーを押します。
$ gcloud auth login
Cloud Shell に確認メッセージが表示されたら「N」を入力して、Enter キーを押します。
以下のコマンドを入力して、Enter キーを押します。
MyTopic-sub
は、トピックと Pub/Sub サブスクリプションを作成する で作成した Pub/Sub サブスクリプションの名前です。$ gcloud pubsub subscriptions pull MyTopic-sub
「Cloud Shell の承認」画面が表示されたら、
をクリックします。メッセージが正しくパブリッシュされている場合は、以下のように表示されます。
DATA: Hello world from Pub/Sub!! MESSAGE_ID: 6535341101596617 ORDERING_KEY: ATTRIBUTES: DELIVERY_ATTEMPT: ACK_ID: RVNEUAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRcDCBQFfH1xU151WlQaB1ENGXJ8aXE8XBcBARMBKFVbEQ16bVxtrunxtURfQXNvWRYCBkRSfl5eEgtuXVtdhezZma6lnE5wYSuourn_SH-SgNxwZiA9XxJLLD5-MSpFQV5AEkw6H0RJUytDCypYEU4EISE-MD4
「Listed 0 items.」と表示されたときは
手順 7 のコマンドを、もう一度実行してください。
ステップ 2: Beam で使用するサービスアカウントを作成する
Beam で使用するサービスアカウントを作成します。ここでは、Pub/Sub のパブリッシュ権限のみを割り当てます。
(ナビゲーションメニュー) →
の順にクリックします。→ の順にクリックします。
に任意のサービスアカウント名 (例:soracom-beam
) を入力して、 をクリックします。は、自動的に設定されます。変更する必要はありません。
で「Pub/Sub パブリッシャー」を選択して、 → の順にクリックします。
サービスアカウントが作成されます。続けて、サービスアカウントキーを作成します。
作成したサービスアカウントのメールアドレスを確認して、
→ の順にクリックします。サービスアカウントのメールアドレスは、これ以降、${service_account_mail_address} と表記します。例:
soracom-beam@long-stack-371107.iam.gserviceaccount.com
→ の順にクリックします。
→ の順にクリックします。
JSON ファイルがダウンロードされます。この JSON ファイルの内容は、SORACOM ユーザーコンソールに登録します。紛失しないでください。
をクリックします。
ステップ 3: SORACOM Beam を設定する
IoT SIM を利用するデバイスから、Beam を使って Google Cloud Pub/Sub にデータをパブリッシュするための設定を行います。
認証情報ストアに Google Service Account (JSON) を登録する
ステップ 2 でダウンロードした JSON ファイルに記載された JSON を、SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。
認証情報は、以下のように登録します。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: google-service-account | |
「Google Service Account (JSON)」を選択します。 | |
ステップ 2: Beam で使用するサービスアカウントを作成する でダウンロードした JSON ファイルの内容を入力します。 |
Beam の HTTP エントリポイントを設定する
Beam の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
→ の順にクリックします。
「SORACOM Beam - HTTP 設定」画面が表示されます。
以下のように設定します。
項目 説明 任意の設定名 (例: Google Cloud Pub/Sub
) を入力します。→ /
を入力します。→ 「HTTPS」を選択します。 → pubsub.googleapis.com
を入力します。→ 空欄のままにします。 → v1/
に続けて、${topic_name} を入力し、さらに:publish
を入力します (例:v1/projects/long-stack-371107/topics/MyTopic:publish
)。→ オンにして、以下のように設定します。
: 「Bearer JWT」を選択します。
認証情報ストアに Google Service Account (JSON) を登録する で作成した Google Service Account (JSON) の認証情報を選択します。
:: 署名アルゴリズムを選択します。
: JSON Web Token の生成に使う情報を、JSON 形式で入力します。
iss
: ${service_account_mail_address} を指定します。sub
: ${service_account_mail_address} を指定します。aud
:https://pubsub.googleapis.com/google.pubsub.v1.Publisher
を入力します。
例:
{ "iss": "soracom-beam@long-stack-371107.iam.gserviceaccount.com", "sub": "soracom-beam@long-stack-371107.iam.gserviceaccount.com", "aud": "https://pubsub.googleapis.com/google.pubsub.v1.Publisher" }
iat
およびexp
は、デバイスが Beam にアクセスしたときに、自動的に生成されます。
HTTP エントリポイントの設定値の意味は、HTTP エントリポイント を参照してください。
をクリックします。
IoT SIM の Beam の設定が完了しました。
転送先のパス、および scope
について詳しくは、Google Cloud Pub/Sub の「Method: projects.topics.publish」を参照してください。
ここでは、HTTP エントリポイントを利用しましたが、Web サイトエントリポイント でも を利用できます。
ステップ 4: HTTP エントリポイントを使用して Google Cloud Pub/Sub にデータを送信する
Beam の HTTP エントリポイントを使用して、Google Cloud Pub/Sub にデータを送信します。
IoT SIM を利用するデバイスで、以下のコマンドを実行します。
コマンド例:
$ curl -v -X POST http://beam.soracom.io:8888/ \ -H "Content-Type: application/json" \ -d '{ "messages": [ { "data": "SGVsbG8gR29vZ2xlIENsb3VkIFB1Yi9TdWIh" } ] }'
リクエストボディについて詳しくは、Google Cloud Pub/Sub の「Method: projects.topics.publish」を参照してください。
たとえば、
data
には、送信するデータを Base64 エンコードしたデータを指定します。上記のコマンド例のSGVsbG8gR29vZ2xlIENsb3VkIFB1Yi9TdWIh
は、Hello Google Cloud Pub/Sub!
を Base64 エンコードしたデータです。続けて、Google Cloud Console で、パブリッシュしたデータを確認します。
Google Cloud Console にアクセスし、 (ナビゲーションメニュー) → の順にクリックします。
をクリックします。
作成したプロジェクトを選択して、
→ 作成したトピックの順にクリックします。をクリックし、 で Pub/Sub サブスクリプションを選択して、 をクリックします。
パブリッシュしたデータが、以下のように表示されます。
Cloud Shell でも確認できます
Cloud Shell で以下のコマンドを実行しても、パブリッシュしたデータを確認できます。MyTopic-sub
は、トピックと Pub/Sub サブスクリプションを作成する で作成した Pub/Sub サブスクリプションの名前です。
$ while [ 1 ] ; do gcloud pubsub subscriptions pull --auto-ack MyTopic-sub ; sleep 1 ; done
Listed 0 items.
Listed 0 items.
Listed 0 items.
Listed 0 items.
DATA: Hello Google Cloud Pub/Sub!
MESSAGE_ID: 6528460184608992
ORDERING_KEY:
ATTRIBUTES:
DELIVERY_ATTEMPT:
Listed 0 items.
Listed 0 items.
メッセージを確認できない場合
Beam のエントリポイントでエラーが発生した場合は、SORACOM にエラーログが記録されます。エラーログを確認する方法について詳しくは、エラーログを確認する を参照してください。