🪣
CDKでAWS IoT Coreに送信されたMQTTメッセージをS3に保存してみた
概要
ASW CDKで AWS IoT Coreに送信されたMQTTメッセージをKinesis Data Streams、Kinesis Data Firehoseを経由し、Lambdaを用いてS3に保存するサンプルを作成しました。
構成図
サンプルコード
実装メモ
- CfnDeliveryStreamでFirehoseの権限を設定する際に、ロールの定義の依存関係が解決されないためデプロイエラーとなりました。
これを解決するために、firehoseRoleのポリシーはインラインポリシーを用いています。 - 今回の実装では、IoT Topic RuleのSQLクエリをすべて受け入れるように
SELECT * FROM '#'
としています。
事前準備
このプロジェクトを始める前に、以下の手順を完了してください。
- AWS IAMユーザーの作成: AWSのIAMでCDK BootstrapとCDK Deployを実行する権限を持つユーザーを作成します。
- AWS CLIプロファイルの設定: 作成したIAMユーザーの認証情報を使用して、ローカルの実行環境にAWS CLIプロファイルを設定します。
実行方法
プロジェクトをデプロイするには、以下の手順を実行します。
-
CDK Bootstrapの実行:
./cdk-bootstrap.sh {your-aws-profile}
これにより、CDKがAWSリソースをデプロイするための準備が整います。
-
プロジェクトのデプロイ:
./cdk-deploy.sh {your-aws-profile}
このコマンドを実行すると、必要なAWSリソースが作成されます。
デプロイが成功したら、AWS IoTのMQTT test clientを使用してメッセージを送信し、結果を確認します。
- AWS マネジメントコンソールで MQTT test client を開きます。
- Publish to a topic を選択し、任意のトピック名を入力します。
- Publish ボタンをクリックしてメッセージを送信します。
約60秒後、送信されたメッセージがS3に保存されることを確認できます。このプロセスでは、Lambdaをデータのプロセッサとして使用していますが、ここではデモ目的でログ出力のみを行っています。必要に応じて、S3に保存する前にデータを変換するカスタム処理を追加することができます。
環境の削除方法
プロジェクトを削除する前に、作成したS3バケットを空にしてください。
次に、以下のコマンドを実行して、デプロイしたリソースをすべて削除します。
./cdk-destroy.sh {your-aws-profile}
この手順により、このプロジェクトで作成したすべてのリソースが削除されます。
Discussion