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

如何用Terraform配置AWS APIGateway实现多路径绑定对应Lambda函数

缺失的Terraform配置补充说明

你原有配置中仅定义了根路径下的/demo资源节点,需要补充嵌套路径资源、对应HTTP方法、Lambda集成、调用权限以及API部署配置,完整补充代码如下:


# --------------------------
# 第一部分:GET /demo/user 相关配置
# --------------------------
# 创建 /demo/user 层级资源
resource "aws_api_gateway_resource" "demo_user" {
  rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
  parent_id   = aws_api_gateway_resource.MyDemoResource.id
  path_part   = "user"
}

# 定义GET /demo/user 方法
resource "aws_api_gateway_method" "get_demo_user" {
  rest_api_id   = aws_api_gateway_rest_api.MyDemoAPI.id
  resource_id   = aws_api_gateway_resource.demo_user.id
  http_method   = "GET"
  authorization = "NONE"
}

# 绑定GET /demo/user到hello Lambda
resource "aws_api_gateway_integration" "get_demo_user_lambda" {
  rest_api_id             = aws_api_gateway_rest_api.MyDemoAPI.id
  resource_id             = aws_api_gateway_resource.demo_user.id
  http_method             = aws_api_gateway_method.get_demo_user.http_method
  type                    = "AWS_PROXY"
  uri                     = "${aws_lambda_function.hello.invoke_arn}/invocations"
  integration_http_method = "POST"
}

# 授予API Gateway调用hello Lambda的权限
resource "aws_lambda_permission" "allow_apigw_call_hello" {
  statement_id  = "AllowAPIGatewayInvokeHello"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.hello.function_name
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.MyDemoAPI.execution_arn}/*/GET/demo/user"
}

# --------------------------
# 第二部分:PUT /demo/user/{id} 相关配置
# --------------------------
# 创建 /demo/user/{id} 路径参数资源
resource "aws_api_gateway_resource" "demo_user_id" {
  rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
  parent_id   = aws_api_gateway_resource.demo_user.id
  path_part   = "{id}"
}

# 定义PUT /demo/user/{id} 方法
resource "aws_api_gateway_method" "put_demo_user_id" {
  rest_api_id   = aws_api_gateway_rest_api.MyDemoAPI.id
  resource_id   = aws_api_gateway_resource.demo_user_id.id
  http_method   = "PUT"
  authorization = "NONE"
  request_parameters = {
    "method.request.path.id" = true
  }
}

# 绑定PUT /demo/user/{id}到test Lambda
resource "aws_api_gateway_integration" "put_demo_user_id_lambda" {
  rest_api_id             = aws_api_gateway_rest_api.MyDemoAPI.id
  resource_id             = aws_api_gateway_resource.demo_user_id.id
  http_method             = aws_api_gateway_method.put_demo_user_id.http_method
  type                    = "AWS_PROXY"
  uri                     = "${aws_lambda_function.test.invoke_arn}/invocations"
  integration_http_method = "POST"
  request_parameters = {
    "integration.request.path.id" = "method.request.path.id"
  }
}

# 授予API Gateway调用test Lambda的权限
resource "aws_lambda_permission" "allow_apigw_call_test" {
  statement_id  = "AllowAPIGatewayInvokeTest"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.test.function_name
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.MyDemoAPI.execution_arn}/*/PUT/demo/user/*"
}

# --------------------------
# 第三部分:API部署配置(必须配置否则无法对外提供服务)
# --------------------------
resource "aws_api_gateway_deployment" "demo_deploy" {
  rest_api_id = aws_api_gateway_rest_api.MyDemoAPI.id
  triggers = {
    redeployment = sha1(jsonencode([
      aws_api_gateway_resource.demo_user,
      aws_api_gateway_resource.demo_user_id,
      aws_api_gateway_method.get_demo_user,
      aws_api_gateway_method.put_demo_user_id
    ]))
  }
  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_api_gateway_stage" "demo_stage" {
  deployment_id = aws_api_gateway_deployment.demo_deploy.id
  rest_api_id   = aws_api_gateway_rest_api.MyDemoAPI.id
  stage_name    = "v1"
}

注意事项

  • 如果Lambda资源未在当前Terraform配置中定义,直接将代码中的aws_lambda_function.hello.invoke_arn和aws_lambda_function.test.invoke_arn替换为实际的Lambda调用ARN即可
  • 你原有配置中针对/demo路径的aws_api_gateway_integration.MyDemoIntegration和未显式定义的aws_api_gateway_method.MyDemoMethod如果不需要可以直接删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:24:04