どうも、松田です。
Amazon Data Firehoseを利用してS3にデータ配信をする際に、保存するオブジェクトにYYYY/MM/DD/HHという日時のプレフィックスを付与することができます。
このプレフィックスの日時のタイムゾーンを変更できるようになったらしいので、それについて本記事で共有させていただきます。
背景
ある時、Terraformのawsプロバイダーを更新しました。
更新してからterraform planを実行したところ、見慣れない差分を検知しました。
# aws_kinesis_firehose_delivery_stream.hoge-firehose-s3 will be updated in-place ~ resource "aws_kinesis_firehose_delivery_stream" "hoge-firehose-s3" { id = "arn:aws:firehose:ap-northeast-1:123456789012:deliverystream/hoge-firehose-s3" name = "hoge-firehose-s3" tags = {} # (5 unchanged attributes hidden) ~ extended_s3_configuration { + custom_time_zone = "UTC" # (6 unchanged attributes hidden) # (2 unchanged blocks hidden) } # (1 unchanged block hidden) }
aws_kinesis_firehose_delivery_streamのextended_s3_configurationにてcustom_time_zoneを差分として検知しているようです。
見慣れないパラメータだったので、AWSのアップデートに関係するものだと思い調べました。
アップデート情報
https://aws.amazon.com/jp/about-aws/whats-new/2024/02/amazon-data-firehose-time-zone-bucket-prefixes/
今年の2月にあったアップデートのようです。
Data FirehoseからS3にデータ配信する際、保存するオブジェクトのプレフィックスのタイムゾーンを指定できるとのことです。
どうやら今まではUTC一択だったのが、JSTなどのタイムゾーンを自由に指定できるようになったらしいです。
マネージメントコンソールを見てみた
Data Firehoseのマネージメントコンソール画面に該当する設定を見つけました。
デフォルトはUTCになっているようです。
実際にFirehose経由で保存されたS3のプレフィックスを見てみた
確かにマネコンから見える保存された時間(最終更新日時)とプレフィックスにてタイムゾーンがずれていますね。(上の図ではプレフィックスがUTC AM 6時で、保存された時間がJST PM3時になっている)
CloudWatch Logsのログを長期保存のアーカイブ目的でS3バケットのFirehose経由で保存するといったケースにおいて、タイムゾーンが異なると地味に取り扱いが面倒くさくなりますよね。
Terraformのコードを修正
resource "aws_kinesis_firehose_delivery_stream" "hoge-firehose-s3" { .... extended_s3_configuration { .... custom_time_zone = "Asia/Tokyo" # ここを追記 } }
これでterraform applyを実行して、タイムゾーンの設定変更を適用しました。
確認
しばらくした後、再びS3のプレフィックスを確認しました。
保存された時間(最終更新日時)とプレフィックスにてタイムゾーンが揃っていることがわかります。
最後に
Terraformのプロバイダーのバージョンアップでこういう仕様変更に気づくことが度々あります。
本来ならAWSのアップデート情報をしっかりウォッチしてプロアクティブに対応したいところですが、現実は甘くありませんね。
運用って難しい。。。