You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform v0.12.31运行plan时aws_iam_role参数不支持错误如何解决

错误原因

你遇到的报错是使用的AWS Provider版本过低导致的:

  • managed_policy_arns参数和inline_policy内嵌块是AWS Provider v3.0.0版本才正式加入aws_iam_role资源的新属性
  • 你当前使用的Terraform 0.12.31默认搭配的是v2.x及更早版本的AWS Provider,不识别这两个配置项,所以抛出不支持的参数/块错误。

解决方案

方案1:升级AWS Provider版本(推荐)

在你的Terraform配置的provider块里指定AWS Provider版本≥3.0.0即可,示例:

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}

修改后执行terraform init -upgrade更新Provider,之后再执行terraform plan就不会报错了。

方案2:兼容旧版AWS Provider写法

如果不方便升级Provider,就把这两个配置单独拆成独立资源即可,修改后的iam.tf代码如下:

resource "aws_iam_role" "lambda_role" {
  name = "${var.name}-role"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Principal = {
          Service = "lambda.amazonaws.com"
        }
      },
    ]
  })
}

# 绑定托管策略,替代原managed_policy_arns参数
resource "aws_iam_role_policy_attachment" "managed_policy_attach" {
  for_each   = toset(var.managed_policy_arns)
  role       = aws_iam_role.lambda_role.name
  policy_arn = each.value
}

# 内联策略,替代原inline_policy块
resource "aws_iam_role_policy" "step_function_policy" {
  name   = "step_function_policy"
  role   = aws_iam_role.lambda_role.name
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect   = "Allow"
        Action   = ["states:StartExecution"]
        Resource = "*"
      }
    ]
  })
}

这种写法完全兼容v2.x版本的AWS Provider,不需要升级即可正常执行。

内容的提问来源于stack exchange,提问作者Osamazx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 19:57:03