【问题标题】:Importing terraform aws_iam_policy导入 terraform aws_iam_policy
【发布时间】:2022-04-07 23:57:11
【问题描述】:

我正在尝试导入由我不拥有的自动化自动添加的 terraform aws_iam_policy。导入似乎有效,但是一旦我运行 terraform 计划,我就会收到以下错误

* aws_iam_policy.mypolicy1: "policy": required field is not set

我正在运行 terraform 导入,如下所示。

terraform import aws_iam_policy.mypolicy1 <myarn>

这是我相关的 terraform 配置

resource "aws_iam_policy" "mypolicy1" {

}

resource "aws_iam_role_policy_attachment" "mypolicy1_attachment`" {
    role       = "${aws_iam_role.myrole1.name}"
    policy_arn = "${aws_iam_policy.mypolicy1.arn}"
}

resource "aws_iam_role" "myrole1" {
     name = "myrole1"
     assume_role_policy = "${file("../policies/ecs-role.json")}"
}

我仔细检查了 terraform.tfstate 是否包含我要导入的策略。我这里还有什么遗漏的吗?

【问题讨论】:

  • 正如 ydaetskcoR 已经指出的那样,您需要添加 terraform 配置以“创建”现有资源,以及将现有资源添加到状态文件中。您可能会发现 terraforming 是一个有用的工具来帮助您解决此问题。

标签: amazon-web-services terraform


【解决方案1】:

您仍然需要在 Terraform 配置中提供必填字段才能使计划生效。

如果您从配置中删除 aws_iam_policy 资源并在导入策略后运行计划,您应该会看到 Terraform 想要销毁该策略,因为它在状态文件中但不在配置中。

只需设置您的 aws_iam_policy 资源以匹配导入的策略,然后计划应该不会显示任何更改。

【讨论】:

  • 谢谢。文档对于这应该如何工作真的很困惑。
【解决方案2】:

我终于找到了一个相对优雅且通用的解决方法,以解决 Amazon 对 import IAM 策略 功能实施不佳的问题。该解决方案不需要您对要导入的“aws_iam_policy”资源的 Amazon 或其他任何人的实施进行反向工程。

有两个步骤。

  1. 创建具有“生命周期”参数的 aws_iam_policy 资源定义,并带有 ignore_changes 列表。 aws_iam_policy 资源中有三个字段会触发替换:策略、描述和路径。将这三个字段添加到 ignore_changes 列表中。
  2. 导入外部 IAM 策略,并将其附加到您在资源文件中创建的资源定义中。

资源文件(例如:static-resources.tf

resource "aws_iam_policy" "MyLambdaVPCAccessExecutionRole" {
  lifecycle {
    prevent_destroy = true
    ignore_changes = [policy, path, description]
  }
  policy = jsonencode({})
}

导入声明:使用您要导入的 IAM 策略的 arn,导入该策略并将其附加到您的资源定义中。

terraform import aws_iam_policy.MyLambdaVPCAccessExecutionRole arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

神奇之处在于您需要将字段添加到 ignore_changes 列表中,并为所需的“policy”参数添加一个占位符。由于这是一个必填字段,因此 Terraform 不会让您在没有它的情况下继续操作,即使这是您告诉 Terraform 忽略任何更改的字段之一。

注意:如果您使用 modules,则需要在资源引用的前面添加“module..”。例如

terraform import module.static.aws_iam_policy.MyLambdaVPCAccessExecutionRole arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2022-12-14
    • 2021-08-13
    • 2021-05-31
    • 2021-07-15
    • 2020-07-15
    • 2021-07-17
    • 2021-07-24
    • 2020-08-05
    相关资源
    最近更新 更多