terraform资源s3上传文件未更新

时间:2019-04-24 15:46:47

标签: terraform

我正在使用terraform将包含内容的文件上传到s3,但是,当内容更改时,我也需要更新s3文件。但是,由于状态文件存储了s3上传已完成,因此它不会上传新文件。

resource "local_file" "timestamp" {
  filename = "timestamp"
  content = "${timestamp()}"
}


resource "aws_s3_bucket_object" "upload" {
 bucket = "bucket"
 key = "date"
 source = "timestamp"
}



预期:

检测到

aws_s3_bucket_object更改 aws_s3_bucket_object.timestamp正在创建...

结果:

aws_s3_bucket_object刷新状态...

1 个答案:

答案 0 :(得分:1)

当您为Terraform提供文件路径而不是直接上载内容时,文件名称决定了是否需要更新资源,而不是文件内容。

对于如示例中所示的一小段数据,最简单的解决方案是直接在资源配置中指定数据:

resource "aws_s3_bucket_object" "upload" {
 bucket  = "bucket"
 key     = "date"
 content = "${timestamp()}"
}

如果文件实际上太大而无法合理地加载到字符串变量中,或者如果它包含无法加载到字符串中的原始二进制数据,则可以将对象的etag设置为MD5哈希值内容,以便提供者可以看到内容何时更改:

resource "aws_s3_bucket_object" "upload" {
 bucket  = "bucket"
 key     = "date"
 source  = "${path.module}/timestamp"
 etag    = "${filemd5("${path.module}/timestamp")}"
}

通过设置etag,对文件内容的任何更改都将导致此哈希结果发生更改,从而使提供程序能够检测到需要更新对象。