AWS IoT Topic Payload の値で Kinesis Shard を分ける方法

2020年04月17日
投稿者:岩佐 孝浩
カテゴリ:Amazon Web Services, IoT, Kinesis Data Stream タグ:
AWS-IoT-Core_light-bg@4x

AWS IoT Topic Payload の値で Kinesis Shard を分ける方法

鈴木商店の岩佐です。
AWS IoT Core から Kinesis へデータをストリーミングする際に、ペイロードの特定の値に基づいて Shard を分けたい場合があると思います。
例えば、サービス利用者によって通信量が異なる場合、通信量の多い人がストリームを占有してしまい、通信量の少ない人の処理が滞留するという懸念が生じます。
これを解消するため、サービス利用者を識別するIDに基づいて Shard を分けると、通信量によるリソース占有の不均衡を抑制できるはずです。
ただし、通信量が多い人の処理は滞留することに注意して下さい。

今回は、AWS IoT Topic Rule で、ペイロードの特定の値を Partition Key に指定できることを確認しました。
備忘録も兼ねて残しておきます。

AWS リソース作成

前提

プロジェクト作成

以下の構成でプロジェクトを作成して下さい。

AWS SAM Template

AWS SAM Template を template.yaml というファイル名で作成します。

Python コード作成

lambda_function.py

requirements.txt

今回は空でOKです。
boto3 は Lambda 実行環境に既にインストールされているため、含めないことをお勧めします。(パッケージサイズが無駄に増えます)

Build and Deploy

パッケージングに必要なS3バケットを事前に作成しておいて下さい。

AWS IoT Topic にテストデータを送信

AWS IoT Core Management Console でテストできます。
Topic: aws-iot-kinesis-partition-topic に以下のペイロードを送信して下さい。
TopicRule->Properties->TopicRulePayload->Actions->Kinesis->PartitionKey${customer_id} を設定したので、以下のペイロードの customer_id の値が Partition Key になるはずです。

aws-iot-kinesis-partition-1

Lambda の CloudWatch Logs を確認

aws-iot-kinesis-partition-2


aws-iot-kinesis-partition-3

Stack 削除

今回作成した CloudFormation Stack を削除して下さい。

まとめ

AWS IoT Core の Topic Rule で、ペイロードの特定の値を Kinesis partition key に指定できることが分かりました。
ユースケースとして、通信量の多いサービス利用者による Kinesis リソース占有率を下げたい場合に効果的だと考えられます。
一方で、通信量の多いサービス利用者の処理は滞留することに注意して下さい。
以上、お役に立てれば幸いです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です