AWS文档使您看起来好像可以在Cloudformation中为DataFormatConversionConfiguration
指定AWS::KinesisFirehose::DeliveryStream
一样,但是没有关于该属性应该去哪里的文档。尝试将其添加到Properties
,ExtendedS3DestinationConfiguration
,ProcessingConfiguration
和Processors
之一下。每次CF都会抱怨-
以下资源无法更新:[EventFirehose]。 12:24:32 UTC-0500
UPDATE_FAILED AWS :: KinesisFirehose :: DeliveryStream EventFirehose遇到了不受支持的属性DataFormatConversionConfiguration
有自己的文档说-
如果您希望Kinesis Data Firehose将输入数据的格式从JSON转换为Parquet或ORC,请在ExtendedS3DestinationConfiguration或ExtendedS3DestinationUpdate中指定可选的DataFormatConversionConfiguration元素。
我在做什么错了?
答案 0 :(得分:10)
根据SDK documentation,它应位于ExtendedS3DestinationConfiguration
或ExtendedS3DestinationUpdate
中。但是,根据docs,cloudformation当前不支持此属性。这是cloudformation与其他AWS服务之间非常常见的差异。 AWS ECS: Severe bug in ECS Service Cloudformation template(最近已解决)中提到了一个类似的问题。
目前,您可以通过SDK更新或等待一段时间以使cloudformation赶上。
如果要让Kinesis Data Firehose将输入数据的格式从JSON转换为Parquet或ORC,请在ExtendedS3DestinationConfiguration或ExtendedS3DestinationUpdate中指定可选的DataFormatConversionConfiguration元素
答案 1 :(得分:2)
这是我如何解决此任务的方法。 Firehose strem以实木复合地板格式将数据写入S3存储桶:
LogsCollectionDatabase:
Type: AWS::Glue::Database
Properties:
DatabaseInput:
Description: Database for Kinesis Analytics
Name: !Ref DatabaseName
CatalogId: !Ref AWS::AccountId
LogsCollectionTable:
Type: AWS::Glue::Table
DependsOn: LogsCollectionDatabase
Properties:
DatabaseName: !Ref LogsCollectionDatabase
CatalogId: !Ref AWS::AccountId
TableInput:
Name: serverlogs
Description: Table for storing logs from kinesis
TableType: EXTERNAL_TABLE
StorageDescriptor:
Columns:
- Type: string
Name: col1
- Type: string
Name: col2
Location: !Sub s3://${DestinationBucketName}/${DestinationBucketPrefix}
InputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat
OutputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat
SerdeInfo:
SerializationLibrary: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe
KinesisFirehoseDeliveryStream:
Type: AWS::KinesisFirehose::DeliveryStream
DependsOn: FirehoseDeliveryIAMPolicy
Properties:
DeliveryStreamName: !Ref RegionalStreamName
DeliveryStreamType: DirectPut
ExtendedS3DestinationConfiguration:
BucketARN: !Ref DestinationBucketArn
Prefix: !Ref DestinationBucketPrefix
BufferingHints:
IntervalInSeconds: 60
SizeInMBs: 64
ErrorOutputPrefix: errors/
RoleARN: !GetAtt FirehoseDeliveryIAMRole.Arn
DataFormatConversionConfiguration:
Enabled: true
InputFormatConfiguration:
Deserializer:
HiveJsonSerDe: {}
OutputFormatConfiguration:
Serializer:
ParquetSerDe: {}
SchemaConfiguration:
CatalogId: !Ref AWS::AccountId
RoleARN: !GetAtt FirehoseDeliveryIAMRole.Arn
DatabaseName: !Ref LogsCollectionDatabase
TableName: !Ref LogsCollectionTable
Region: !Ref AWS::Region
VersionId: LATEST
当然,需要为FirehosStream定义IAM角色和策略