问题标签 [serverless-application-model]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
503 浏览

amazon-web-services - 如何为从 API Gateway 调用的 lambda 生成正确的 event.json 以在本地运行它?

我有一个我希望能够在本地调用的 aws lambda sam local invoke "MyFunction" -e event.json,但我的 event.json 文件似乎永远不正确。例如,如果我的 lambda 连接到 DynamoDB,我会收到类似“请求中包含的安全令牌无效”之类的错误。

有没有办法在云中运行函数式 lambda 并生成/输出 event.json(例如,就好像它是从 API 网关调用的一样),以便您可以在本地使用它?

0 投票
1 回答
488 浏览

java - SAM 构建失败,因为 Maven 安装失败并显示“此项目的打包未将文件分配给构建工件”

我有一个问题,我试图开始mvn install工作,以便我sam build使用 Docker 进行本地调用,但由于以下错误,它一直失败:

关于 StackOverflow 上的“此项目的打包未将文件分配给构建工件”的问题和解决方案有许多不同的迭代,但它们似乎都没有解决我的问题。

例如,我可以做一个mvn jar:jar install:install并且工作正常,但我不能在 SAM 构建中指定这样的目标,所以这不是一个合适的解决方案——我需要mvn install工作。我尝试了许多删除 .m2 文件夹的变体,但没有任何作用。我也可以更改 maven-install-plugin 的版本,但无济于事。我可以在 maven-install-plugin 中指定文件,如果路径正确,它看不到它,但如果它不正确,它说它不存在。

似乎没有什么能解决这个问题,所以我需要找到一个真正的解决方案。

这是我的 pom.xml:

这是我的 bin.xml:

0 投票
1 回答
126 浏览

amazon-web-services - Lambda 角色没有在 SAM 模板中定义的策略

通过 SAM 部署 Lambda 后,当我尝试从 S3 下载时,我在 Lambda 中得到了 403。我在 IAM 管理控制台中检查了 Lambda 的角色,我看到角色只有AWSLambdaBasicExecutionRole. 但是,它还应该具有来自 SAM 模板的 S3 读/写策略。

这是我的 SAM 模板中的一个片段(部分内容已重命名):

S3ReadPolicy 和 S3WritePolicy 不应该是 Lambda 角色的一部分吗?

有什么我想念的吗?

我知道我可以手动添加所需的策略,但显然我希望尽可能多地通过 SAM 自动发生。

其他细节:我不确定它是否重要,但为了附加上下文,Lambda 是 Step Function 状态机的一部分。我正在使用 boto3 库发出从 S3 下载的请求。我{'Code': '403', 'Message': 'Forbidden'}从 boto3 得到一个错误。

0 投票
0 回答
394 浏览

amazon-web-services - 如何离线使用 AWS SAM CLI 本地 HttpAPI 和 JWT Bearer 令牌认证?

我想离线使用 AWS SAM JWT HttpApi Auth

基于这个 AWS 示例,我决定创建以下 YAML 文件。

使用基于文档的AWS::Serverless:HttpApi创建一个支持基于 JWT 的身份验证的 Amazon API Gateway HTTP API。

我开始

sam local start-api

但是,当我使用 Postman 查询它时,无论有没有 JWT Bearer 令牌,请求都会成功。
并且 AWS 查询不包含单个经过身份验证的用户对象。

以调试模式运行它也不会提供任何有用的附加信息。

我的期望是 AWS SAM CLI 将基于正确提供的颁发者 URL 将不记名令牌转换为我可以在以后的操作中使用的身份值。

AWS SAM Local 在本地运行时是否不支持此功能?

0 投票
0 回答
568 浏览

amazon-web-services - 如何跨多个 SAM 模板共享单个 API 网关?

我一直在尝试跨多个 SAM 模板使用单个 APIGateway。为此,我尝试从其他 SAM 模板上的基本模板导入 RestApiId,并在 lambda 的事件部分下使用它。但是SAM有限制说

RestApiId 必须是对同一模板中“AWS::Serverless::Api”资源的有效引用。

经过 3 小时的研究,我知道我们可以通过在基本模板中定义 API 网关并创建角色/策略/定义来实现它,以便允许调用所需的功能。将 Lambda 拆分为多个仅限 Lambda 的 SAM 文件,但没有在其下定义任何 Api 类型事件。通过这种方式,可以创建彼此独立的 Lambda 和 API Gateway,并使用 Swagger/OpenAPI 集成并分别安排权限。

以下是推荐上述方法的有用链接。

链接1

链接2

