arr*_*lue 5 amazon-web-services aws-lambda terraform aws-api-gateway
如果我手动添加 Lambda 函数类型的集成请求,Api 网关触发器会自动添加到 lambda 函数。
如果我通过 Terraform 执行此操作,一切看起来都是正确的,但当我查看 Lambda 函数时,它没有触发器。
如果我随后手动更新集成请求(更改为模拟并返回 Lambda 函数),触发器是否会添加到 Lambda 函数?之后一切正常。
我缺少什么?
resource "aws_api_gateway_integration" "integration" {
count = var.lambda_definition.apigateway ? 1 : 0
rest_api_id = "${data.terraform_remote_state.apigateway.outputs.apigateway_id}"
resource_id = aws_api_gateway_resource.api_proxy_resource[count.index].id
http_method = "${aws_api_gateway_method.method[count.index].http_method}"
integration_http_method = "ANY"
type = "AWS_PROXY"
uri = aws_lambda_function.lambda.invoke_arn
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*cin 12
由于您没有提到是否为您的函数指定了适当的权限,我的猜测是您缺少aws_lambda_permission。这将明确授予api 调用您的函数的权限。
资源将是(仅示例):
resource "aws_lambda_permission" "allow_api" {
statement_id = "AllowAPIgatewayInvokation"
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.lambda.invoke_arn
principal = "apigateway.amazonaws.com"
}
Run Code Online (Sandbox Code Playgroud)
当您在控制台中手动执行此操作时,AWS 会在后台设置所有这些权限。
确保将其integration_http_method
设置为POST
而不是ANY
示例中的设置:
integration_http_method = "POST"
Run Code Online (Sandbox Code Playgroud)
请参阅AWS 文档- 中途 - 红色框显示“! 重要的':
对于 Lambda 集成,根据函数调用的 Lambda 服务操作规范,您必须使用 POST 的 HTTP 方法进行集成请求。apigAwsProxyRole 的 IAM 角色必须具有允许 apigateway 服务调用 Lambda 函数的策略。有关 IAM 权限的更多信息,请参阅调用 API 的 API Gateway 权限模型。
归档时间: |
|
查看次数: |
6245 次 |
最近记录: |