尽管启用了压缩,Firehose 流仍以未压缩格式传送到 S3

问题描述 投票:0回答:1

我有 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
    }
  }
}

amazon-web-services amazon-s3 aws-lambda amazon-kinesis amazon-kinesis-firehose
1个回答
0
投票

如果您通过网络浏览器下载文件,则浏览器可能会“自动解压缩”文件,因为浏览器知道如何处理 gzip 压缩的网页。 要全面测试正在发生的情况,您应该

通过 AWS CLI 下载文件

,然后检查文件内容。 您还可以

比较 S3 中显示的文件大小

与本地磁盘上的大小。 参见:

GZIP 是浏览器自动解压的吗?

© www.soinside.com 2019 - 2024. All rights reserved.