Terraform 渲染地形模板时会发生什么
我在下面的链接中遇到了一个关于模板文件的terraform示例代码 policies/s3\u bucket\u readonly.json.tplTerraform 渲染地形模板时会发生什么,terraform,Terraform,我在下面的链接中遇到了一个关于模板文件的terraform示例代码 policies/s3\u bucket\u readonly.json.tpl { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::${bucket_name}", "arn:aws:s3:::${
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::${bucket_name}",
"arn:aws:s3:::${bucket_name}/${key_prefix}"
],
"Effect": "Allow"
}
]
}
地形文字
data "template_file" "cloud-trail-logs-s3-readonly" {
template = "${file("policies/s3_bucket_readonly.json.tpl")}"
vars {
bucket_name = "${aws_s3_bucket.cloudtrail-logs.bucket}"
key_prefix = "AWSLogs/*"
}
}
resource "aws_s3_bucket" "cloudtrail-logs" {
bucket = "cloudtrail-logs"
acl = "private"
lifecycle_rule {
enabled = true
noncurrent_version_expiration {
days = 30
}
}
}
resource "aws_iam_policy" "cloudtrail-logs-readonly" {
name = "prod-cloudtrail-logs-s3-readonly"
path = "/production/"
description = "Readonly access to cloudtrail-logs bucket"
policy = "${data.template_file.cloud-trail-logs-s3-readonly.rendered}"
}
有人能解释一下${data.template_file.cloud-trail-logs-s3-readonly.rendered}的实际用途吗??它是否只是将模板变量值应用于policies/s3_bucket_readonly.json.tpl并添加与policy相同的内容??如果是,那么“.rendered”是什么意思或代表什么?是的,即使你的措辞不准确,你也是对的。这是应用变量后模板policies/s3_bucket_readonly.json.tpl的结果 查看文档(属性参考) 渲染-最终渲染的模板 terraform呈现模板后,策略的值将是模板的内容 解释HCL后(terraform语言称为HCL-Hashicorp配置语言),“${bucket\u name}”将等同于在vars块的模板资源中传递的“${aws\u s3\u bucket.cloudtrail logs.bucket}”,以及“${key\u prefix}”到AWSLogs/* 我认为“${aws\u s3\u bucket.cloudtrail logs.bucket}”将引用字符串“cloudtrail logs”(aws\u s3\u bucket资源中bucket属性的值) 因此,政策价值应该是:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::cloudtrail-logs",
"arn:aws:s3:::cloudtrail-logs/AWSLogs/*"
],
"Effect": "Allow"
}
]
}
所以“.rendered”是导致模板中的变量被值替换的原因吗?我想说的不是“什么原因”,而是结果。运行terraform apply是导致模板中的变量被值替换的原因。为了澄清,terraform代码id不是一次解释的。首先呈现模板,并且仅在依赖于模板的块也被插入之后。你可以看看。但假设您不使用。在代码中的任何地方呈现,模板仍然呈现,但结果从未使用过,即使它可用。我认为这澄清了它…谢谢