我正在通过 Terraform 一起部署 API 网关和 Lambda 函数,并且 Lambda 函数旨在由 API 网关触发。资源成功部署后,我测试 API 网关并得到响应:
{“消息”:“内部服务器错误”}。
API网关的实际日志说:
由于配置错误,执行失败:Lambda 函数的权限无效
我可以通过转到 API 网关的集成请求部分,重新选择我现有的功能,并用小复选标记再次“保存”它来使实际的 api-lambda 功能工作,但这会破坏自动化,我希望它在没有每次都必须执行该手动步骤。不确定这是 Terraform/AWS 中的错误还是我做错了什么。(发现有人问了同样的问题,但使用 SAM 但没有响应:由于配置错误,执行失败:Lambda 函数的权限无效)
我当前的设置是通过 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 { …Run Code Online (Sandbox Code Playgroud) amazon-web-services swagger aws-lambda terraform aws-api-gateway
我正在尝试通过 CLI 更新我的 API Gateway 实例上的资源策略,但我似乎找不到 JSON 的正确语法。在文档中它说要使用“补丁操作”,据我所知,它需要一串 JSON 来表示策略。我尝试过缩小 JSON、转义 JSON、单引号、无引号,但似乎没有任何效果。该文档在补丁操作的值字段中没有实际 JSON 的示例,所以我觉得有点迷茫。
我一直在尝试这个命令的变体:
aws apigateway update-rest-api --rest-api-id abcde123 --patch-operations op=replace,path=/policy,value='{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":"*","Action":"execute-api:Invoke","Resource":"arn:aws:execute-api:region:000000000000:*"},{"Effect":"Deny","Principal":"*","Action":"execute-api:Invoke","Resource":"arn:aws:execute-api:region:000000000000:*","Condition":{"StringNotEquals":{"aws:SourceVpce":["vpce-123456789","vpce-987654321"]}}}]}'
每次说时我都会收到错误消息:
Error parsing parameter '--patch-operations': Expected: '=', received: '{' for input:
相关文档在这里。