Soracom

Users

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

Amazon Data Firehose アダプターを使用する

Funnel の Amazon Data Firehose アダプターを使用し、デバイスから送信するデータを Amazon S3 に保存します。

AWS STS エンドポイントをアクティブ化してください

Amazon Data Firehose アダプターを使用する場合は、AWS が提供する AWS STS エンドポイントをアクティブ化してください。詳しくは、AWS STS エンドポイントをアクティブ化してください を参照してください。

ステップ 1: Amazon Data Firehose を設定する

まず、Amazon Data Firehose と、Funnel が Amazon Data Firehose を利用するための AWS IAM ロールを設定します。

  1. AWS マネジメントコンソール にログインし、「Kinesis」を選択して、[Amazon Data Firehose に移動] をクリックします。

  2. [Firehose ストリームを作成] をクリックします。

    「Firehose ストリームを作成」画面が表示されます。

  3. 以下の項目を設定します。

    項目説明
    [ソース]「Direct PUT」を選択します。
    [送信先]「Amazon S3」を選択します。
    [Firehose ストリーム名]Firehose ストリーム名を入力します。この Firehose ストリーム名は、これ以降、${firehose_stream_name} と表記します。例: my-kinesis-firehose01

  4. [S3 バケット][参照] をクリックします。

    データを保存する S3 バケットが無い場合は、先に [作成] をクリックし、画面の指示に従って操作して、S3 バケットを作成してください。

    「Amazon S3 のバケットを選択する」画面が表示されます。

  5. [バケットを検索] にデータを保存する S3 バケットの名前 (例: funnel-data-firehose-console) を入力し、S3 バケットを選択して、[選択] をクリックします。

    作成した S3 バケットが表示されない場合は、[] をクリックします。

    [バッファ間隔] に適切な時間を設定します

    Amazon Data Firehose は、データを S3 バケットに保存する前にバッファリングします。

    Funnel の Amazon Data Firehose アダプターの動作確認を簡単にするために、[バッファのヒント、圧縮、ファイル拡張子、暗号化][バッファ間隔] に「5」を入力することを検討してください。これは、Amazon Data Firehose にデータが届いてから 5 秒待ってから (バッファリングしてから)、まとめて S3 バケットにファイルが作成されるようにする設定です。

  6. [詳細設定][IAM ロール KinesisFirehoseServiceRole-my-kines-${region}-xxxxxxxxxxxxx] の順にクリックします。

  7. [Firehose ストリームを作成] をクリックします。

    IAM ロール、IAM ポリシー、および Firehose ストリームが作成され、Firehose ストリームの詳細画面が表示されます。

  8. [設定] タブをクリックして、[サービスアクセス][IAM ロール] の名前をクリックします。

    Firehose ストリームと同時に作成された IAM ロールの詳細画面が表示されます。

  9. [許可ポリシー] のポリシーをクリックします。

    Firehose ストリームと同時に作成された IAM ポリシーの詳細画面が表示されます。

  10. [編集] をクリックします。

  11. [+新しいステートメントを追加] をクリックして、以下の内容を入力します。

    {
      "Sid": "AllowPutRecordBatch",
      "Effect": "Allow",
      "Action": [
        "firehose:PutRecordBatch"
      ],
      "Resource": [
        "arn:aws:firehose:${region}:${your_aws_account_id}:deliverystream/${firehose_stream_name}"
      ]
    }
    
    • ${region} には、AWS のリージョンを入力します。例: ap-northeast-1
    • ${your_aws_account_id} には、お客様の AWS アカウントの ID を入力します。例: 123456789012
    • ${firehose_stream_name} には、Firehose ストリーム名を入力します。例: my-kinesis-firehose01

  12. [次へ][変更を保存] の順にクリックします。

    IAM ポリシーの詳細画面に戻ります。

  13. ポリシー名をコピーします。

    続けて、Funnel が Amazon Data Firehose を利用するための AWS IAM ロールを作成します。

  14. IAM コンソール にアクセスし、[アクセス管理][ロール] の順にクリックして、[ロールを作成] をクリックします。

  15. [AWS アカウント] をクリックします。

  16. 以下の項目を設定します。

    項目説明
    [別の AWS アカウント]選択します。
    [アカウント ID]

    SORACOM の AWS アカウント ID を入力します。SORACOM の AWS アカウントの ID は、カバレッジタイプによって異なります。

    • 日本カバレッジ: 762707677580
    • グローバルカバレッジ: 950858143650
    [外部 ID を要求する]チェックを入れます。
    [外部 ID]

    任意の文字列を入力します。

    [外部 ID] に入力した文字列は、これ以降、${external_id} と表記します。例: External-ID-CZz27ye8X7AJPGQm

  17. [次へ] をクリックします。

    「許可を追加」画面が表示されます。

  18. [検索] に、手順 13 でコピーしたポリシー名を入力し、ポリシーにチェックを入れて、[次へ] をクリックします。

  19. [ロール名] に任意のロール名 (例: funnel-data-firehose-console-role) を入力して、[ロールを作成] をクリックします。

    ロール画面に戻ります。

  20. [検索] に、手順 19 で入力したロール名を入力して、ロール名をクリックします。

    ロールの詳細画面が表示されます。

  21. [ARN] をコピーします。

    この ARN は、これ以降、${iam_role_arn} と表記します。例: arn:aws:iam::XXXXXXXXXXXX:role/funnel-data-firehose-console-role

