IoT ボタンの情報をS3に保存したかったのでやってみました。
基本的には参考サイトに記載したSORACOMさんのサイト通りです。ただし、参考サイトでは「Amazon SNS」に連携しているため、今回はIoT CoreのルールでS3に保存、保存するために実施した内容をメモしています。
はじめに
本記事の設定は、セキュリティ的に脆弱な可能性があります。本番環境では、IAMロールの最小権限の原則に従い、必要な権限のみを付与してください。また、S3バケットのアクセス制御を適切に設定し、不正アクセスを防ぐようにしてください。
参考サイト

SORACOM LTE-M Button と各種クラウドサービスを連携する | IoT デザインパターン | ソラコムユーザーサイト - SORACOM Users
IoT に関わるアイディアを実現するために、ソラコムが提供するデバイスやサービスの基本的な利用方法を説明するサイトです。開発者向けの API リファレンスや SORACOM CLI などを利用できます。
AWS IoT Coreの準備
AWS IoT Coreのページ、左ペインにある「ドメイン」ページを表示し、「ドメイン設定を作成」を選択します。

以下設定を行います。
- [ドメイン設定名]: soracomIoT(任意の名称)
- [セキュリティポリシーを選択]: IoTSecurityPolicy_TLS13_1_2_2022_10
- [認証タイプ]: デフォルト
- [カスタムオーソライザー]: カスタムオーソライザーなし
- [ドメイン設定のステータス]: 有効にする
ルールを作成します。左ペインの「メッセージのルーティング」から「ルール」、「ルール作成」を選択
- [ルール名]: transferS3(任意の名称)
- [SQLのバージョン]: 2016-03-23
- [SQL ステートメント]:
すべてのトピックからデータを受信する場合
SELECT * FROM 'button_topic/#'
指定したフィールドのみを取得場合
SELECT
credentialsId,
operatorId,
destination,
sourceProtocol,
payloads.clickType,
payloads.clickTypeName,
payloads.batteryLevel,
payloads.binaryParserEnabled,
timestamp,
imsi,
imei,
locationQueryResult,
location
FROM
'button_topic/#'
- [アクション1]: S3 Bucket
- [Bucket名]: 任意のS3バケットを選択
- [キー]: IoT-Core/soracom-iot-button/${parse_time(‘yyyyMMddHHmmss’, timestamp(), ‘Asia/Tokyo’)}.json
S3バケットのキー設定では、parse_time関数を利用して、UTCで保存されるタイムスタンプを日本時間に変換しています。
- [既定ACL]: private
- [IAMロール]: 任意(今回はIoTCorePwerRoleというロールを作成)
SORACOM用のIAMポリシーとロールを作成
参考サイトの内容通りです。
SORACOM Funnelの設定
参考サイトの通りです。
結果
指定したS3バケットに保存されています。

ファイルの内容も意図した内容になっています。

コメント