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
相关产品推荐
相关产品推荐