以上で、Amazon Data Firehose の設定は完了です。

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

IoT SIM を利用するデバイスから送信されたデータを、Funnel から Amazon Data Firehose に転送するための設定を、SORACOM ユーザーコンソールで行います。

認証情報ストアに AWS IAM ロール認証情報を登録する

Funnel から Amazon Data Firehose にデータを転送するために、IAM ロールに関する認証情報を、SORACOM ユーザーコンソールの認証情報ストアに登録します。認証情報は、${iam_role_arn} および ${external_id} です。認証情報ストアの「認証情報を登録」画面の表示方法については、認証情報を登録する を参照してください。

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

項目説明
[認証情報 ID]認証情報を識別するために任意の名前を入力します。例: AWS-IAM-role-credentials-funnel-data-firehose
[種別]「AWS IAM ロール認証情報」を選択します。
[ロール ARN]${iam_role_arn} を入力します。例: arn:aws:iam::XXXXXXXXXXXX:role/funnel-data-firehose-console-role
[外部 ID]${external_id} を入力します。例: External-ID-CZz27ye8X7AJPGQm

Funnel の Amazon Data Firehose アダプターを設定する

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

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

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

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

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

  3. 以下の項目を設定します。

    項目説明
    [転送先サービス]「Amazon Data Firehose」を選択します。
    [転送先 URL]

    Amazon Data Firehose の URL を以下のフォーマットで入力します。

    https://firehose.${region}.amazonaws.com/${firehose_stream_name}
    
    • ${region} には、AWS のリージョンを入力します。例: ap-northeast-1
    • ${firehose_stream_name} には、Firehose ストリーム名を入力します。例: my-kinesis-firehose01

    URL のルールについては、以下のページを参照してください。

    [認証情報]認証情報ストアに AWS IAM ロール認証情報を登録する で登録した AWS IAM ロール認証情報を選択します。
    [送信データ形式]「JSON」を選択します。

    各項目の設定について詳しくは、SORACOM Funnel を有効化する を参照してください。

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

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

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

ステップ 3: Funnel を使用して Amazon S3 にデータを収集する

ここでは Unified Endpoint にデータを送信します。Funnel の エントリポイント へデータを送信することもできます。

Unified Endpoint からのレスポンスには Beam や Funk のレスポンスが含まれる場合があります

