はじめに
CloudFormation にて Data Firehose Stream を作成をしようとしたところ、下記エラーが出力されました。
Resource handler returned message: "Model validation failed (#: extraneous key [ProcessingConfiguration] is not permitted)" (RequestToken: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, HandlerErrorCode: InvalidRequest)
このエラーの原因について説明します。
エラーの原因
Model validation failed
エラーは主に CloudFormation テンプレートで使用できないプロパティを指定した際に発生します。
今回は Resource 設定にて「S3DestinationConfiguration」が「ProcessingConfiguration」に対応していないことが原因だったため、「ExtendedS3DestinationConfiguration」に修正することで解決しました。
エラーが発生した CloudFormation テンプレート
Resources: RdsAuditStream: Type: AWS::KinesisFirehose::DeliveryStream Properties: DeliveryStreamName: "<firehose name>" DeliveryStreamType: DirectPut S3DestinationConfiguration: BucketARN: "arn:aws:s3:::<test-s3-bucket>¥" BufferingHints: SizeInMBs: 5 IntervalInSeconds: 300 CompressionFormat: GZIP Prefix: "rds/audit/" ProcessingConfiguration: Enabled: true Processors: - Type: Decompression Parameters: - ParameterName: CompressionFormat ParameterValue: GZIP - Type: CloudWatchLogProcessing Parameters: - ParameterName: DataMessageExtraction ParameterValue: true RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/<firehose role arn>" CloudWatchLoggingOptions: Enabled: false
修正後の CloudFormation テンプレート
Resources: RdsAuditStream: Type: AWS::KinesisFirehose::DeliveryStream Properties: DeliveryStreamName: "<firehose name>" DeliveryStreamType: DirectPut ExtendedS3DestinationConfiguration: BucketARN: "arn:aws:s3:::<test-s3-bucket>¥" BufferingHints: SizeInMBs: 5 IntervalInSeconds: 300 CompressionFormat: GZIP Prefix: "rds/audit/" ProcessingConfiguration: Enabled: true Processors: - Type: Decompression Parameters: - ParameterName: CompressionFormat ParameterValue: GZIP - Type: CloudWatchLogProcessing Parameters: - ParameterName: DataMessageExtraction ParameterValue: true RoleARN: !Sub "arn:aws:iam::${AWS::AccountId}:role/<firehose role arn>" CloudWatchLoggingOptions: Enabled: false
解説
Firehose でS3を送信先として利用する場合、「S3DestinationConfiguration」と「ExtendedS3DestinationConfiguration」の 2 種類が存在します。
「S3DestinationConfiguration」は現在は非推奨となっており、下記のような追加された機能を利用する場合は「ExtendedS3DestinationConfiguration」を使用する必要があります。
- バケットプレフィックスのタイムゾーン変更 [ CustomTimeZone ]
- 入力レコード形式の変換(Parquet, ORC) [ DataFormatConversionConfiguration ]
- 動的パーティショニング [ DynamicPartitioningConfiguration ]
- ファイル拡張子の指定 [ FileExtension ]
- Lambda によるソースレコードの変換、CloudWatch Logs からのソースレコード解凍 [ ProcessingConfiguration ]
- S3 ソースレコードのバックアップ設定 [ S3BackupConfiguration ]
- S3 バックアップモード [ S3BackupMode ]