对于初学者来说,我读过这个问题,但这个解决方案相当棘手,我希望有了新版本的Terraform,有一种更优雅的方法可以实现这一点。
我有多个IAM政策文件,如下所示:
data "aws_iam_policy_document" "policy1" {
...
}
data "aws_iam_policy_document" "policy2" {
...
}
data "aws_iam_policy_document" "policy3" {
...
}
我正试图用source_policy_documents
将它们合并为一个文档,就像这样:
data "aws_iam_policy_document" "combined" {
source_policy_documents = [
data.aws_iam_policy_document.policy1.json
data.aws_iam_policy_document.policy2.json
data.aws_iam_policy_document.policy3.json
]
}
我愿意提供";覆盖";变量,允许用户排除合并到最终策略中的每个文档。
我是Terraform的新手——有没有一种简单的方法可以动态构建source_policy_documents
,或者使用override_policy_documents
来获得我想要的东西?
谢谢!
这可能不是最有效的,但您可以这样做:我假设您有一些布尔变量来指示要启用或禁用的策略(policy1_enable、policy2_enable和policy3_enable(。
data "aws_iam_policy_document" "combined" {
source_policy_documents = concat(
var.policy1_enable == true? [data.aws_iam_policy_document.policy1.json]:[],
var.policy2_enable == true? [data.aws_iam_policy_document.policy2.json]:[],
var.policy3_enable == true? [data.aws_iam_policy_document.policy3.json]:[])
}