Amazon Kinesis Data Firehose アダプターを使用する (Ruby スクリプト版)
ステップ 1: Amazon Kinesis Firehose を設定する
まず、クラウドサービス側の Amazon Kinesis Firehose を設定します。
Amazon Kinesis Firehose の管理画面で
をクリックします。
次に、以下のように
で「Amazon S3」を選択し、 に「my-kinesis-firehose01」を入力して、 を選択します。
画面の指示に従って、Kinesis Firehose サービスが使用する IAM ロールを作成します。
「Create Delivery Stream」をクリックし、Delivery Stream を作成します。
次に、Kinesis Firehose にアクセスする IAM ユーザーを作成します。
AWS の IAM Management Console で、既存のユーザーもしくは、新規にユーザーを作成し、ポリシーをアタッチします。
以下では、Full Access をアタッチしています。
必要に応じて、以下のような PutRecord のみのポリシーを設定することも可能です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1452101987000",
"Effect": "Allow",
"Action": ["firehose:PutRecord", "firehose:PutRecordBatch"],
"Resource": ["arn:aws:firehose:*:000000000000:deliverystream/my-kinesis-firehose"]
}
]
}
ポリシーに関しては、AWS のガイドなどを参照してください。
以上で、クラウドサービス側 (Amazon Kinesis Firehose) の設定は完了です。
ステップ 2: SORACOM Funnel を設定する
SORACOM 側 (Funnel) の設定は、以下の 2 つのステップで完了します。
- クレデンシャルの登録
- クラウドサービスの指定
まず、CLI (SDK) が最新であるかを確認してください。
$ gem soracom version
「Soracom API tool v1.1.0」 以降であることを確認してください。
導入方法や設定などは、SORACOM SDK for Ruby を参照してください。
クレデンシャルの登録
Funnel を通じて利用する各種クラウドサービスの認証情報は、クレデンシャルストア機能を利用します。
AWS の場合、以下のようなフォーマットで AWS の Credential 情報を保存してください。
(ここでは my-aws-credentials.json
というファイル名で保存します。)
{
"type": "aws-credentials",
"credentials": {
"accessKeyId": "AAAAAAAAAAAAAAAAAAAA",
"secretAccessKey": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"description": "Kinesis Firehose"
}
以下のコマンドを実行し、上記の AWS の Credential を登録します。
$ soracom credentials create-credentials --credentials-id=my-aws-credentials --credentials-body=file://my-aws-credentials.json
{
"description": "Kinesis Firehose",
"type": "aws-credentials",
"credentials": {
"accessKeyId": "AAAAAAAAAAAAAAAAAAAA"
},
"credentialsId": "my-aws-credentials",
"createDateTime": 1452790292,
"updateDateTime": 1452790292,
"lastUsedDateTime": null
}
上記コマンド内で指定した以下のファイルは、先ほど作成した AWS の Credential 情報のファイルです。
file://my-aws-credentials.json
クラウドサービスの指定
Funnel の設定 (クラウドサービスの指定) を IoT SIM のグループに適用します。
設定のために、以下のようなファイルを作成してください。 (ここでは、kinesis_firehose.json というファイル名で保存します。)
{
"destination": {
"provider": "aws",
"service": "firehose",
"resourceUrl": "https://firehose.us-west-2.amazonaws.com/<Delivery stream name>"
},
"credentialsId": "my-aws-credentials",
"enabled": true
}
<Delivery stream name>
には、作成した Kinesis Firehose の名前を指定します。
ここでは、「my-kinesis-firehose」として作成しています。
対象のグループを作成しておき、グループ ID を指定して、当設定を適用します。(以下のコマンドの応答は、一部のみ表示しています。)
$ soracom group update-configuration --group-id XXXXXXXXXXXXXXXXXXXXXX --namespace SoracomFunnel --params file://kinesis_firehose.json
{
"destination": {
"provider": "aws",
"service": "firehose",
"resourceUrl": "https://firehose.us-west-2.amazonaws.com/my-kinesis-firehose"
},
"credentialsId": "my-aws-credentials",
"enabled": true
}
その他のクラウドサービスの設定は、Funnel を有効化する を参照してください。
以上で、設定は完了です。
ステップ 3: Kinesis Firehose アダプターを使用してクラウドにデータを収集する
いよいよデータを送信します。 上記で設定した グループ に属する SORACOM Air で通信を行っているデバイスから、以下のようにデータを送信します。
Funnel の エントリポイント へリクエストを送信します。
- 送信コマンド例
$ nc funnel.soracom.io 23080
{"message":"Hello SORACOM Funnel via TCP!"} [Enter]
200
[Ctrl+C]
- 受信データ例
{
"operatorId": "OP0000000000",
"timestamp": 1452791551499,
"destination": {
"resourceUrl": "https://firehose.us-west-2.amazonaws.com/my-kinesis-firehose",
"service": "firehose",
"provider": "aws"
},
"credentialsId": "my-aws-credentials",
"payloads": { "message": "Hello SORACOM Funnel via TCP!" },
"sourceProtocol": "tcp",
"imsi": "440XXXXXXXXXXXX"
}
- 送信コマンド例
$ nc -u funnel.soracom.io 23080
{"message":"Hello SORACOM Funnel via UDP!"} [Enter]
200
[Ctrl+C]
- 受信データ例
{
"operatorId": "OP0000000000",
"timestamp": 1452791551499,
"destination": {
"resourceUrl": "https://firehose.us-west-2.amazonaws.com/my-kinesis-firehose",
"service": "firehose",
"provider": "aws"
},
"credentialsId": "my-aws-credentials",
"payloads": { "message": "Hello SORACOM Funnel via UDP!" },
"sourceProtocol": "udp",
"imsi": "440XXXXXXXXXXXX"
}
- 送信コマンド例
~$ curl -vX POST http://funnel.soracom.io -d "{\"message\":\"Hello SORACOM Funnel via HTTP!\"}" -H "Content-Type:application/json"
* Rebuilt URL to: http://funnel.soracom.io/
* Trying 100.127.65.43...
* Connected to funnel.soracom.io (100.127.65.43) port 80 (#0)
> POST / HTTP/1.1
> Host: funnel.soracom.io
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Type:application/json
> Content-Length: 44
>
* upload completely sent off: 44 out of 44 bytes
< HTTP/1.1 204 No Content
< Date: Thu, 14 Jan 2016 17:18:46 GMT
< Connection: keep-alive
<
* Connection #0 to host funnel.soracom.io left intact
- 受信データ例
{"operatorId": "OP0000000000", "timestamp": 1452791551499, "destination": {"resourceUrl": "https://kinesis.ap-northeast-1.amazonaws.com/my-kinesis-firehose", "service": "firehose", "provider": "aws"}, "credentialsId": "my-aws-credentials", "payloads": {"message":"Hello SORACOM Funnel via UDP!"}, "sourceProtocol": "udp", "imsi": "440XXXXXXXXXXXX"}
{"operatorId": "OP0000000000", "timestamp": 1453210349875, "destination": {"resourceUrl": "https://firehose.us-west-2.amazonaws.com/my-kinesis-firehose", "service": "firehose", "provider": "aws"}, "credentialsId": "my-aws-credentials", "payloads": {"message": "Hello SORACOM Funnel via HTTP!"}, "sourceProtocol": "http", "imsi": "440XXXXXXXXXXX"}
ステップ 4: 収集されたデータを確認する
Kinesis Firehose の出力先 (Destination) として指定した S3 Bucket を確認します。 以下のようにファイルが生成されていることが確認できます。
{"operatorId": "OP0026965167", "timestamp": 1453217753433, "destination": {"resourceUrl": "https://firehose.us-west-2.amazonaws.com/my-kinesis-firehose", "service": "firehose", "provider": "aws"}, "credentialsId": "my-aws-credentials", "payloads": {"message":"Hello SORACOM Funnel via UDP!"}, "sourceProtocol": "tcp", "imsi": "440XXXXXXXXXXXX"}
{"operatorId": "OP0026965167", "timestamp": 1453217957353, "destination": {"resourceUrl": "https://firehose.us-west-2.amazonaws.com/my-kinesis-firehose", "service": "firehose", "provider": "aws"}, "credentialsId": "my-aws-credentials", "payloads": {"message":"Hello SORACOM Funnel via HTTP!"}, "sourceProtocol": "http", "imsi": "440XXXXXXXXXXXX"}
以上で、「SORACOM Funnel の Kinesis Firehose アダプターを使用してクラウドにデータを収集する」は完了です。