LoginSignup
1
0

More than 1 year has passed since last update.

AWS IoT SQLを用いた日本標準時の生成方法

Posted at

はじめに

 とあるIoT機器からAWSへ送信されるデータを、AWS IoT Core経由でAmazon S3へ保存する機会に恵まれ、Amazon S3のオブジェクトキーに日本標準時の日付を使用する方法をまとめた。

条件

  • AWS CLIをインストール済み
  • AWS IoT CoreにアタッチするIAMロールを作成済み
  • Amazon S3を作成済み

方法

 ルールを記述するペイロードファイルのAmazon S3オブジェクトキー記述部分にAWS IoT SQL Functionのtimestamp()parse_time(String, Long[, String])を用いる。

ペイロードファイル(JSONフォーマット)

{
  "awsIotSqlVersion": "2016-03-23",
  "sql": "SELECT * FROM 'topic/name'",
  "ruleDisabled": false,
  "actions": [
    {
      "s3": {
        "roleArn": "role_name",
        "bucketName": "bucket-name",
        "key": "${parse_time('yyyyMMddHHmmss', timestamp(), 'Asia/Tokyo')}"
      }
    }
  ]
} 

ペイロードファイルの解説

  • sqlキー: AWS IoT Coreでの受信データをフィルターしている。topic/name部分を各々の環境に合わせた書換えが必要。
  • "ruleDisabled"キー: ルールの有効/無効設定。有効化する場合は値にfalseを記述する。
  • roleArnキー: 値にIAMロールのARNを入力する。IAMロールは各々の環境に合わせて別途作成しておく必要がある。
  • "key"キー: 値にオブジェクトキーを記述する。"Literal"のように固定のキーを記述することも可能だが、ここでは関数が使用できて現在日付のように動的にオブジェクトキーを生成することができる。オブジェクトキーにストアした現在日本標準時を含めたい場合は、2つの関数timestamp()parse_time(String, Long[, String])を使用して日付を取得する。timestamp()はミリ秒単位のUTC時刻を返す。parse_time(String, Long[, String])の第一引数にjoda-Timeフォーマットで日付パターン、第二引数にミリ秒単位でUNIX時刻、第三引数にタイムゾーンを指定すると第一引数で指定したパターンに従って日付を返す。上記ペイロードファイルの例では、現在時刻が日本標準時の2021年11月1日11時11分11秒場合、Amazon S3に20211101111111のオブジェクトキーがストアされる。オブジェクトキーを西暦、月で区切りたい場合はペイロードファイル"key"の列を下記のように記述すればよい。
"key": "${parse_time("yyyy", timestamp(), "Asia/Tokyo")}/${parse_time("MM", timestamp(), "Asia/Tokyo")}/file_name"

ルールの生成

$ aws iot create-topic-rule --rule-name rule_name --topic-rule-payload file://file_name.json

上記のコマンドを実行するとルールが生成される。rule_name, file_name.json部分は各々の環境に合わせて書換えが必要。

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0