Dmy*_*rov 3 automation amazon-s3 amazon-web-services terraform devops
我在某个根目录下有多个文件,让\xe2\x80\x99s将其称为module/data/。\n我需要将此目录上传到相应的S3存储桶。所有这一切都按预期工作:
\n\nresource "aws_s3_bucket_object" "k8s-state" {\n for_each = fileset("${path.module}/data", "**/*")\n bucket = aws_s3_bucket.kops.bucket\n key = each.value\n source = "${path.module}/data/${each.value}"\n etag = filemd5("${path.module}/data/${each.value}")\n}\nRun Code Online (Sandbox Code Playgroud)\n\n剩下的唯一一件事是我需要递归地循环所有文件,并!S3!用 terraform\xe2\x80\x99s 模块的变量值替换标记(例如 )。\n与此类似,但跨目录/子目录中的所有文件:
replace(file("${path.module}/launchconfigs/file"), \xe2\x80\x9c#S3\xe2\x80\x9d, aws_s3_bucket.kops.bucket)\nRun Code Online (Sandbox Code Playgroud)\n\n所以一句话的问题是:如何循环文件并用 terraform 中的变量替换其中的一部分?
\n一个选项可以是使用模板,代码如下所示:
provider "aws" {
region = "us-west-1"
}
resource "aws_s3_bucket" "sample_bucket2222" {
bucket = "my-tf-test-bucket2222"
acl = "private"
}
resource "aws_s3_bucket_object" "k8s-state" {
for_each = fileset("${path.module}/data", "**/*")
bucket = aws_s3_bucket.sample_bucket2222.bucket
key = each.value
content = data.template_file.data[each.value].rendered
etag = filemd5("${path.module}/data/${each.value}")
}
data "template_file" "data" {
for_each = fileset("${path.module}/data", "**/*")
template = "${file("${path.module}/data/${each.value}")}"
vars = {
bucket_id = aws_s3_bucket.sample_bucket2222.id
bucket_arn = aws_s3_bucket.sample_bucket2222.arn
}
}
Run Code Online (Sandbox Code Playgroud)
你source可以看到我正在使用contenttemplate_file,这是该资源与你的资源的唯一区别
在您的文件上,变量可以像这样使用:
Hello ${bucket_id}
Run Code Online (Sandbox Code Playgroud)
我的所有测试代码都在这里:
https ://github.com/heldersepu/hs-scripts/tree/master/TerraForm/regional
| 归档时间: |
|
| 查看次数: |
4894 次 |
| 最近记录: |