Unified Endpoint に送信したデータは、IoT SIM が所属するグループの設定によっては、Funnel だけでなく、Flux、Beam、Funk、Harvest Data にも転送されます。なお、レスポンスは Unified Endpoint の設定に従い、転送されたサービス (例: Beam や Funk など) のレスポンスが含まれる場合があります。詳しくは、レスポンスの形式を設定する を参照してください。

Unified Endpoint の UDP エントリポイント (uni.soracom.io:23080) に UDP でデータを送信します。簡単にテストする場合は、nc コマンドが便利です。

  1. Funnel の Amazon Data Firehose アダプターを設定する で設定したグループに所属する IoT SIM」を利用するデバイスで、Unified Endpoint の UDP エントリポイント (uni.soracom.io:23080) との UDP 通信を開始します。

    $ nc -u uni.soracom.io 23080
    
  2. 続けて、{"message":"Hello SORACOM Funnel via UDP!"} を入力して Enter キーを押します。

    {"message":"Hello SORACOM Funnel via UDP!"}
    

    Unified Endpoint の UDP エントリポイントのレスポンスが表示されます。なお、レスポンスの形式は、Unified Endpoint の [フォーマット] の設定に従います。詳しくは、レスポンスの形式を設定する を参照してください。

    例: Unified Endpoint の [フォーマット] で「Auto (デフォルト)」や「SORACOM Funnel」を選択した場合

    204
    

    例: Unified Endpoint の [フォーマット] で「Unified」を選択した場合

    200 {"result":"ok","detail":{"SoracomFunnel":{"statusCode":204}}}
    
  3. UDP 通信を終了するには、Ctrl + C キーを押します。

Funnel の UDP エントリポイントにデータを送信した場合は 200 が表示されます
{"message":"Hello SORACOM Funnel via UDP!"}
200

Unified Endpoint の TCP エントリポイント (uni.soracom.io:23080) に TCP でデータを送信します。簡単にテストする場合は、nc コマンドが便利です。

  1. Funnel の Amazon Data Firehose アダプターを設定する で設定したグループに所属する IoT SIM」を利用するデバイスで、Unified Endpoint の TCP エントリポイント (uni.soracom.io:23080) との TCP 通信を開始します。

    $ nc uni.soracom.io 23080
    
  2. 続けて、{"message":"Hello SORACOM Funnel via TCP!"} を入力して Enter キーを押します。

    {"message":"Hello SORACOM Funnel via TCP!"}
    

    Unified Endpoint の TCP エントリポイントのレスポンスが表示されます。なお、レスポンスの形式は、Unified Endpoint の [フォーマット] の設定に従います。詳しくは、レスポンスの形式を設定する を参照してください。

    例: Unified Endpoint の [フォーマット] で「Auto (デフォルト)」や「SORACOM Funnel」を選択した場合

    204
    

    例: Unified Endpoint の [フォーマット] で「Unified」を選択した場合

    200 {"result":"ok","detail":{"SoracomFunnel":{"statusCode":204}}}
    
  3. TCP 通信を終了するには、Ctrl + C キーを押します。

Funnel の TCP エントリポイントにデータを送信した場合は 200 が表示されます
{"message":"Hello SORACOM Funnel via TCP!"}
200

Unified Endpoint の HTTP エントリポイント (uni.soracom.io) に HTTP でデータを送信します。簡単にテストする場合は、curl コマンドが便利です。

$ curl -v "http://uni.soracom.io" \
-H "Content-Type: application/json" \
-d '{
  "message": "Hello SORACOM Funnel via HTTP!"
}'

例: Unified Endpoint の [フォーマット] で「Auto (デフォルト)」や「SORACOM Funnel」を選択した場合

HTTP ステータスコードは、204 No Content です。

