Soracom

Users

ドキュメント
Home ドキュメント SORACOM Beam Google Cloud に送信する

Google Cloud Pub/Sub にデータを送信する

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 を有効化します。

  1. Google Cloud Console にアクセスして、[+プロジェクトを作成] をクリックします。

  2. [プロジェクト名] を入力して、[作成] をクリックします。

    続けて、作成したプロジェクトで Pub/Sub API を有効化します。

  3. (ナビゲーションメニュー) → [API とサービス] の順にクリックします。

  4. 作成したプロジェクトを選択して、[+API とサービスの有効化] をクリックします。

  5. [API とサービスを検索] に「Cloud Pub/Sub API」と入力して、Enter キーを押します。

  6. [Cloud Pub/Sub API] をクリックします。

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

トピックと Pub/Sub サブスクリプションを作成する

Google Cloud Pub/Sub のトピックと、Pub/Sub サブスクリプションを作成します。

  1. (ナビゲーションメニュー) → [その他のプロダクト] の順にクリックします。

  2. [Pub/Sub] をクリックします。

  3. [トピック][+トピックを作成] の順にクリックします。

  4. [トピック ID] に「MyTopic」と入力して、[トピックを作成] をクリックします。

    [デフォルトのサブスクリプションを追加する] にチェックを入れると、トピックを作成したときに Pub/Sub サブスクリプションも作成されます。このときに作成される Pub/Sub サブスクリプションの名前は、トピック ID に -sub を追加したものです (例: MyTopic-sub)。

メッセージをパブリッシュしてサブスクライブする

メッセージをパブリッシュできることと、サブスクライブできることを確認します。

  1. [トピック] → 作成したトピックの順にクリックします。

  2. [トピックの名前] をコピーし、[メッセージ] をクリックし、[メッセージの pull 元の Cloud Pub/Sub サブスクリプションの選択] で、作成した Cloud Pub/Sub サブスクリプションを選択して、[メッセージをパブリッシュ] をクリックします。

    [トピックの名前] は、これ以降、${topic_name} と表記します。例: projects/long-stack-371107/topics/MyTopic

  3. [メッセージ] に「Hello world from Pub/Sub!!」と入力して、[公開] をクリックします。

    メッセージがパブリッシュされます。続けて、Cloud Shell を使って、パブリッシュされたメッセージを確認します。

  4. [] (Cloud Shell をアクティブにする) をクリックします。

    Cloud Shell が表示されます。

  5. 以下のコマンドを入力して、Enter キーを押します。

    $ gcloud auth login
    
  6. Cloud Shell に確認メッセージが表示されたら「N」を入力して、Enter キーを押します。

  7. 以下のコマンドを入力して、Enter キーを押します。

    MyTopic-sub は、トピックと Pub/Sub サブスクリプションを作成する で作成した Pub/Sub サブスクリプションの名前です。

    $ gcloud pubsub subscriptions pull MyTopic-sub
    
  8. 「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 のパブリッシュ権限のみを割り当てます。

  1. (ナビゲーションメニュー) → [IAM と管理] の順にクリックします。

  2. [サービスアカウント][+サービスアカウントを作成] の順にクリックします。

  3. [サービスアカウント名] に任意のサービスアカウント名 (例: soracom-beam) を入力して、[作成して続行] をクリックします。

    [サービスアカウント ID] は、自動的に設定されます。変更する必要はありません。

  4. [ロールを選択] で「Pub/Sub パブリッシャー」を選択して、[続行][完了] の順にクリックします。

    サービスアカウントが作成されます。続けて、サービスアカウントキーを作成します。

  5. 作成したサービスアカウントのメールアドレスを確認して、[][鍵を管理] の順にクリックします。

    サービスアカウントのメールアドレスは、これ以降、${service_account_mail_address} と表記します。例: soracom-beam@long-stack-371107.iam.gserviceaccount.com

  6. [鍵を追加][新しい鍵を作成] の順にクリックします。

  7. [JSON][作成] の順にクリックします。

    JSON ファイルがダウンロードされます。この JSON ファイルの内容は、SORACOM ユーザーコンソールに登録します。紛失しないでください。

  8. [閉じる] をクリックします。

ステップ 3: SORACOM Beam を設定する

IoT SIM を利用するデバイスから、Beam を使って Google Cloud Pub/Sub にデータをパブリッシュするための設定を行います。

認証情報ストアに Google Service Account (JSON) を登録する

ステップ 2 でダウンロードした JSON ファイルに記載された JSON を、ユーザーコンソールの認証情報ストアに登録します。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。

認証情報は、以下のように登録します。

項目説明
[認証情報 ID]認証情報を識別するために任意の名前を入力します。例: google-service-account
[種別]「Google Service Account (JSON)」を選択します。
[CREDENTIALS]ステップ 2: Beam で使用するサービスアカウントを作成する でダウンロードした JSON ファイルの内容を入力します。

Beam の HTTP エントリポイントを設定する

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

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

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

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

  2. [+設定を追加する][HTTP エントリポイント] の順にクリックします。

    SORACOM Beam - HTTP 設定画面が表示されます。

  3. 以下のように設定します。

    項目説明
    [設定名]任意の設定名 (例: Google Cloud Pub/Sub) を入力します。
    [エントリポイント][パス]/ を入力します。
    [転送先][プロトコル]「HTTPS」を選択します。
    [転送先][ホスト名]pubsub.googleapis.com を入力します。
    [転送先][ポート番号]空欄のままにします。
    [転送先][パス]v1/ に続けて、${topic_name} を入力し、さらに :publish を入力します (例: v1/projects/long-stack-371107/topics/MyTopic:publish)。
    [ヘッダ操作][AUTHORIZATION ヘッダ]

    オンにして、以下のように設定します。

    • [タイプ]: 「Bearer JWT」を選択します。

    • [認証情報 ID]: 認証情報ストアに Google Service Account (JSON) を登録する で作成した Google Service Account (JSON) の認証情報を選択します。

    • [署名アルゴリズム]: 署名アルゴリズムを選択します。

    • [JWT CLAIMS]: 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 エントリポイント
    HTTP エントリポイント HTTP エントリポイント

    HTTP エントリポイントの設定値の意味は、HTTP エントリポイント を参照してください。

  4. [保存] をクリックします。

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

    IoT SIM の Beam の設定が完了しました。

転送先のパス、および [JWT CLAIMS]scope について詳しくは、Google Cloud Pub/Sub の「Method: projects.topics.publish」を参照してください。

ここでは、HTTP エントリポイントを利用しましたが、Web サイトエントリポイント でも [AUTHORIZATION ヘッダ] を利用できます。

ステップ 4: HTTP エントリポイントを使用して Google Cloud Pub/Sub にデータを送信する

Beam の HTTP エントリポイントを使用して、Google Cloud Pub/Sub にデータを送信します。

  1. 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 で、パブリッシュしたデータを確認します。

  2. Google Cloud Console にアクセスし、 (ナビゲーションメニュー) → [その他のプロダクト] の順にクリックします。

  3. [Pub/Sub] をクリックします。

  4. 作成したプロジェクトを選択して、[トピック] → 作成したトピックの順にクリックします。

  5. [メッセージ] をクリックし、[メッセージの pull 元の Cloud Pub/Sub サブスクリプションの選択] で Pub/Sub サブスクリプションを選択して、[PULL] をクリックします。

    パブリッシュしたデータが、以下のように表示されます。

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 にエラーログが記録されます。エラーログを確認する方法について詳しくは、エラーログを確認する を参照してください。