如何用Terraform为API Gateway V2的$default路由配置AWS_IAM?
解决Terraform中API Gateway V2 $default路由冲突问题
问题根源
你在aws_apigatewayv2_api里设置了target参数时,AWS会自动帮你创建一个$default路由并关联到指定的Lambda函数。这时候再手动定义同名的aws_apigatewayv2_route资源,自然就会触发路由重复的冲突错误。
两种可行解决方案
方案1:把自动生成的$default路由导入Terraform管理
既然AWS已经创建了这个路由,直接把它纳入Terraform状态,再修改配置即可:
- 先拿到自动生成的路由ID,用AWS CLI执行(替换你的API ID):
aws apigatewayv2 get-routes --api-id <你的API ID> --query 'Items[?RouteKey==`$default`].RouteId' --output text - 把该路由导入Terraform状态:
terraform import aws_apigatewayv2_route.default_route <你的API ID>/<刚才拿到的路由ID> - 调整Terraform代码:移除
aws_apigatewayv2_api里的target参数,同时补充集成资源(替代原来target的功能):# HTTP API resource "aws_apigatewayv2_api" "api" { name = local.apigw_name protocol_type = "HTTP" # 删掉target参数,避免自动生成路由 } # 手动创建Lambda集成 resource "aws_apigatewayv2_integration" "default" { api_id = aws_apigatewayv2_api.api.id integration_type = "AWS_PROXY" integration_uri = aws_lambda_function.function.arn } # 修改已导入的默认路由,配置AWS_IAM认证 resource "aws_apigatewayv2_route" "default_route" { api_id = aws_apigatewayv2_api.api.id route_key = "$default" authorization_type = "AWS_IAM" target = "integrations/${aws_apigatewayv2_integration.default.id}" } - 执行
terraform apply,Terraform会更新已导入的路由,完成IAM认证配置。
方案2:全程手动搭建API、集成和路由
直接不用aws_apigatewayv2_api的target参数,从0到1手动配置所有资源,彻底避免自动生成路由的情况:
# HTTP API resource "aws_apigatewayv2_api" "api" { name = local.apigw_name protocol_type = "HTTP" } # 创建Lambda代理集成 resource "aws_apigatewayv2_integration" "default" { api_id = aws_apigatewayv2_api.api.id integration_type = "AWS_PROXY" integration_uri = aws_lambda_function.function.arn } # 创建$default路由并启用AWS_IAM认证 resource "aws_apigatewayv2_route" "default_route" { api_id = aws_apigatewayv2_api.api.id route_key = "$default" authorization_type = "AWS_IAM" target = "integrations/${aws_apigatewayv2_integration.default.id}" }
执行terraform apply就能完成配置,不会再出现路由冲突。
注意点
- 用方案1的话,必须删掉
aws_apigatewayv2_api里的target参数,不然以后销毁重建API时,AWS会再次自动生成$default路由,又会冲突。 - 手动创建集成时,
integration_type要设为AWS_PROXY,和原来target参数的代理集成行为一致。
内容的提问来源于stack exchange,提问作者ucipass
相关产品推荐
相关产品推荐

