我有 Lambda 函数,可将 put 的 JSON 字符串定向到 Firehose 流,以将批量记录传送到 S3,并且我希望将这些记录作为压缩的
.gz
文件传送。
但是,尽管流的
Destination settings > Compression for data records
设置为 GZIP
,但文件仍以纯文本形式传送,即使它们甚至被分配了 .gz
扩展名。我可以这么说,因为 a) 我可以从 S3 下载文件,它会以文本形式打开,无需修改,b) gzip -d ~/path/my_file.gz
返回 gzip: /path/my_file.gz: not in gzip format
即使启用了压缩,为什么 Firehose 仍会传输未压缩的数据?我是不是错过了什么?
代码:
拉姆达:
import json
import boto3
firehose = boto3.client("firehose")
record = {'field_1': 'test'} # dict/json
record_string = json.dumps(record) + '\n' # Firehose expects ndjson
response = firehose.put_record(
DeliveryStreamName=my_stream_name,
Record={ 'Data': record_string }
)
消防水带(地形):
resource "aws_kinesis_firehose_delivery_stream" "my_firehose_stream" {
name = my_stream_name
destination = "extended_s3"
extended_s3_configuration {
role_arn = my_role_arn
bucket_arn = my_bucket_arn
prefix = "my_prefix/!{partitionKeyFromQuery:extracted}/"
error_output_prefix = "my_error_prefix/"
buffering_size = 64 # MB
buffering_interval = 900 # seconds
compression_format = "GZIP" # Compress as GZIP
# Enabled to dynamic extract
processing_configuration {
enabled = true
processors {
type = "MetadataExtraction"
parameters {
parameter_name = "JsonParsingEngine"
parameter_value = "JQ-1.6"
}
parameters {
parameter_name = "MetadataExtractionQuery"
parameter_value = "{extracted:.extracted}"
}
}
}
dynamic_partitioning_configuration {
enabled = true
}
}
}