繁体   English   中英

Terraform 和 S3 - 如何将文件上传到现有存储桶

[英]Terraform and S3 - How to upload files to an existing bucket

如何在不破坏存储桶内容或重新创建存储桶的情况下将文件上传到现有的 s3 存储桶(由 terraform 基础设施创建)。

terraform {
  backend "s3" {
    bucket = "terraformtests"
    key    = "terraformstate.tf"
    region = "us-east-1"
  }
}


resource "aws_s3_bucket_object" "terraformtests" {
  bucket = "terraformtests"
  key    = "test/prod/1000/keys"
  source = "deploy"
  etag   = "${md5(file("keys"))}"

}

这就是我所拥有的。 它在第一次运行时运行良好,并将其上传到密钥空间“1000”。 当我编辑它并使用 1001 重新运行时,该脚本会尝试销毁之前在 test/prod/1000/keys 中创建的文件。 我想要做的就是

  • 导入现有表状态而不重新创建它
  • 将文件夹添加到键空间,而不触及表的先前内容。

您得到的结果是 Terraform 所期望的结果。

TF 在.tfstate文件中维护基础设施的“状态”。 它们是上次同步时基础架构的镜像。

.tf文件中描述了基础结构的理想状态。

运行terraform planterraform apply命令比较.tf.tfstate文件。 然后,所有存在于.tfstate中但不存在于 .tf 中的资源都将被销毁

在您的情况下,它在上一次运行的.tfstate中有键空间 1000 ,但在.tf中没有,因为您将它编辑为1001

绕过它的方法

  1. 按照 Winston 的评论中的建议使用 AWS CLI
  2. 为键空间 1001添加另一个资源,而不是编辑您拥有的资源

另外,我注意到你有

source = "deploy"
etag = "${md5(file("keys"))}"

通常,它们应该引用同一个文件:

source = "readme.md"
etag = "${filemd5("readme.md")}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM