amazon-web-services - 控制台和 CLI 之间不同的 S3 下载行为

标签 amazon-web-services amazon-s3 aws-cli amazon-cloudwatchlogs amazon-kinesis-firehose

我设置了一个 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/

相关文章:

amazon-web-services - 使用本地机器从 s3 读取数据 - pyspark

amazon-web-services - EMR 主节点是否知道其集群 ID?

amazon-web-services - 云形成 SSHLocation 语法是什么?

php - 从浏览器直接上传到S3(亚马逊)和https麻烦

amazon-web-services - 未找到名为 Assume-role-with-web-identity 的凭据

node.js - 如何在 aws s3 中指定索引文档?

ruby-on-rails - 如何在 ruby​​ on rails 中使用 aws-s3 或 aws-sdk gem 跨存储桶复制文件

azure - Azcopy 数据移动的最佳替代方案是什么?

aws-cloudformation - 在 `aws cloudformation deploy --parameter-overrides` 中,如何将多个值传递给 `List<AWS::EC2::Subnet::ID>` 参数?

linux - 使用 AWS CLI 进行 Bash - 无法找到凭证