このサンプルでは、AWS CloudFormation で Amazon Data Firehose と Amazon S3 バケットを作成し、Funnel の Amazon Data Firehose アダプターでデバイスから送信するデータを Amazon S3 に収集します。
このサンプルで利用する AWS のサービス
このサンプルでは、以下のサービスを使用します。サービスに関する詳しい情報は、リンク先を参照してください。
- Amazon Data Firehose: ストリーミングデータ配信サービス
- Amazon S3: オブジェクトストレージ
- AWS Identity and Access Management: AWS リソースへのアクセス管理
- Amazon CloudWatch: ロギング機能
- AWS CloudFormation: プロビジョニングツール
AWS CloudFormation テンプレートはダウンロードできます
- ここで利用する AWS CloudFormation テンプレートは、ダウンロード できます。
- 作成されるリソースについては AWS CloudFormation スタックで作成される AWS リソース も参照してください。
データの流れ
このサンプルを利用した場合は、デバイスから Amazon S3 には、以下の流れでデータが送信されます。
デバイスから Funnel にデータを送信します。
Funnel は、AWS IAM ロールを使用して、お客様の AWS アカウントに作成した Amazon Data Firehose へ転送されます。
Amazon Data Firehose は、受信したデータを Amazon S3 へ配信します。
ただし、Amazon S3 へ配信したときにエラーが発生した場合は、エラーログが Amazon CloudWatch Logs ストリームへ記録されます。エラーログは 14 日間保持されます。
ステップ 1: AWS CloudFormation で AWS リソースを作成する
AWS CloudFormation で AWS リソースを作成します。
以下のボタンをクリックして、AWS CloudFormation の「スタックのクイック作成」画面を表示します。
AWS CloudFormation テンプレートを利用する
AWS リソースは東京リージョン (ap-northeast-1) に作成されます
このボタンをクリックすると東京リージョン (ap-northeast-1) の「スタックのクイック作成」画面が表示され、AWS リソースは東京リージョンに作成されます。
以下の項目を設定します。
項目 説明 任意の名前を入力します。例: SoracomAwsCfnSampleFirehoseToS3 SORACOM の AWS アカウント ID を選択します。利用する IoT SIM のカバレッジタイプにあわせて、選択してください。
- 日本カバレッジ:
762707677580
- グローバルカバレッジ:
950858143650
Amazon Data Firehose の配信ストリーム名を入力します。これ以降、${delivery_stream} と表記します。例:
sample-delivery-stream
配信ストリーム名は、以下の AWS リソースの prefix としても使われます。詳しくは、AWS CloudFormation スタックで作成される AWS リソース を参照してください。
- AWS IAM ロールの名前:
${delivery_stream}-role
- CloudWatch Logs ロググループ:
${delivery_stream}-log-group
- CloudWatch Logs ログストリーム:
${delivery_stream}-log-stream
Amazon Data Firehose 実行用の AWS IAM ロールの外部 ID (任意の文字列) を入力し、セキュリティを強化します。これ以降、${external_id} と表記します。例:
External-ID-XbMZ5gQqcYTmm4hg
外部 ID を設定してセキュリティを許可できます
外部 ID は、第三者が所有する AWS アカウント (このページの場合は SORACOM の AWS アカウント) がお客様の AWS アカウントに作成したリソースにアクセスする場合に設定します。詳しくは、第三者が所有する AWS アカウント へのアクセス を参照してください。
Amazon Data Firehose を実行するための AWS IAM ロールのロール名を入力します。英数字、
+
、=
、,
、.
、@
、_
、-
が利用できます。これ以降、${iam_role_name_for_funnel} と表記します。「${delivery_stream}-role」(例: sample-delivery-stream-role) は入力しないでください
「${delivery_stream}-role」は、AWS CloudFormation テンプレートによって自動的に作成される AWS IAM ロールの名前です。
では入力しないでください。Amazon S3 のバケット名を入力します。英小文字、数字、 .
、-
が利用できます。- 日本カバレッジ:
にチェックを入れ、 をクリックします。
AWS CloudFormation スタックが作成されます。
「AlreadyExistsException」が表示されたときは
「Stack [SoracomAwsCfnSampleFirehoseToS3] already exists」が表示された場合は、既存の CloudFormation スタック (例: SoracomAwsCfnSampleFirehoseToS3) を削除してから、再度 ステップ 1: AWS CloudFormation で AWS リソースを作成する を実行してください。スタックと AWS リソースの削除は AWS リソースを削除する を参照してください。
タブをクリックします。
AWS CloudFormation スタックに含まれる AWS リソースが表示されます。
AWS CloudFormation スタックで作成される AWS リソース
AWS CloudFormation スタックで作成される AWS リソースは以下のとおりです。
AWS リソース (タイプ) 物理 ID (リソース名) Amazon Data Firehose の配信ストリーム
(AWS::KinesisFirehose::DeliveryStream)${delivery_stream}。例: sample-delivery-stream
CloudWatch Logs ロググループ
(AWS::Logs::LogGroup)${delivery_stream} に -log-group
を追加した名前。例:sample-delivery-stream-log-group
CloudWatch Logs ログストリーム
(AWS::Logs::LogStream)${delivery_stream} に -log-stream
を追加した名前。例:sample-delivery-stream-log-stream
AWS IAM ロール
(AWS::IAM::Role)${delivery_stream} に -role
を追加した名前。例:sample-delivery-stream-role
AWS IAM ロール
(AWS::IAM::Role)${iam_role_name_for_funnel}。
物理 ID をクリックすると、AWS IAM ロールの ARN を確認できます。この ARN を以降、${iam_role_name_for_funnel_arn} と表記します。
S3 バケット
(AWS::S3::Bucket)に入力した Amazon S3 のバケット名。 Amazon Data Firehose の配信ストリームの設定を確認するには
Amazon Data Firehose の配信ストリームの設定を確認するには、以下のボタンをクリックし、Amazon Data Firehose の Firehose ストリーム画面を表示して、作成した配信ストリーム名 (${delivery_stream}) をクリックします。
ステップ 2: SORACOM Funnel を設定する。
認証情報ストアに AWS IAM ロール認証情報を登録する
Funnel から Amazon Data Firehose にデータを転送するために、AWS IAM ロールに関する認証情報を、SORACOM ユーザーコンソールに登録します。
具体的には、認証情報ストアの「認証情報を登録」画面で以下のように登録します。この画面の表示方法については、認証情報を登録する を参照してください。
項目 | 説明 |
---|---|
認証情報を識別するために任意の名前を入力します。例: funnel-data-firehose-awscfn | |
「AWS IAM ロール認証情報」を選択します。 | |
${iam_role_name_for_funnel_arn} を入力します。例: arn:aws:iam::<お客様の AWS アカウント ID>:role/${iam_role_name_for_funnel} | |
${external_id} を入力します。例: External-ID-XbMZ5gQqcYTmm4hg |
SORACOM Funnel を有効化する
Funnel の設定はグループに対して行います
ここでは、グループの設定を変更する操作のみを説明します。グループの仕組みやグループを作成する操作について詳しくは、グループ設定 を参照してください。
SIM グループ画面で
をクリックします。SIM グループ画面を表示する操作について詳しくは、グループの設定を変更する を参照してください。
スイッチをクリックして「ON」にします。
以下の項目を設定します。
項目 説明 「Amazon Data Firehose」を選択します。 転送先サービス (データ送信先のクラウドサービス) として、Amazon Data Firehose の URL を入力します。
Amazon Data Firehose の URL は、リージョンによって異なる サービスエンドポイント に、配信ストリーム名を追加したものです。
たとえば、東京リージョン (ap-northeast-1) の場合の URL は、以下のとおりです。
https://firehose.ap-northeast-1.amazonaws.com/${delivery_stream}
認証情報ストアに AWS IAM ロール認証情報を登録する で登録した AWS IAM ロール認証情報を選択します。 「JSON」を選択します。 をクリックします。
IoT SIM の Funnel の設定が完了しました。
ステップ 3: デバイスからデータを送信する
IoT SIM を利用するデバイスで、Funnel の エントリーポイント にリクエストを送信します。
送信コマンド例:
TCP
$ nc funnel.soracom.io 23080 {"temperature":20}
200
TCP 通信を終了するには、Ctrl + C キーを押します。
UDP
$ nc -u funnel.soracom.io 23080 {"temperature":20}
200
UDP 通信を終了するには、Ctrl + C キーを押します。
HTTP
$ curl -vX POST http://funnel.soracom.io \ -H "content-type: application/json" \ -d '{"temperature":20}'
Note: Unnecessary use of -X or --request, POST is already inferred. * 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.74.0 > Accept: */* > Content-Type:application/json > Content-Length: 18 > * upload completely sent off: 18 out of 18 bytes * Mark bundle as not supporting multiuse < HTTP/1.1 204 No Content < Date: Fri, 28 Oct 2022 12:54:03 GMT < Connection: keep-alive < Keep-Alive: timeout=5 < * Connection #0 to host funnel.soracom.io left intact
ステップ 4: S3 に保存されたデータを確認する
ステップ 1: AWS CloudFormation で AWS リソースを作成する で作成した S3 バケットを確認します。
以下のボタンをクリックして、Amazon S3 コンソールの汎用バケット画面を表示します。
ステップ 1: AWS CloudFormation で AWS リソースを作成する の に入力した名前の S3 バケットを検索して、クリックします。
年月日時のフォルダを順にクリックし、ファイル (オブジェクト) にチェックを入れて、
をクリックします。ファイルがダウンロードされます。
ダウンロードしたファイルに、デバイスから送信したデータ (例:
{"temperature": 20}
) が含まれていることを確認します。以下は、3 回分の送信データがすべて結合されている例です。
{"operatorId": "OP00XXXXXXXX", "timestamp": XXXXXXXXXXXXX, "destination": {"provider": "aws", "service": "firehose", "resourceUrl": "https://firehose.ap-northeast-1.amazonaws.com/XXXXXXXX", "payloadsOnly": false}, "credentialsId": "XXXXXXXX", "payloads": {"temperature": 20}, "sourceProtocol": "tcp", "imsi": "440XXXXXXXXXXXX", "imei": "XXXXXXXXXXXXXXX"}{"operatorId": "OP00XXXXXXXX", "timestamp": XXXXXXXXXXXXX, "destination": {"provider": "aws", "service": "firehose", "resourceUrl": "https://firehose.ap-northeast-1.amazonaws.com/XXXXXXXX", "payloadsOnly": false}, "credentialsId": "XXXXXXXX", "payloads": {"temperature": 20}, "sourceProtocol": "udp", "imsi": "440XXXXXXXXXXXX", "imei": "XXXXXXXXXXXXXXX"}{"operatorId": "OP00XXXXXXXX", "timestamp": XXXXXXXXXXXXX, "destination": {"provider": "aws", "service": "firehose", "resourceUrl": "https://firehose.ap-northeast-1.amazonaws.com/XXXXXXXX", "payloadsOnly": false}, "credentialsId": "XXXXXXXX", "payloads": {"temperature": 20}, "sourceProtocol": "http", "imsi": "440XXXXXXXXXXXX", "imei": "XXXXXXXXXXXXXXX"}
配信ストリームの
で指定した時間内にデータを複数回送信した場合は、上記のようにすべてのデータが 1 つのファイルに結合されます。Amazon Data Firehose の配信ストリームの設定を確認するには、以下のボタンをクリックし、Amazon Data Firehose の Firehose ストリーム画面を表示して、作成した配信ストリーム名 (${delivery_stream}) をクリックします。
参考
AWS リソースを削除する
このページで使用した AWS CloudFormation テンプレートは、AWS CloudFormation スタックを削除すると作成された AWS リソースも削除されます。AWS リソースが不要になった場合は、作成した AWS CloudFormation スタックを削除してください。
以下のボタンをクリックして、AWS CloudFormation コンソールのスタック画面を表示します。
に AWS CloudFormation スタック名 (例: SoracomAwsCfnSampleFirehoseToS3) を入力して Enter キーを押し、スタック名をクリックします。
→ の順にクリックします。
S3 バケットの削除
CloudFormation スタックで作成した S3 バケットはスタックを削除しても削除されません。S3 バケットの削除方法は AWS の バケットの削除 を参照してください。