MENU

Soracom

Users

Amazon Kinesis Data Firehose アダプターを使用する (Ruby スクリプト版)

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

まず、クラウドサービス側の Amazon Kinesis Firehose を設定します。

Amazon Kinesis Firehose の管理画面から「ストリームを作成」を選択します。

Funnel

ここでは、以下のように Destination として「Amazon S3」、Delivery stream name に「my-kinesis-firehose」を選択し、S3 bucket を選択します。

Funnel

Kinesis Firehose サービスが使用する IAM ロールを作成します。

Funnel

以下のように設定し、「Create Delivery Stream」をクリックし、Delivery Stream を作成します。

Funnel

次に、Kinesis Firehose にアクセスする IAM ユーザーを作成します。

AWS の IAM Management Console で、既存のユーザーもしくは、新規にユーザーを作成し、ポリシーをアタッチします。

以下では、Full Access をアタッチしています。 Funnel

必要に応じて、以下のような 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
}

その他のクラウドサービスの設定は、 グループ設定をご確認ください。

以上で、設定は完了です。

ステップ 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 を確認します。 以下のようにファイルが生成されていることが確認できます。

Funnel

{"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 アダプターを使用してクラウドにデータを収集する」は完了です。