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

Terraform拼接aws_api_gateway_integration的uri参数报错求助

问题

我有一个绑定值为dev的Lambda别名,在AWS API Gateway控制台中可以设置Lambda函数及其别名或版本,格式为function-arn:alias或function-arn:version。但尝试通过拼接方式设置Terraform的aws_api_gateway_integration的uri参数时,出现以下错误:

Error updating API Gateway Integration: BadRequestException: Integrations of type 'AWS_PROXY' currently only supports Lambda function and Firehose stream invocations.

对应的Terraform代码如下:

resource "aws_api_gateway_integration" "foo_bar" {
  rest_api_id             = xxx
  resource_id             = xxx
  http_method             = xxx
  integration_http_method = "POST"
  type                    = "AWS_PROXY"
  uri                     = "${var.lambdaxyz_lambda_arn}:${var.environment}"
}

解决方法

问题出在uri参数的格式上,直接拼接Lambda ARN和别名的写法不符合API Gateway Lambda代理集成的URI规范。正确的URI需要遵循API Gateway调用Lambda的标准格式,完整结构如下:

arn:aws:apigateway:<aws-region>:lambda:path/2015-03-31/functions/<lambda-function-arn>:<alias-or-version>/invocations

修改后的Terraform代码可以这样写:

resource "aws_api_gateway_integration" "foo_bar" {
  rest_api_id             = xxx
  resource_id             = xxx
  http_method             = xxx
  integration_http_method = "POST"
  type                    = "AWS_PROXY"
  uri                     = "arn:aws:apigateway:${var.aws_region}:lambda:path/2015-03-31/functions/${var.lambdaxyz_lambda_arn}:${var.environment}/invocations"
}

需要注意几个关键点:

  • 替换<aws-region>为你的AWS区域变量(比如var.aws_region)
  • 确保var.lambdaxyz_lambda_arn是完整的Lambda函数ARN(不带别名后缀)
  • :${var.environment}部分对应你的Lambda别名或版本号
  • 末尾必须加上/invocations路径,这是API Gateway调用Lambda的必填路径

另外,也可以借助Terraform的aws_lambda_function数据源或资源的qualified_arn属性,它会直接返回包含别名/版本的完整ARN,再拼接调用路径:

# 假设已有aws_lambda_function资源或数据源
data "aws_lambda_function" "lambda_xyz" {
  function_name = "your-function-name"
  qualifier     = var.environment # 别名或版本
}

resource "aws_api_gateway_integration" "foo_bar" {
  rest_api_id             = xxx
  resource_id             = xxx
  http_method             = xxx
  integration_http_method = "POST"
  type                    = "AWS_PROXY"
  uri                     = "arn:aws:apigateway:${var.aws_region}:lambda:path/2015-03-31/functions/${data.aws_lambda_function.lambda_xyz.qualified_arn}/invocations"
}

这种方式更可靠,避免手动拼接ARN时出现格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:40:28