Terraform - 有条件合并多个 aws_iam_policy_document

fla*_*ang 2 terraform terraform-provider-aws

对于初学者来说,我已经读过这个问题,但该解决方案相当老套,我希望使用新版本的 Terraform 可以有一种更优雅的方法来实现这一目标。

我有多个 IAM 政策文档,如下所示:

data "aws_iam_policy_document" "policy1" { 
  ...
}

data "aws_iam_policy_document" "policy2" { 
  ...
}

data "aws_iam_policy_document" "policy3" { 
  ...
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试将它们合并到一个文档中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
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想提供“覆盖”变量,以允许用户排除每个文档被合并到最终策略中。

我是 Terraform 的新手 - 有没有一种简单的方法可以动态构建source_policy_documents或可以用来override_policy_documents获得我想要的东西?

谢谢!

Tec*_*ise 8

这可能不是最有效的,但您可以这样做:我假设您有一些布尔变量来指示要启用或禁用的策略(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]:[])
}
Run Code Online (Sandbox Code Playgroud)