Terraform关联API Gateway使用计划报api_stages.0.stage必填错误
问题产生原因
该报错是资源属性引用逻辑错误导致的:
- 当配置中单独使用
aws_api_gateway_stage资源管理API网关阶段时,aws_api_gateway_deployment资源不会内联配置stage_name参数,此时aws_api_gateway_deployment.main.stage_name的返回值为null - Terraform在解析
aws_api_gateway_usage_plan的api_stages配置块时,识别到stage传入的是空值,等同于未定义该参数,因此触发必填参数缺失的校验错误
可行修复方案
根据你当前已经单独声明aws_api_gateway_stage资源的配置结构,选择第一种方案即可快速修复:
- 修正
stage参数的引用路径,直接指向独立stage资源的属性,同时补充显式依赖避免资源创建顺序异常,修改后的使用计划资源配置如下:
resource "aws_api_gateway_usage_plan" "main" { name = var.project api_stages { api_id = aws_api_gateway_rest_api.main.id stage = aws_api_gateway_stage.main.stage_name # 替换原有deployment的stage_name引用 } quota_settings { limit = 10000 period = "WEEK" } throttle_settings { burst_limit = 5 rate_limit = 50 } tags = var.tags # 补充显式依赖,确保stage创建完成后再关联使用计划 depends_on = [aws_api_gateway_stage.main] }
- 备选方案:如果你不需要通过独立资源管理stage,可以删除配置中的
aws_api_gateway_stage资源块,直接在aws_api_gateway_deployment资源中内联配置stage_name及对应stage参数,此时原有stage = aws_api_gateway_deployment.main.stage_name的引用可以正常取到有效值,无需调整。
注意:在你当前使用的
~>4.21.0版本AWS Provider中,禁止同时在aws_api_gateway_deployment内联配置stage、又单独声明aws_api_gateway_stage资源,两种stage管理方式二选一即可,否则会出现配置冲突、stage重复创建的问题。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

