gpt4 book ai didi

amazon-web-services - 通过 terraform 部署的 AWS API Gateway 和 Lambda 函数 -- 由于配置错误 : Invalid permissions on Lambda function 导致执行失败

转载 作者:行者123 更新时间:2023-12-03 14:10:14 27 4
gpt4 key购买 nike

我正在通过 Terraform 一起部署一个 API 网关和一个 Lambda 函数,而 Lambda 函数是由 API 网关触发的。资源成功部署后,我测试 API 网关并得到响应:

{ "message": "Internal server error" } .



API网关的实际日志说:

Execution failed due to configuration error: Invalid permissions on Lambda function



我可以通过转到 API 网关的集成请求部分,重新​​选择我现有的功能,然后用小复选标记再次“保存”它来获得实际的 api-lambda 功能,但这会破坏自动化,我希望它能够在没有每次都必须执行该手动步骤。不确定这是否是 Terraform/AWS 中的错误,或者我做错了什么。 (发现有人问同样的问题,但使用 SAM 但没有回复: Execution failed due to configuration error: Invalid permissions on Lambda function)

我当前的设置是通过 swagger json 文件部署 API,并且 Lambda Invoke ARN 用作此文件集成部分的 URI。我尝试在硬编码 ARN 和变量之间切换,但无济于事。我还尝试包含 aws_api_gateway_deployment 和 aws_api_gateway_integration 资源,但我认为如果我已经在使用 swagger 文件,那么使用这些文件会与 swagger 文件已经在构建的内容发生冲突。

我的 api_gateway 模块的 main.tf 如下所示:
resource "aws_api_gateway_rest_api" "post_session" {
name = "${var.api_gateway_name}"
body = "${data.template_file.post-session.rendered}"

endpoint_configuration {
types = ["PRIVATE"]
}
}

data "template_file" "post-session" {
template = "${file("../source/aapt-ual-post-session-v1-swagger-apigateway.json")}"

vars {
session_init_arn = "${var.session_init_function_arn}"
}
}

我的 Swagger 文件的相关部分如下所示:
"x-amazon-apigateway-integration": {
"uri": "${session_init_arn}",
"responses": {
"default": {
"statusCode": "200"
}
},
"requestTemplates": {
"application/json": ....

我的 Lambda 模块的 lambda_permission/api_gateway 触发器部分如下所示:
resource "aws_lambda_permission" "post_session_trigger" {
statement_id = "Allow_My_Post_Session_Invoke"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.init_function.function_name}"
principal = "apigateway.amazonaws.com"
source_arn = "arn:aws:execute-api:us-east-1:${var.account_id}:${var.post_session_id}/v1/POST/aa/ual/session"

}

如果您有任何建议,请告诉我,谢谢!

最佳答案

根据 Denis Weerasiri 的建议,我在 API Gateway 的集成部分重新选择了 Lambda 函数名称后检查了 Lambda 权限,它添加了另一个策略。我需要进行的更改是将 Lambda 函数资源的 source_arn 中的 v1 更改为 *。因此,我的 Lambda 模块中的新 API Gateway 触发器如下所示:

resource "aws_lambda_permission" "post_session_trigger" {
statement_id = "Allow_My_Post_Session_Invoke"
action = "lambda:InvokeFunction"
function_name = "${aws_lambda_function.init_function.function_name}"
principal = "apigateway.amazonaws.com"
source_arn = "arn:aws:execute-api:us-east-1:${var.account_id}:${var.post_session_id}/*/POST/aa/ual/session"}

关于amazon-web-services - 通过 terraform 部署的 AWS API Gateway 和 Lambda 函数 -- 由于配置错误 : Invalid permissions on Lambda function 导致执行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54835528/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com