SORACOM funnelを利用して、AWS Kinesis Firehoseと連携する

SORACOM funnelを利用して、AWSKinesis Firehoseと連携した時のメモです。

SORACOM funnelとは

SORACOM funnelとは、

Funnelは、デバイスからのデータを特定のクラウドサービスに直接転送するアダプターです。

クラウドサービス上のリソースを指定するだけで、デバイスからのデータを直接に収集できます。 SORACOM Beamとの大きな相違点は、送信先が汎用的なプロトコルではない一方で、最小限の手間で、迅速にクラウドサービスを利用できます。

SORACOM Funnel機能詳細

Kinesis Firehoseと連携する場合の手順を、WEB上で公開してくれています。この内容を参考に作業を進めていきます。

SORACOM Funnel の Kinesis Firehoseアダプターを使用してクラウドにデータを収集する(SDK版)

AWS側作業

まず、データを受け取るAWS側設定を実施します。

kinesis Firehoseの作成

S3BucketをDestinationとするKinesis Firehoseを作成します。詳細は割愛。該当するCloudFormationテンプレートを置いておきます。

https://raw.githubusercontent.com/goodbyegangster/cloudformation/master/kinesisfirehose-for-s3-notransform/cf-kinesisfirehose-for-s3-notransform.yml

Kinesis Firehoseアクセス用のIAMユーザの作成

今後の手順にて、SORACOM側へFirehoseのStreamにアクセスできるIAM情報を登録することになります。そのためのIAMユーザを作成して、アクセスキー・シークレットキーを取得しておきます。

下記がIAMユーザに付与したIAMポリシー。Resource対象を作成したDelivery Streamに絞って、Streamの作成/削除権限だけを外しています。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "firehose:DescribeDeliveryStream",
        "firehose:PutRecord",
        "firehose:StartDeliveryStreamEncryption",
        "firehose:PutRecordBatch",
        "firehose:StopDeliveryStreamEncryption",
        "firehose:ListTagsForDeliveryStream",
        "firehose:TagDeliveryStream",
        "firehose:UpdateDestination",
        "firehose:UntagDeliveryStream"
      ],
      "Resource": "arn:aws:firehose:ap-northeast-1:XXXXXXXXXXXX:deliverystream/delivery_stream_name"
    },
    {
      "Effect": "Allow",
      "Action": "firehose:ListDeliveryStreams",
      "Resource": "*"
    }
  ]
}

SORACOM側作業

ここからはSORACOM側作業です。soracom-cliを利用して設定を進めます。

認証情報ストアに認証情報を登録

上記で作成したIAMユーザのクレデンシャル情報を、以下のようなJSONファイルにまとめます。

my-aws-credentials.json

{
  "type": "aws-credentials",
  "credentials": {
    "accessKeyId": "AKIXXXXXXXXXXXXXXXX",
    "secretAccessKey": "4UuXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  },
  "description": "arn:aws:iam::XXXXXXXXXXXX:user/soracom-kinesis-user"
}

soracom credentials create コマンドにて、クレデンシャル情報を登録します。下記がサンプルコマンド。

$ soracom credentials create \
--credentials-id aws-credential-name \
--body @my-aws-credentials.json

CLIでのヘルプ内容。

$ soracom credentials create --help
Creates a new credential.

Usage:
  soracom credentials create [flags]

Flags:
      --body string             JSON string or @filename for API request body.
      --credentials-id string   credentials_id
      --description string
      -h, --help                help for create
      --type string

IoT SIMグループの作成

Kinesis Firehoseと連携したいSIMを管理するSIMグループを作成します。既に適当なSIMグループが存在する場合、本手順はスキップできます。

作成したいグループ名を定義した、以下のようなJSONファイルを作成します。

my-sim-group.json

{
  "tags": {
    "name": "test-group"
  }
}

soracom groups create コマンドにて、新規グループを作成します。

$ soracom groups create \
--body @my-sim-group.json

CLIでのヘルプ内容。

$ soracom groups create --help
Create a new group.

Usage:
  soracom groups create [flags]

Flags:
      --body string   JSON string or @filename for API request body.
      -h, --help      help for create

SORACOM funnelの設定(クラウドサービスの指定)

上で作成したSIMグループにて、SORACOM funnelの設定を行います。

今回作成したKinesis Firehoseの情報、SORACOM認証情報ストアに登録した認証情報を、以下のようなJSONファイルにまとめます。

my-kinesis-firehose.json

[
  {
    "key": "contentType",
    "value": "json"
  },
  {
    "key": "credentialsId",
    "value": "aws-credential-name"
  },
  {
    "key": "destination",
    "value": {
      "provider": "aws",
      "resourceUrl": "https://firehose.ap-northeast-1.amazonaws.com/sample",
      "service": "firehose"
    }
  },
  {
    "key": "enabled",
    "value": true
  }
]

soracom groups put-config コマンドにて、設定を実施します。

$ soracom groups put-config \
--group-id 5e919356-XXXX-XXXX-XXXX-XXXXXXXXXXXX \
--namespace SoracomFunnel \
--body @my-kinesis-firehose.json

CLIでのヘルプ内容。

$ soracom groups put-config --help
Adds/updates parameters for the specified group.

Usage:
  soracom groups put-config [flags]

Flags:
      --body string        JSON string or @filename for API request body.
      --group-id string    Target group.
      -h, --help           help for put-config
      --namespace string   Target configuration.

利用するSIMをSIMグループに参加させる

諸々設定してきたSIMグループに、今回利用するSORACOM SIMを参加させます。以下のように、 soracom subscribers set-group コマンドを実行。

$ soracom subscribers set-group \
--imsi 440XXXXXXXXXXXX \
--group-id 5e919356-XXXX-XXXX-XXXX-XXXXXXXXXXXX

CLIでのヘルプ内容。

$ soracom subscribers set-group --help
Sets or overwrites a group for the specified subscriber.

Usage:
  soracom subscribers set-group [flags]

Flags:
      --body string       JSON string or @filename for API request body.
      --group-id string
      -h, --help          help for set-group
      --imsi string       IMSI of the target subscriber.

疎通テスト

設定したfunnel経由にて、Kinesis Firehoseと連携し、S3上にファイルが作成されることを確認します。今回はPCをSORACOMネットワークに接続し、NetcatコマンドにてTCPパケットを送信してみます。

PCをSORACOMネットワークに接続する方法は、下記の以前の投稿より。

SORACOMのSIMをスマートフォンで利用する

Netcatコマンド(nc)のサンプルは下記。

$ nc funnel.soracom.io 23080
{"message":"Hello SORACOM Funnel via TCP!"}

S3上にファイル作成されることを確認します。