*   Trying 100.127.69.42:80...
* Connected to uni.soracom.io (100.127.69.42) port 80 (#0)
> POST / HTTP/1.1
> Host: uni.soracom.io
> User-Agent: curl/7.88.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 49
>
< HTTP/1.1 204 No Content
< Date: Wed, 23 Oct 2024 20:03:28 GMT
< Connection: close
<
* Closing connection 0

例: Unified Endpoint の [フォーマット] で「Unified」を選択した場合

HTTP ステータスコードは、200 OK です。また、レスポンスボディがあります。

*   Trying 100.127.69.42:80...
* Connected to uni.soracom.io (100.127.69.42) port 80 (#0)
> POST / HTTP/1.1
> Host: uni.soracom.io
> User-Agent: curl/7.88.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 49
>
< HTTP/1.1 200 OK
< content-type: application/json
< Date: Wed, 23 Oct 2024 20:10:05 GMT
< Connection: close
< Content-Length: 61
<
* Closing connection 0
{"result":"ok","detail":{"SoracomFunnel":{"statusCode":204}}}
Funnel の HTTP エントリポイントにデータを送信した場合の HTTP ステータスコードは 204 No Content です
$ curl -v "http://funnel.soracom.io" \
-H "Content-Type: application/json" \
-d '{
  "message": "Hello SORACOM Funnel via HTTP!"
}'
*   Trying 100.127.65.43:80...
* Connected to funnel.soracom.io (100.127.65.43) port 80 (#0)
> POST / HTTP/1.1
> Host: funnel.soracom.io
> User-Agent: curl/7.88.1
> Accept: */*
> Content-Type: application/json
> Content-Length: 49
>
< HTTP/1.1 204 No Content
< Date: Wed, 23 Oct 2024 20:05:28 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
<
* Connection #0 to host funnel.soracom.io left intact

ステップ 4:収集されたデータを確認する

Amazon S3 の バケット画面 にアクセスして、Amazon Data Firehose の出力先に指定した S3 バケットに、ファイルが作成されていることを確認します。

ファイルは、以下のように年、月、日、時間のフォルダの中に作成されます。

UDP で送信した場合:

{"credentialsId": "AWS-IAM-role-credentials-funnel-data-firehose", "operatorId": "OP1234567890", "destination": {"provider": "aws", "service": "firehose", "resourceUrl": "https://firehose.ap-northeast-1.amazonaws.com/my-kinesis-firehose01", "payloadsOnly": false}, "sourceProtocol": "udp", "payloads": {"message": "Hello SORACOM Funnel via UDP!"}, "timestamp": 1727736063112, "imsi": "295051234567892", "imei": "123456789012345"}

TCP で送信した場合:

{"credentialsId": "AWS-IAM-role-credentials-funnel-data-firehose", "operatorId": "OP1234567890", "destination": {"provider": "aws", "service": "firehose", "resourceUrl": "https://firehose.ap-northeast-1.amazonaws.com/my-kinesis-firehose01", "payloadsOnly": false}, "sourceProtocol": "tcp", "payloads": {"message": "Hello SORACOM Funnel via TCP!"}, "timestamp": 1727737241958, "imsi": "295051234567892", "imei": "123456789012345"}

HTTP で送信した場合:

{"credentialsId": "AWS-IAM-role-credentials-funnel-data-firehose", "operatorId": "OP1234567890", "destination": {"provider": "aws", "service": "firehose", "resourceUrl": "https://firehose.ap-northeast-1.amazonaws.com/my-kinesis-firehose01", "payloadsOnly": false}, "sourceProtocol": "http", "payloads": {"message": "Hello SORACOM Funnel via HTTP!"}, "timestamp": 1727738038660, "imsi": "295051234567892", "imei": "123456789012345"}
  • データが届かない場合は、以下の点を確認してください。
    • SORACOM ユーザーコンソールで エラーログ を確認してください。
    • 送信したデータは、Firehose ストリームの設定によってバッファリングされます。データが届くまでに時間がかかると感じる場合は、Firehose ストリームの [バッファ間隔] の設定を確認してください。
    • ファイルが保存されるディレクトリは、データが保存された時間で変わります。別のディレクトリに保存されていないか確認してください。
  • 連続してデータを送信した場合、データ間に区切り文字は入りません。