🪣

CDKでAWS IoT Coreに送信されたMQTTメッセージをS3に保存してみた

2024/02/09に公開

概要

ASW CDKで AWS IoT Coreに送信されたMQTTメッセージをKinesis Data Streams、Kinesis Data Firehoseを経由し、Lambdaを用いてS3に保存するサンプルを作成しました。

構成図

サンプルコード

https://github.com/FuminoriSugawara/cdk-iot-kinesis-data-stream-sample

実装メモ

  • CfnDeliveryStreamでFirehoseの権限を設定する際に、ロールの定義の依存関係が解決されないためデプロイエラーとなりました。
    これを解決するために、firehoseRoleのポリシーはインラインポリシーを用いています。
  • 今回の実装では、IoT Topic RuleのSQLクエリをすべて受け入れるようにSELECT * FROM '#'としています。

事前準備

このプロジェクトを始める前に、以下の手順を完了してください。

  1. AWS IAMユーザーの作成: AWSのIAMでCDK BootstrapとCDK Deployを実行する権限を持つユーザーを作成します。
  2. AWS CLIプロファイルの設定: 作成したIAMユーザーの認証情報を使用して、ローカルの実行環境にAWS CLIプロファイルを設定します。

実行方法

プロジェクトをデプロイするには、以下の手順を実行します。

  1. CDK Bootstrapの実行:

    ./cdk-bootstrap.sh {your-aws-profile}
    

    これにより、CDKがAWSリソースをデプロイするための準備が整います。

  2. プロジェクトのデプロイ:

    ./cdk-deploy.sh {your-aws-profile}
    

    このコマンドを実行すると、必要なAWSリソースが作成されます。

デプロイが成功したら、AWS IoTのMQTT test clientを使用してメッセージを送信し、結果を確認します。

  1. AWS マネジメントコンソールで MQTT test client を開きます。
  2. Publish to a topic を選択し、任意のトピック名を入力します。
  3. Publish ボタンをクリックしてメッセージを送信します。

約60秒後、送信されたメッセージがS3に保存されることを確認できます。このプロセスでは、Lambdaをデータのプロセッサとして使用していますが、ここではデモ目的でログ出力のみを行っています。必要に応じて、S3に保存する前にデータを変換するカスタム処理を追加することができます。

環境の削除方法

プロジェクトを削除する前に、作成したS3バケットを空にしてください。

次に、以下のコマンドを実行して、デプロイしたリソースをすべて削除します。

./cdk-destroy.sh {your-aws-profile}

この手順により、このプロジェクトで作成したすべてのリソースが削除されます。

Discussion