Terraform关联AWS现有使用计划时属性被覆盖的问题求助
解决方案:保留现有使用计划设置并新增API关联
当你导入现有AWS API Gateway使用计划到Terraform后,必须在资源配置中完整声明所有原有属性,否则Terraform会将未声明的属性视为要移除的配置,导致原有关联API、限流和配额丢失。以下是具体步骤:
1. 导出现有使用计划的完整配置
导入使用计划后,执行以下命令获取该资源的当前完整状态:
terraform show aws_api_gateway_usage_plan.bulk_load
从输出中提取所有原有属性,包括:
- 原有的
api_stages列表 throttle(限流设置)quota(配额设置)- 其他如
description、tags等属性
2. 更新Terraform配置,合并原有与新增设置
将提取的属性补充到aws_api_gateway_usage_plan.bulk_load资源块中,同时追加新的API关联。示例配置如下:
import { to = aws_api_gateway_usage_plan.bulk_load id = "xifkaf" } resource "aws_api_gateway_usage_plan" "bulk_load" { name = "bulk_load" description = "原有使用计划描述" # 保留原有描述 tags = { # 保留原有标签 Environment = "QA" } # 合并原有API阶段与新API阶段 api_stages { api_id = "原有API的ID" stage = "原有阶段名称" } api_stages { api_id = aws_api_gateway_rest_api.my_rest_api.id stage = aws_api_gateway_stage.qa.stage_name } # 保留原有限流设置 throttle { rate_limit = 100 burst_limit = 200 rate_limit_per_api = false } # 保留原有配额设置 quota { limit = 10000 offset = 0 period = "MONTH" } }
3. 处理API密钥关联(可选)
如果原有使用计划关联了API密钥,注意aws_api_gateway_usage_plan中的api_key参数已被弃用,应使用单独的aws_api_gateway_usage_plan_key资源来管理关联:
- 导入现有关联关系:
import { to = aws_api_gateway_usage_plan_key.bulk_load_key_1 id = "使用计划ID:API密钥ID" }
- 定义资源(无需额外配置,导入后Terraform会保留关联):
resource "aws_api_gateway_usage_plan_key" "bulk_load_key_1" { key_id = "原有API密钥ID" key_type = "API_KEY" usage_plan_id = aws_api_gateway_usage_plan.bulk_load.id }
关键说明
- Terraform采用声明式配置,资源块中的定义会完全覆盖远程状态。未在配置中声明的属性会被Terraform移除,因此必须确保配置包含所有需要保留的原有设置。
- 虽然没有专门的
aws_api_gateway_usage_plan数据源,但导入后通过terraform show可以直接获取现有资源的完整属性,这是最简便的方式来同步配置与远程状态。
内容的提问来源于stack exchange,提问作者Joking_Clock
相关产品推荐
相关产品推荐

