问题标签 [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.
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 网关调用的一样),以便您可以在本地使用它?
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:
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 得到一个错误。
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 在本地运行时是否不支持此功能?
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 集成并分别安排权限。
以下是推荐上述方法的有用链接。
我觉得这种方法有点复杂,如果 API 在 swagger 文件上越来越多,这可能会超过基本模板的 CFN 200 限制。如果有人建议一种更简单的方法来跨不同模板导入 apiGateway,我将不胜感激。
r - AWS SAM Lambda 附加运行时层而不构建运行时(CustomMakeBuilder 异常)
我正在通过提供的运行时在 Lambda 上部署 R 函数,但是它在构建过程中失败。
我做的步骤:
通过 Lambda 层设置 R 运行时一切正常(https://github.com/bakdata/aws-lambda-r-runtime)
在 R 中创建 Lambda 函数并将其添加到 template.yml 文件中:
- 执行
sam build
- 我收到以下错误消息:
即使我收到错误,一切仍然正常工作,并且 RTestFunction 按预期工作。但我更愿意解决这个错误。
问题:
- 我如何跳过构建部分,因为该层已经部署并且可以工作。我只想通过使用相应的 ARN 将层(运行时、推荐和 AWSLibs)链接到 RTestFunction。
文档说使用 Metadata 标签构建运行时是可选的,但我没有使用 Metadata 标签,那为什么还要尝试构建运行时呢? https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html
amazon-web-services - 当通过 SAM 使用 HttpApi 时,OpenApi 定义是唯一的事实吗?
我花了一天时间来了解 SAM,尤其是 HttpApi,但遇到了障碍。这是我想要实现的(梦想):
- 在 Open API 3(合约)中创建一个 REST API
- 将 api.yaml 传递给 HttpApi 并让它为 api 生成所有样板文件
- 现在我的 api 文档和我的 api 路由总是相同的(根据合同),感觉温暖的光芒
- 将 Open API 规范交给前端人员和后端人员,让他们在中间很好地见面
我很确定无论如何它应该是这样工作的。但这就是让我感到困惑的地方。我将集成添加到我的 api.yaml 例如:
现在我期待通过这个 HttpApi 将我的 OpenApi 文件中的路由与我在集成“GetItemFunction”中指向的 Lambda 连接起来。所以我可以像这样定义我的 Lambda:
但这似乎并没有按预期设置路线(我正在使用“sam local start-api”进行测试)。为了让它工作,我需要这样做:
这行得通,但现在我在 template.yaml 文件中定义路由,而不是在 api.yaml 文件中定义,因为我的用例没有达到目的。无论我是否在 api.yaml 中添加“x-amazon-apigateway-integration”,它的行为似乎也完全相同。
我确定我在这里遗漏了一些东西,如果有人能让我走上正确的道路,我将不胜感激!
amazon-web-services - SAM 模板 - 创建后如何更改 API 名称?
我有一个 SAM 模板,其中包含用于创建我的 API GW 的以下代码块......
它已被部署并且 API 已被创建。但是,现在我想将他们的名称从Name: !Sub "my-${MyEnvironment}-apis"更改为Name: !Sub "backend-${MyEnvironment}-apis"。进行此更改并部署后,我的 API 仍然使用旧名称。有没有办法可以强迫这些改变?
amazon-web-services - 带有 Ansible 的 AWS SAM
问:我可以使用 Ansible 来构建/部署 AWS SAM(无服务器应用程序模型)模板吗?如果是这样,任何人都可以发布这个 Ansible Playbook(例如,带有构建/部署任务)应该是什么样子的示例吗?
笔记:
我在网上搜索过,没有找到任何人给出这样的例子。Ansible 文档中甚至没有提到 AWS SAM。除了建议使用 Ansible 支持 SAM 的GitHub 问题(功能创意) ——但那是从 2017 年开始的。
非常感谢
amazon-cognito - 如何在 Nodejs SAM 中使用 AWS Cognito 和 msg91 创建自定义注册
- 我想在不使用默认注册的情况下创建自定义 Cognito 注册
- 我想使用第三方服务发送短信来验证和确认 Cognito 中的用户
- 通过使用电话号码
该过程看起来像 1.首先,创建一个 Cognito 用户池。当调用未确认和未验证用户的 Signup(来自 AWS Amplify )方法将创建 Cognito 用户池时,使用 MSG91 发送短信。2. 当用户输入 OTP 时,如果 OTP 正确,则调用 ConfirmSignUp(AWS Amplify 方法)然后验证并确认 Cognito 池用户。