CloudFormation で IoT Core Topic Rules の Kinesis Firehose Action に Separator を設定する方法

2020年05月13日
投稿者:岩佐 孝浩
カテゴリ:Amazon Web Services, CloudFormation, IoT, Kinesis Data Firehose タグ:
CloudFormation

CloudFormation で IoT Core Topic Rules の Kinesis Firehose Action に Separator を設定する方法

鈴木商店の岩佐です。
タイトルが長くなりましたが、そのままの内容です。
AWS IoT Core で受信したデータを Kinesis Firehose を経由して S3 に保存 (Athena でログを分析するため) する際に、レコードのセパレーターとして改行を設定していましたが、CloudFormation による設定方法で少し迷いましたので、備忘録も兼ねて残しておきます。

AWS リソース作成

前提

CloudFormation Template

まずは、 CloudFormation Template を作成します。
AWS::IoT::TopicRule に関しては、以下をご参照ください。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-iot-topicrule.html

補足
Separator: |+ 改行 がポイントです。
– IamFirehose の記述が長くなっていますが、Kinesis Firehose の管理コンソールが生成する内容を踏襲しています。

iot.yaml

スタック作成

確認

IoT Core topic rule action

IoT Core topic rule action

MQTT test message publish

念のため S3 に出力されるデータを確認します。
AWS IoT の テスト機能を利用して、適当に複数のメッセージを Publish します。
Iot Core test message publish

S3 確認

Firehose の出力インターバルに900秒(15分)を指定したので、出力されるまでしばらく待ちます。
データを確認すると、レコードが改行で区切られています。

失敗する CloudFormation Template

CloudFormation Template

Separator: '\n' と記述すると、CloudFormation Stack の作成・更新に失敗します。

スタック更新

エラー内容確認

以下のエラーメッセージが表示されており、正規表現のエラーが発生していることが分かります。
1 validation error detected: Value '\n' at 'topicRulePayload.actions.1.member.firehose.separator' failed to satisfy constraint: Member must satisfy regular expression pattern: ([\n\t])|(\r\n)|(,)

CloudFormation console

スタック削除

今回作成したスタックを削除します。

まとめ

AWS のドキュメントを参照しても、Separator に改行を設定する方法がやや迷いポイントでした。(私だけかもしれませんが)
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-iot-topicrule-firehoseaction.html#cfn-iot-topicrule-firehoseaction-separator
以上、お役に立てれば幸いです。


コメントを残す

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