You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Terraform从AWS S3存储桶下载tar.gz文件

解决Terraform下载S3二进制tar.gz文件的问题

你的问题出在local_file的content字段——它是为文本内容设计的,直接把S3二进制对象的body赋值给它会因为编码解析错误损坏文件。下面是两种可行的解决思路:

方法一:用Terraform原生字段处理Base64编码

data.aws_s3_object返回的body对于二进制文件来说是Base64编码后的字符串,改用local_file的content_base64字段就能正确解码并写入二进制文件:

data "aws_s3_object" "example" {
  bucket = "some-bucket"
  key    = "someFile.tar.gz"
}

resource "local_file" "downloaded_file" {
  content_base64 = data.aws_s3_object.example.body
  filename       = "someFile.tar.gz"
}

方法二:通过AWS CLI下载(适合大文件)

如果文件体积较大,或者想利用AWS CLI的传输优化特性,可以用null_resource配合aws s3 cp命令直接下载,避免Terraform处理二进制内容的编码问题:

data "aws_s3_object" "example" {
  bucket = "some-bucket"
  key    = "someFile.tar.gz"
}

resource "null_resource" "download_s3_file" {
  provisioner "local-exec" {
    command = "aws s3 cp s3://some-bucket/someFile.tar.gz ./someFile.tar.gz"
  }

  # 当S3对象更新(ETag变化)时自动重新下载
  triggers = {
    etag = data.aws_s3_object.example.etag
  }
}

两种方法各有优劣:方法一纯Terraform原生实现,配置简单;方法二更适合大文件,且能复用AWS CLI的各种配置(比如重试策略、传输加速)。

内容的提问来源于stack exchange,提问作者tanovsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:24:55