【问题标题】:Terraform create and attach aws iam policiesTerraform 创建并附加 aws iam 策略
【发布时间】:2022-01-19 17:29:28
【问题描述】:

我需要从 json 文件创建多个 iam 策略。 所以,我有一个名为 iam_policies.tf 的文件,其中包含许多这样的代码:


resource "aws_iam_policy" "name" {
  name        = "policy-name"
  description = "Policy desc xxx"
  path        = "/"

  policy = file("${path.module}/_/iam_policies/policy.json")
}

在一个模块中,我想将这些策略用作 var 的参数,但是当我尝试附加策略时...

resource "aws_iam_role_policy_attachment" "me" {
  for_each   = toset(var.policies)
  role       = aws_iam_role.me.name
  policy_arn = each.value
}

我收到错误:“for_each”值取决于在应用之前无法确定的资源属性,因此 Terraform 无法预测将创建多少个实例。要解决此问题,请使用 -target 参数首先仅应用 for_each 所依赖的资源。

这是创建策略资源和其他资源的模块:

module "admin" {
  source = "./repo/module_name"

  policies = [
    aws_iam_policy.common.arn,
    aws_iam_policy.ses_sending.arn,
    aws_iam_policy.athena_readonly.arn,
    aws_iam_policy.s3_deploy.arn,
  ]
...
}

我尝试过使用depends_on,但它不起作用。

我正在使用 terraform cloud,所以我不能使用 apply -target

我该怎么办?怎么了? 谢谢

【问题讨论】:

  • 进展如何?仍然不清楚你能做什么?
  • 我应用了策略,然后应用了资源。但我需要了解如何仅通过一次申请来应用政策和资源。我不知道如何处理 CI/CD
  • 你不能一次申请。您必须完全重新架构您的设计。

标签: amazon-web-services terraform aws-policies terraform-cloud


【解决方案1】:

如果您不能使用目标,则必须将您的部署分成两个部署。首先部署策略,然后它们将成为主部署的输入。

【讨论】:

  • 好的,谢谢。但是,有没有办法一次性部署所有内容?也许我需要以不同的方式重写所有 tf​​ 代码?
  • @Daniele 您可以创建一个简单的 CI/CD 管道,它将为您处理所有部署。
猜你喜欢
  • 2021-05-20
  • 2018-04-13
  • 2019-08-14
  • 2018-01-11
  • 2021-06-04
  • 2017-10-22
  • 1970-01-01
  • 2020-11-11
  • 2016-06-05
相关资源
最近更新 更多