我设置了一个 cloudwatch 日志组,通过 kinesis 和 firehose 将日志作为 gzip 压缩文件流式传输到 s3 存储桶中。
gzip 文件都带有一些元数据标记:
Content-Encoding gzip
Content-Type application/octet-stream
当我直接从浏览器控制台下载其中一个文件并将其解压缩时,我得到了日志文件的预期内容,即 json 字符串。但是,如果我使用 aws CLI 在本地 cp
文件并解压缩内容,则该文件在终端上呈现为二进制文件。
AWS 控制台下载按钮和 AWS CLI s3 cp
命令之间的行为差异可能是什么原因?
我已经尝试指定命令行标志的各种组合
aws s3 cp --content-encoding gzip --content-type "application/json"
aws s3 cp --content-encoding gzip --content-type "application/octet-stream"
aws s3 cp --content-encoding gzip --content-type "application/octet-stream" --sse-kms-key-id <keyArn>
但是它们都没有产生我在浏览器中使用控制台时获得的积极结果。
更新
s3 cli 版本的文件比管理控制台版本大了近 10KB。
最佳答案
Firehose 被设置为压缩消息的内容。然而,cloudwatch 也已经压缩了消息。
当浏览器从 S3 下载文件时,它会自动解压缩两层压缩中的第一层。因此,第二次解压得到了预期的日志。
CLI 不执行此自动解压缩。因此,解压缩文件仍然会产生压缩的二进制文件。第二次减压解决了问题。
关于amazon-web-services - 控制台和 CLI 之间不同的 S3 下载行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60028162/