Terraform 0.12仅在条件适用时包含语句

Terraform 0.12仅在条件适用时包含语句,terraform,amazon-iam,Terraform,Amazon Iam,我试图通过添加一些语句来创建aws_iam_policy_文档,但失败了,因为在我第一次调用此进程时,“arn:aws:iam::${var.account_number}:role/audit{var.deployment_identifier”角色不存在: data "aws_iam_policy_document" "kms_policy" { statement { sid = "Enable root access to k

我试图通过添加一些语句来创建aws_iam_policy_文档,但失败了,因为在我第一次调用此进程时,“arn:aws:iam::${var.account_number}:role/audit{var.deployment_identifier”角色不存在:

data "aws_iam_policy_document" "kms_policy" {
  statement {
    sid = "Enable root access to kms key"

    effect = "Allow"

    principals {
      type        = "AWS"
      identifiers = ["${var.root_role}"]
    }

    actions = [
      "kms:Create*",
      "kms:Describe*"
    ]

    resources = ["*"]
  }

  statement {
    sid = "Allow encryption access for specific roles"

    effect = "Allow"

    principals {
      type        = "AWS"
      identifiers = "["arn:aws:iam::${var.account_number}:role/audit_${var.deployment_identifier}"]"
    }

    actions = [
      "kms:Encrypt"
    ]

    resources = ["*"]
  }
}
问题是,我需要最后一个声明,因为它需要进一步向前迈进


当我第一次运行此过程时,如何检查角色是否存在,如果不存在,则不能添加该语句?

您是否在Terraform代码中的其他位置定义IAM角色?如果是,您可以使用
dependens_
参数使Terraform在创建此策略文档之前创建角色。我是,b但在另一个模块中,由于这是TF 0.12,
dependens\u on
对模块内的依赖项不起作用。不幸的是,如果您可以让另一个模块输出角色名称,您可以在
aws\u iam\u policy\u文档
中的
标识符
字段中使用该输出,这将导致Terraform首先创建角色d然后是这个政策文件。
aws_iam_policy_文件
数据源只是在Terraform的内存中创建了一个政策文件,所以只要你插入的所有数据都是可用的,那么这种情况发生的时间应该无关紧要。我假设还有其他下游资源引用了这个文件,这是失败的一个;你能更新你的问题吗包括该资源的配置,以及您尝试应用它时看到的完整错误消息?您是否在Terraform代码的其他地方定义了IAM角色?如果是,您可以使用
dependens_on
参数在创建此策略文档之前使Terraform创建角色。我是,但处于不同的位置模块由于这是TF 0.12,
dependens\u on
对模块内的依赖项不起作用。但是,如果您可以让另一个模块输出角色名称,您可以在
aws\u iam\u policy\u文档
标识符
字段中使用该输出,这将导致Terraform先创建角色,然后创建此策略y文档。
aws_iam_policy_文档
数据源只是在Terraform的内存中创建了一个策略文档,所以只要您插入的所有数据都可用,那么这种情况发生的时间就不重要了。我假设有其他下游资源引用了它,这是失败的一个;您能更新您的问题以包括t吗您是否也知道该资源的配置,以及您在尝试应用它时看到的完整错误消息?