我觉得这种方法有点复杂,如果 API 在 swagger 文件上越来越多,这可能会超过基本模板的 CFN 200 限制。如果有人建议一种更简单的方法来跨不同模板导入 apiGateway,我将不胜感激。

0 投票
0 回答
502 浏览

r - AWS SAM Lambda 附加运行时层而不构建运行时(CustomMakeBuilder 异常)

我正在通过提供的运行时在 Lambda 上部署 R 函数,但是它在构建过程中失败。

我做的步骤:

  1. 通过 Lambda 层设置 R 运行时一切正常(https://github.com/bakdata/aws-lambda-r-runtime

  2. 在 R 中创建 Lambda 函数并将其添加到 template.yml 文件中:

  1. 执行sam build
  2. 我收到以下错误消息:

即使我收到错误,一切仍然正常工作,并且 RTestFunction 按预期工作。但我更愿意解决这个错误。

问题:

  • 我如何跳过构建部分,因为该层已经部署并且可以工作。我只想通过使用相应的 ARN 将层(运行时、推荐和 AWSLibs)链接到 RTestFunction。

文档说使用 Metadata 标签构建运行时是可选的,但我没有使用 Metadata 标签,那为什么还要尝试构建运行时呢? https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html

0 投票
1 回答
244 浏览

amazon-web-services - 当通过 SAM 使用 HttpApi 时,OpenApi 定义是唯一的事实吗?

我花了一天时间来了解 SAM,尤其是 HttpApi,但遇到了障碍。这是我想要实现的(梦想):

  1. 在 Open API 3(合约)中创建一个 REST API
  2. 将 api.yaml 传递给 HttpApi 并让它为 api 生成所有样板文件
  3. 现在我的 api 文档和我的 api 路由总是相同的(根据合同),感觉温暖的光芒
  4. 将 Open API 规范交给前端人员和后端人员,让他们在中间很好地见面

我很确定无论如何它应该是这样工作的。但这就是让我感到困惑的地方。我将集成添加到我的 api.yaml 例如:

现在我期待通过这个 HttpApi 将我的 OpenApi 文件中的路由与我在集成“GetItemFunction”中指向的 Lambda 连接起来。所以我可以像这样定义我的 Lambda:

但这似乎并没有按预期设置路线(我正在使用“sam local start-api”进行测试)。为了让它工作,我需要这样做:

这行得通,但现在我在 template.yaml 文件中定义路由,而不是在 api.yaml 文件中定义,因为我的用例没有达到目的。无论我是否在 api.yaml 中添加“x-amazon-apigateway-integration”,它的行为似乎也完全相同。

我确定我在这里遗漏了一些东西,如果有人能让我走上正确的道路,我将不胜感激!

0 投票
0 回答
29 浏览

amazon-web-services - SAM 模板 - 创建后如何更改 API 名称?

我有一个 SAM 模板,其中包含用于创建我的 API GW 的以下代码块......

它已被部署并且 API 已被创建。但是,现在我想将他们的名称从Name: !Sub "my-${MyEnvironment}-apis"更改为Name: !Sub "backend-${MyEnvironment}-apis"。进行此更改并部署后,我的 API 仍然使用旧名称。有没有办法可以强迫这些改变?

0 投票
1 回答
243 浏览

amazon-web-services - 带有 Ansible 的 AWS SAM

问:我可以使用 Ansible 来构建/部署 AWS SAM(无服务器应用程序模型)模板吗?如果是这样,任何人都可以发布这个 Ansible Playbook(例如,带有构建/部署任务)应该是什么样子的示例吗?

笔记:

我在网上搜索过,没有找到任何人给出这样的例子。Ansible 文档中甚至没有提到 AWS SAM。除了建议使用 Ansible 支持 SAM 的GitHub 问题(功能创意) ——但那是从 2017 年开始的。

非常感谢

0 投票
0 回答
58 浏览

amazon-cognito - 如何在 Nodejs SAM 中使用 AWS Cognito 和 msg91 创建自定义注册

  1. 我想在不使用默认注册的情况下创建自定义 Cognito 注册
  2. 我想使用第三方服务发送短信来验证和确认 Cognito 中的用户
  3. 通过使用电话号码

该过程看起来像 1.首先,创建一个 Cognito 用户池。当调用未确认和未验证用户的 Signup(来自 AWS Amplify )方法将创建 Cognito 用户池时,使用 MSG91 发送短信。2. 当用户输入 OTP 时,如果 OTP 正确,则调用 ConfirmSignUp(AWS Amplify 方法)然后验证并确认 Cognito 池用户。