通过 terraform 部署的 AWS API Gateway 和 Lambda 函数 -- 由于配置错误而执行失败:Lambda 函数的权限无效

2024-01-02

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

{ "message": "内部服务器错误" } 。

API网关的实际日志显示:

由于配置错误而执行失败:Lambda 函数的权限无效

我可以通过转到 API 网关的集成请求部分、重新选择现有函数并使用小复选标记再次“保存”它来使实际的 api-lambda 功能正常工作,但这会破坏自动化,我希望它无需每次都必须执行该手动步骤。不确定这是否是 Terraform/AWS 中的错误,或者我是否做错了什么。 (发现有人问同样的问题但使用 SAM 但没有回复:由于配置错误而执行失败:Lambda 函数的权限无效 https://stackoverflow.com/questions/54067224/execution-failed-due-to-configuration-error-invalid-permissions-on-lambda-funct/54835261#54835261)

我当前的设置是通过 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"

}

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


根据来自的建议丹尼斯·维拉西里 https://stackoverflow.com/users/690041/denis-weerasiri,我在API网关的集成部分重新选择Lambda函数名称后检查了Lambda权限,它添加了另一个策略。我需要进行的更改是将 Lambda 函数资源中的 source_arn 中的 v1 更改为 *。因此,我的 Lambda 模块中的新 API 网关触发器如下所示:

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"}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 terraform 部署的 AWS API Gateway 和 Lambda 函数 -- 由于配置错误而执行失败:Lambda 函数的权限无效 的相关文章

  • Visual Studio Code - .net core - 生成xml文档

    我们正在使用Swagger UI描述我们项目 API 的文档 Swagger 必须从中读取 XMLprojectname xml显示所有 C R U D 我们在项目中拥有的功能 问题是当我从 Visual Studio 切换到 Visual
  • 如何使用 AWS CodeCommit 作为 Spring Cloud Config 的存储库

    我正在尝试将 AWS CodeCommit 存储库与 Spring Cloud 配置结合使用 我已经设法让它与 SSH 一起工作 但我想使用 https 而不是 SSH AWS 建议使用凭证助手 有谁知道如何配置 spring config
  • Django 和 AWS 简单电子邮件服务 [重复]

    这个问题在这里已经有答案了 我正在尝试启动并运行 django 站点 并且正在尝试启用 django 的标准密码重置服务 我的网站由 AWS EC2 托管 因此我想将 AWS SES 用于我的电子邮件服务 但是 我无法使 smtp 连接正常
  • 超时后无法部署到 AWS Elastic Beanstalk

    我是 AWS Elastic Beanstalk 的新手 这是我第一次遇到此问题 我尝试通过将我的应用程序 zip 上传到实例来部署新版本 更新完成后出现错误 已完成 但命令行超时 我增加了配置文件中的超时并重新部署 之后我收到了此消息 在
  • 调用API“找不到模块”时AWS lambda层错误

    我尝试使用 AWS Lambda 层 观看了有关它的教程 但收到错误 找不到模块 service aws nodejs package exclude gitignore package json git provider name aws
  • AWS CloudSearch:1 个域中的不同文档?

    我有兴趣在我的 Web 应用程序中使用 AWS Cloud Search 我想要将 3 种不同的文档类型设为可搜索 用户 文章 图像 使用 Cloud Search 执行此操作的最佳方法是什么 我需要创建 3 个不同的 AWS 搜索域吗 这
  • 对于 aws s3,预检响应无效(重定向)

    我正在尝试将图像上传到我的 Amazon S3 存储桶 但即使我已经正确设置了 CORS 配置 我仍然收到此 CORS 错误 这是我的 CORS 配置
  • 如何使用模式验证空手道中的多个可能值

    我目前正在使用 Swagger 模式 它定义了多个值的枚举 我想知道如何针对我的傲慢文件做出回应 我想确保返回的响应值只是架构中指定的值之一 想想 Swagger 中的枚举 如果响应中返回了架构内数组中未定义的任何其他内容 则测试应该失败
  • 在 EB 上的 Docker 中运行的应用程序拒绝连接到自身

    我有一个 Play 2 Web 应用程序 我使用 Docker 将其部署到 Elastic Beanstalk 在此 Web 应用程序中 我启动了一个 Akka 集群 启动过程涉及将自动伸缩组中的所有节点添加为种子节点 包括其自身 第一次部
  • 在哪里可以找到 AWS Amplify Logger 日志

    我目前正在开发一个使用 AWS Amplify 创建的 Web 应用程序 我必须在其中实现日志记录 基于AWS 放大文档 https docs amplify aws lib utilities logger q platform js有一
  • 当操作系统为 Windows Server 2019 时,ec2 私有子网无法到达 169.254.169.254

    我有多个 ec2 实例在私有子网中运行 仅允许 vpc 内的流量 其中一些实例是自定义操作系统 其中一些实例运行 AWS windows server 2012 ami 有些运行 AWS Windows Server 2019 ami 在所
  • CORS 击败 AWS LAMBDA :(

    我读了很多关于 CORS Lambda AWS API Gateway 配置的文章 包括 AWS 的设置帮助 http docs aws amazon com apigateway latest developerguide how to
  • 尝试安装 AWS CLI,卡在一个步骤上

    我正在尝试为 mac 命令行安装 aws 我想我不明白我需要做什么 我在终端上安装了带有 wget 的 aws 捆绑包 解压后它完成了所有操作 但是当我需要配置我的凭据时 什么也没有出现把aws配置 以下是说明 http docs aws
  • AWS CodeBuild - 如何跳过构建

    我的构建是在每次推送到存储库和每次拉取请求时触发的 因此 CODEBUILD SOURCE VERSION 看起来像 pr 8 或 4570d2e7158cfef687af8da31d1ffec7b02e5ca3 我只希望为 pr 分支执行
  • 在无服务器的 Express 应用程序中使用 swagger 多次重定向到 swagger 端点

    我正在使用express serverless制作一个应用程序 我想在离线开发期间使用swagger jsdoc和swagger ui express 这是我的 swagger 配置 const express require server
  • 如何在 RTMP 流中嵌入 pic_timing SEI 挂钟时间码?

    我需要将我的桌面流式传输到 AWS MediaLive 服务 并且根据要求 我必须在流中包含挂钟时间码 AWS 支持人员善意地通知我 对于 h 264 编码流 我需要提供时间码作为 pic timing SEI 消息 我在 Windows
  • 如何处理自动缩放期间网络流量的突然激增

    我在 ELB 后面和 Auto Scaling 组中有两个 EC2 实例 扩大规模政策如下 CPUUtilization gt 70 持续 300 秒 添加一台服务器 当 Atoscaling 活动正在进行时 现有实例上的负载已达到 99
  • 最终保单规模(20539)大于限制(20480)

    我有一个 lambda 函数 我正在为 aws lambda 函数创建触发器 我使用规则创建了 54 个触发器 我必须创建更多触发器 但是当我再添加 1 个触发器时 我收到此错误消息The final policy size 20539 i
  • 身份验证 AWS Cognito SRP

    我正在编写一个控制台 POC 来演示 AWS 认知身份验证 应用程序池而不是联合身份 作为我们的 API 网关身份验证机制 不在 AWS 中托管 这是用 C 编写的 我已经成功创建了一个用户 并确认了他们 但现在我需要进行身份验证以检索我可
  • AWS步骤函数:动态选择资源

    我想根据上一步的结果动态选择 AWS Lambda 工作线程 就像是 Resource worker arn RunWorkers Type Map MaxConcurrency 0 InputPath output ResultPath

随机推荐

  • 将 Windows SID 存储在数据库中以供查找

    我有一个 ASP NET MVC 应用程序 我需要允许客户根据其环境配置 MembershipProviders 但仍然能够将该 MembershipUser 映射到我们数据库中的具体用户模型 Membership GetUser 将使我能
  • 将 Java 套接字配置为在断开连接时快速失败?

    我的服务器上有一个监听端口 我使用 Java 类连接到该端口Socket接口 即 Socket mySocket new Socket host port 然后我抓起一个OutputStream 用一个装饰PrintWriter在自动刷新模
  • 具有滚动背景的 Recyclerview

    我正在尝试创建一个具有滚动背景的 RecyclerView 如下所示 这个想法是 当我向上 向下滚动视图保持器时 背景 浅绿色 图像也应该同步向上 向下移动 关于如何实现这一目标有任何线索吗 这是我的基本 RecyclerView 配置
  • 使用特定 SA 通过 Cloud Build 部署 Dataflow 管道

    我竭尽全力尝试使用特定 SA 而不是默认的 Cloud Build SA 从 Cloud Build 部署数据流管道 但到目前为止尚未成功 我遵循了这个过程 https cloud google com build docs secure
  • 将值从一种方法返回到另一种方法

    Assume as precondition that the list of players is not empty Returns the winning score that is the lowest total score re
  • 将非 ASCII/UTF-8 字符转换为 LaTeX 代码

    我们必须将非 ASCII UTF 8 或命名实体字符转换为 LaTeX 代码 现在我们使用非 ASCII 到 Unicode 然后使用 Perl 脚本将 Unicode 转换为 LaTeX 实体 例如 oacute gt o x000F3
  • python-requests post 带有 unicode 文件名

    我已经在这里阅读了几个相关的问题 但没有找到可行的解决方案 我有一个 Flask 服务器 其中包含以下简化代码 app Flask name api Api app class SendMailAPI Resource def post s
  • 使用 Excel VBA 更改连接字符串时创建的新数据连接

    我有一个工作簿 其中包含由宏更新的数据透视表 不过 在刷新数据之前 连接字符串会发生更改 With ThisWorkbook Connections Data ODBCConnection Connection Redacted Comma
  • 如何通过谷歌表格上的查询比较日期或日期与今天?

    我正在努力将sheet1的副本复制到另一个sheet2 同一文档 上 并且query 工作得很好 直到我想要过滤的列是公式单元格 每个都有查询 匹配等的长单元格 我想要做的是过滤sheet1中的行 其中M列中的事件日期即将到来 有更多过滤条
  • JPA 创建 - Hibernate 未显示在平台中

    我正在尝试创建一个使用 Hibernate 作为持久性提供者的 JPA 项目 但是当我单击平台时 它没有显示 Hibernate 它在平台下拉框中显示 Generic 和 EclipseLink 我应该怎么做才能在下拉框下获得 Hibern
  • Python os.system 命令不起作用?

    早些时候 我曾经很好地使用 python 进行编码 但是在我格式化计算机并重新安装相同的 python 设置之后 我的os system命令停止工作 以及subprocess Popen 看来是路径问题 我重现该 1 错误的唯一方法是将路径
  • 我如何告诉 PyCUDA 使用哪个 GPU?

    我的机器中有两张 NVidia 卡 并且都支持 CUDA 当我运行示例脚本以开始使用此处所示的 PyCUDA 时 http documen tician de pycuda http documen tician de pycuda 我得到
  • 使用 ECS Fargate 执行 Step Function“任务”

    在 Re Invent 2018 中 AWS 似乎推出了与 Step Functions 的新集成 其中包括 ECS Fargate 支持 https docs aws amazon com step functions latest dg
  • c_include_path 与 ld_library_path

    在 Ubunutu 12 04 或 Springdale 6 4 上 使用 gcc 和 g 有什么区别C INCLUDE PATH or CPLUS INCLUDE PATH and LD LIBRARY PATH 是个LD一个仅在运行时使
  • 异常消息是英文的吗?

    我们通过将 Exception Message 写入文件来记录系统中发生的任何异常 然而 它们是根据客户的文化编写的 土耳其的错误对我来说意义不大 那么我们如何才能在不改变用户文化的情况下用英语记录错误消息呢 这个问题可以部分解决 框架异常
  • 什么是接口断言?

    我刚刚遇到了这段代码 type Logger interface Debug msg string keyvals interface error Info msg string keyvals interface error Error
  • Python 使用 tenacity 模块重试

    我很难获得坚韧图书馆 https github com jd tenacity按预期工作 下面测试中的重试根本不会触发 我希望每 5 秒重试一次 并让日志文件反映重试尝试 import paramiko import tenacity fr
  • 是否可以设置规则的优先级以避免“最长最早”的匹配模式?

    另一个简单的问题 有没有办法告诉 flex 更喜欢匹配短事物的规则而不是匹配长事物的规则 我找不到任何关于这方面的好的文档 这就是我需要它的原因 我解析一个伪语言文件 其中包含一些与控制指令相对应的关键字 我希望它们成为绝对优先级 这样它们
  • WebAPI OData 日期时间错误

    同样的问题在这里被问到http forums asp net post 5243863 aspx http forums asp net post 5243863 aspx但还没有答案 像 filter TimeRequested eq d
  • 通过 terraform 部署的 AWS API Gateway 和 Lambda 函数 -- 由于配置错误而执行失败:Lambda 函数的权限无效

    我正在通过 Terraform 一起部署 API 网关和 Lambda 函数 而 Lambda 函数应该由 API 网关触发 资源成功部署后 我测试 API 网关并得到响应 message 内部服务器错误 API网关的实际日志显示 由于配置