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

如何用Terraform在API Gateway中配置DELETE路由?

解决API Gateway v2中Terraform配置DELETE路由的错误

错误根源

你的DELETE方法集成配置错误:将Lambda函数的集成类型设为了HTTP_PROXY,但Lambda属于AWS服务集成,必须使用AWS_PROXY类型。HTTP_PROXY仅适用于转发请求到普通HTTP端点,因此会抛出"Invalid HTTP endpoint specified for URI"错误。

修正步骤

1. 修正DELETE集成的类型

将delete_weather_data_integration的integration_type改为AWS_PROXY,与POST方法的集成配置保持一致:

resource "aws_apigatewayv2_integration" "delete_weather_data_integration" {
  api_id             = aws_apigatewayv2_api.weather_api.id
  integration_type   = "AWS_PROXY" # 从HTTP_PROXY改为AWS_PROXY
  integration_method = "DELETE"

  integration_uri = aws_lambda_function.delete_weather_data.invoke_arn
}

2. 优化Lambda权限的Source ARN(推荐)

避免硬编码执行ARN,改用Terraform动态生成,防止后续API ID或阶段变更导致权限失效:

resource "aws_lambda_permission" "api_gateway_invoke_delete_weather_data" {
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.delete_weather_data.arn
  principal     = "apigateway.amazonaws.com"

  source_arn = "${aws_apigatewayv2_api.weather_api.execution_arn}/${aws_apigatewayv2_stage.weather_api_stage.name}/DELETE/*"
}

# 同时建议把POST的权限也改成动态生成:
resource "aws_lambda_permission" "api_gateway_invoke_weather_router" {
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.weather_router.arn
  principal     = "apigateway.amazonaws.com"

  source_arn = "${aws_apigatewayv2_api.weather_api.execution_arn}/${aws_apigatewayv2_stage.weather_api_stage.name}/POST/*"
}

完整修正后的关键代码片段

# DELETE方法集成
resource "aws_apigatewayv2_integration" "delete_weather_data_integration" {
  api_id             = aws_apigatewayv2_api.weather_api.id
  integration_type   = "AWS_PROXY"
  integration_method = "DELETE"

  integration_uri = aws_lambda_function.delete_weather_data.invoke_arn
}

# DELETE路由
resource "aws_apigatewayv2_route" "delete_weather_data_route" {
  api_id    = aws_apigatewayv2_api.weather_api.id
  route_key = "DELETE /weather"

  target = "integrations/${aws_apigatewayv2_integration.delete_weather_data_integration.id}"
}

# DELETE对应的Lambda权限
resource "aws_lambda_permission" "api_gateway_invoke_delete_weather_data" {
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.delete_weather_data.arn
  principal     = "apigateway.amazonaws.com"

  source_arn = "${aws_apigatewayv2_api.weather_api.execution_arn}/${aws_apigatewayv2_stage.weather_api_stage.name}/DELETE/*"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:22:42