[アップデート] AWS CDK で Amazon Data Firehose の S3 出力時のタイムゾーン設定が可能になりました

[アップデート] AWS CDK で Amazon Data Firehose の S3 出力時のタイムゾーン設定が可能になりました

Clock Icon2025.07.15

こんにちは、製造ビジネステクノロジー部の若槻です。

AWS CDK の最新のリリース v2.205.0 で、Amazon Data Firehose の S3 出力時のタイムゾーン設定が可能になりました。

https://github.com/aws/aws-cdk/releases/tag/v2.205.0

kinesisfirehose: support custom time zone settings for S3 destination (#34738) (2bbe762), closes #34737

Amazon Data Firehose では既存では S3 出力時の !{timestamp:yyyy/MM/dd/HH}/ のようなタイムスタンプベースのプレフィクスのタイムゾーンは UTC 固定でしたが、昨年のアップデートにより、任意のタイムゾーンを指定できるようになりました。

https://dev.classmethod.jp/articles/firehose-s3-prefix-jst/

そして今回 AWS CDK の L2 Construct でも Firehose の S3 出力時のタイムゾーン設定に対応しました。

試してみた

CDK パッケージのアップデート

AWS CDK モジュールを v2.205.0 以上にアップデートします。

npm i aws-cdk-lib@latest aws-cdk@latest

CDK コード

AWS CDK で、Firehose の S3 出力時のタイムゾーン設定を行うコードは以下のようになります。S3Bucket コンストラクトクラスで timeZone プロパティが利用可能になっているので、任意のタイムゾーンを指定できます。このタイムゾーン設定はデータ及びエラー出力の両方に適用されます。

lib/main-stack.ts
import * as cdk from "aws-cdk-lib";
import * as s3 from "aws-cdk-lib/aws-s3";
import * as kinesisfirehose from "aws-cdk-lib/aws-kinesisfirehose";
import { Construct } from "constructs";

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string) {
    super(scope, id);

    /**
     * S3 バケットの作成
     */
    const bucket = new s3.Bucket(this, "Bucket");

    /**
     * Kinesis Firehose の S3 バケット出力の設定
     */
    const s3Destination = new kinesisfirehose.S3Bucket(bucket, {
      dataOutputPrefix: "!{timestamp:yyyy/MM/dd/HH}/",
      errorOutputPrefix:
        "!{firehose:error-output-type}/!{timestamp:yyyy/MM/dd/HH}/",
      timeZone: cdk.TimeZone.ASIA_TOKYO, // 任意のタイムゾーンを指定
      bufferingInterval: cdk.Duration.minutes(0), // デバッグ用に0分に設定
    });

    /**
     * Kinesis Firehose のデリバリーストリームの作成
     */
    new kinesisfirehose.DeliveryStream(this, "DeliveryStream", {
      destination: s3Destination,
    });
  }
}

ちなみに AWS CDK で「Amazon Data Firehose」を実装する場合は、以前の名前空間である「Kinesis Firehose」の名称のモジュールを引き続き使用する必要がある点にご注意ください。

上記を CDK デプロイします。作成された配信ストリームの送信先設定確認すると、タイムゾーン設定が S3 バケット出力に適用されていますね。

動作確認

テスト用に、AWS CLI から Firehose のデリバリーストリームにデータを送信してみます。

aws firehose put-record \
  --delivery-stream-name ${DELIVERY_NAME} \
  --record '{"Data": "{\"key1\":\"value1\", \"key2\":\"value2\"}"}'

S3 バケットにデータが出力されていることを確認します。現在の JST タイムゾーンの時刻のプレフィクスでデータが出力されていることが確認できました。

aws s3 ls s3://${S3_BUCKET_NAME} --recursive
2025-07-15 23:51:50        231 2025/07/15/23/Main-DeliveryStream58CF96DB-u6w3CfCVOWmL-2-2025-07-15-23-46-53-557b6f0b-96e1-4df4-848d-2687a0305a17

おわりに

AWS CDK で Amazon Data Firehose の S3 出力時のタイムゾーン設定が可能になったので確認してみました。

開発者や運用者がローカルタイムゾーンで出力プレフィクスを確認したいという要望は今までも多く、その場合は下記のような動的パーティショニングを実装する必要がありました。

https://dev.classmethod.jp/articles/try-dinamic-partitioning-of-firehose/

しかし、それも昨年のタイムゾーンのサポートで改善され、また今回の AWS CDK での実装が可能になったことで、より簡単にローカルタイムゾーンでの出力プレフィクスの設定が行えるようになりました。便利になりましたね。使いこなしていきましょう。

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.