week-based-year(YYYY)をカスタムプリフィックスにしたFirehoseの動作を確かめてみた

Amazon Kinesis Data Firehose のカスタムプリフィックスの日付フォーマット指定、「YYYY」(week-based-year)と、「yyyy」の違いについて確認してみました。
2020.12.31

AWSチームのすずきです。

Amazon Kinesis Data Firehose のカスタムプリフィックス、日付のフォーマットは Java DateTimeFormatter に準拠した指定で利用できます。

今回、「timestamp:YYYY」 week-based-yearに該当する日付フォーマット指定した場合の挙動を確認する機会がありましたので、 紹介させていただきます。

Firehose設定

カスタムプリフィックスの日付フォーマット2種類のFirehoseを用意しました。

  • year=!{timestamp:YYYY}/week=!{timestamp:w}/
  • year=!{timestamp:yyyy}/month=!{timestamp:MM}/date=!{timestamp:dd}

CloudFormationテンプレート

「year=!{timestamp:YYYY}」

  WeekBased:
    Type: AWS::KinesisFirehose::DeliveryStream
    Properties:
      DeliveryStreamType: DirectPut
      ExtendedS3DestinationConfiguration:
        RoleARN: !GetAtt 'DeliveryRole.Arn'
        BucketARN: !Sub 'arn:aws:s3:::${S3bucketFirehose}'
        Prefix: !Sub '${AWS::StackName}/week_based_year/year=!{timestamp:YYYY}/week=!{timestamp:w}/'
        ErrorOutputPrefix: !Sub '${AWS::StackName}/error/!{firehose:error-output-type}/week_based_year/year=!{timestamp:YYYY}/week=!{timestamp:w}/'

「year=!{timestamp:yyyy}」

  YearMonthDate:
    Type: AWS::KinesisFirehose::DeliveryStream
    Properties:
      DeliveryStreamType: DirectPut
      ExtendedS3DestinationConfiguration:
        RoleARN: !GetAtt 'DeliveryRole.Arn'
        BucketARN: !Sub 'arn:aws:s3:::${S3bucketFirehose}'
        Prefix: !Sub '${AWS::StackName}/year_month_date/year=!{timestamp:yyyy}/month=!{timestamp:MM}/date=!{timestamp:dd}/'
        ErrorOutputPrefix: !Sub '${AWS::StackName}/error/!{firehose:error-output-type}/year_month_date/year=!{timestamp:yyyy}/month=!{timestamp:MM}/date=!{timestamp:dd}/'

S3確認

2020年12月31日にFirehose経由でS3に出力されたファイルのキーを確認しました。

「year=!{timestamp:YYYY}」

「YYYY」、week-based-year の日付フォーマット指定では2021年となりました。

2020年12月31日は 2021年の一週目として扱われました。

  • S3 URI
s3://firehose-test-ap-northeast-1-000000000000/firehose-test/week_based_year/year=2021/week=1/firehose-test-WeekBased-0X6xUe6PgIMm-1-2020-12-31-05-46-20-7d2e8b7f-b291-4b1e-a653-a3cc47ac9f49

「year=!{timestamp:yyyy}」

「yyyy」の日付フォーマット指定では、2020年として扱われます。

  • S3 URI
s3://firehose-test-ap-northeast-1-000000000000/firehose-test/year_month_date/year=2020/month=12/date=31/firehose-test-YearMonthDate-4whshMRx3ILr-1-2020-12-31-05-46-45-8e86b21c-61d5-4347-80cc-a5f6175826aa

まとめ

Firehose のカスタムプリフィックスとして年月日を反映させる場合、日付フォーマットの年指定は小文字の「yyyy」でご利用ください。

参考リンク