gpt4 book ai didi

amazon-web-services - 在 Terraform 中插入数据源名称

转载 作者:行者123 更新时间:2023-12-04 08:03:47 25 4
gpt4 key购买 nike

我正在尝试编写一个用于将存储桶策略附加到 AWS S3 存储桶的 terraform 模块。这是代码:

data "aws_iam_policy_document" "make_objects_public" {
# if policy_name == <this-policy-name>, then generate policy
count = "${var.policy_name == "make_objects_public" ? 1 : 0}"

statement {
...
}
}

resource "aws_s3_bucket_policy" "bucket_policy" {
# if policy_name != "", then add the generated policy
count = "${var.policy_name != "" ? 1 : 0}"

bucket = "${var.bucket_name}"
policy = "${data.aws_iam_policy_document.<policy-name-goes-here>.json}"
}

我想插入 policy_name获取 aws_iam_policy_document 生成的策略时的变量.我尝试了几件事,但遗憾的是它们没有用。这在 terraform 中可能吗?

我尝试了这些技巧:
policy = "${data.aws_iam_policy_document."${var.policy_name}".json}"

policy = "${"${format("%s", "data.aws_iam_policy_document.${var.policy_name}.json")}"}"

policy = "${format("%s", "$${data.aws_iam_policy_document.${var.policy_name}.json}")}"

谢谢。

最佳答案

不支持动态资源名称,因为 Terraform 必须在开始处理插值之前构建依赖关系图,因此这些关系必须是明确的。

这种设置的推荐方法是将系统分解为小模块,然后可以由调用模块一起使用以产生所需的结果,而无需复制所有细节。

在这种特殊情况下,您可以例如将每个策略拆分为它自己的可重用模块,然后再编写一个可重用模块来创建 S3 存储桶并将给定策略与其关联。然后调用配置可以选择性地实例化一个适合其需要的策略模块以及通用 S3 存储桶模块,以创建所需的结果:

module "policy" {
# policy-specific module; only contains the policy data source
source = "../policies/make_objects_public"

# (any other arguments the policy needs...)
}

module "s3_bucket" {
# S3 bucket module creates a bucket and attaches a policy to it
source = "../s3_bucket" # general resource for S3 buckets with attached policies

name = "example"
policy = "${module.policy.policy_json}" # an output from the policy module above
}

除了避免动态资源选择的需要之外,这还通过将策略生成与 S3 存储桶创建分离来增加灵 active ,并且原则上允许具有异常需求的调用模块完全跳过实例化策略模块而只使用 aws_iam_policy_document直接地。

上面的模式有点类似于 the dependency injection technique ,其中系统被分成小组件(在这种情况下为模块),然后根配置以适合特定用例的方式“连接”这些组件。这种方法与一般技术具有非常相似的优点和缺点。

关于amazon-web-services - 在 Terraform 中插入数据源名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45772606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com