问题标签 [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 回答
552 浏览

caching - AWS 使用 SAM API Gateway 的 queryStringParameter PathParameter 启用缓存

我想为我的无服务器功能启用 API Gateway 缓存,但很难理解在哪里以及以何种方式进行缓存。

我试图在我的无服务器函数中设置 queryStringParameters 但这会导致错误,还尝试将它们添加到我的 GLOBAL Api 下但没有运气(也希望避免在全局中这样做)

还检查了我在 API Gateway 中的资源,并为 RequestParams 禁用了缓存,并且 QueryStringParams 从那里丢失。

模板

***********************************编辑************** *******************

发现如果 API Gateway 不知道这些参数,那么它将忽略它以缓存https://forums.aws.amazon.com/thread.jspa?messageID=915838量

我尝试向模板添加多个 methodSetting 条目,似乎 CF 没有忽略它,但结果仍然相同。如果可能的话,我也不确定如何对 queryStringParameters 做同样的事情。

***********************************编辑************** *******************

我更喜欢一种方法来为每个资源下的 RequestParams 和 QueryParams 启用缓存,也就是“AWS::Serverless::Function”

非常感谢您的帮助。

0 投票
2 回答
366 浏览

amazon-cloudformation - c# aws api gateway serverless.template 结构不通过 CloudFormation 处理

我已经构建了一个 .NET 无服务器应用程序并具有以下 serverless.template

该应用程序通过 AWS Toolkit for Visual Studio 部署正常,但处理后的 cloudformation 似乎缺少我对 AWS::ApiGateway::RestApi 部分所做的大部分更新(如果不是全部的话)。当我在 AWS 控制台中签入时,处理后的 CF 模板如下所示:

由于上述问题,我的 API 网关中未设置 apiKey required = true。其他一切都创建得很好,创建了 api 密钥,创建了使用计划,创建了密钥和计划之间的链接,但是将 api 密钥设置为 required = true 不会发生。我在这里不知所措。我尝试使用新名称部署堆栈以创建一个新的 API,但同样的事情发生了。

0 投票
1 回答
2322 浏览

amazon-s3 - 如何指定 S3 存储桶区域 SAM 模板

我正在学习 AWS 无服务器应用程序模型。我正在尝试以下模型:

这就是我运行它的方式:

这是我收到的错误:

GetObject 时发生错误。S3 错误代码:永久重定向。S3 错误消息:存储桶位于此区域:us-east-1。请使用此区域重试请求(服务:AWSLambdaInternal;状态代码:400;错误代码:InvalidParameterValueException

us-east-2是我的 AWS 配置文件的默认区域。

如果us-east-2是我的默认区域,为什么我会收到此错误消息The bucket is in this region: us-east-1?如何在无服务器脚本中为 S3 存储桶指定区域?

0 投票
0 回答
318 浏览

aws-lambda - SAM 允许访问 Cognito

我希望能够在 Python 环境中通过我的 Lambda 函数通过 boto3 调用 cognito 函数。提供此类访问权限的最佳方式是什么?我已经完成了以下 yaml,但不确定这是否是最佳实践,或者我正在使模板更长。

我说的是“政策”,我的模板是否符合标准?还是我可以走捷径?

0 投票
0 回答
666 浏览

node.js - 找不到共享 nodejs 代码的 SAM Lambda 层模块

我在单个 template.yaml 中定义了多个 lambda 函数。这些函数有一些通用代码,但没有发布模块。我以为我可以把这些常见的东西变成一个版本化的层。用一个目录来大意如下:

  • 项目
    • LambdaFunc1
      • 包.json
      • 节点模块
      • func1.js
    • LambdaFunc2
      • 包.json
      • 节点模块
      • func2.js
    • 普通的东西
      • 包.json
      • 我的common.js
    • 模板.yaml
    • 节点模块

测试后,我将 common-stuff 复制到 Projects/node_modules 目录中,我的其他 LambdaFuncs 解析 require('common-stuff') 基于 Node 向上移动未找到模块的目录结构。

为了让 SAM 进行构建/打包/部署,我注意到 SAM 并没有触及常见的东西,而是使用其他两个 Lambda 函数创建了一个 .aws-sam/build 结构。我必须为 SAM 的 CodeURI 创建一个结构来压缩。

使用我的 package.json 和 my-common.js 打包/common-stuff/packaged/nodejs/node_modules/common-stuff/。我的 package.json 使用名称:“common-stuff”,主要:“my-common.js”

没有其他文件 - nodejs 下没有任何文件,因为我只是打包模块。在我看来,这就是 Layers 的原因。我已经通过下载 Layer zip 文件验证了 SAM 打包了一个包含 nodejs/node_modules/common-stuff/... 的 zip 文件。

在 Lambda 函数模板 def 中,我添加了允许“lambda:GetLayerVersion”的权限。当我在控制台中查看 Lambda 函数时,我会看到此权限以及其他权限。

有趣的是,aws lambda get-layer-version-policy --layer-name MyLayer --version-number 8 --output text 返回没有附加策略的错误。我的猜测是因为我直接将它添加到函数中,正如我在 Lambda 函数中看到的那样,它具有正确的 Allow/GetLayerVersion。

这似乎满足了我所读到的内容,但是 Node 没有找到该模块。CloudWatch 日志只是说它找不到模块,与权限或语法无关。此外,这些功能一直有效,直到我添加了 Layer 方法。

'sam local start-api' 也不起作用,同样的错误。当我查看 Windows 10 默认层缓存目录 C:\Users\me\AppData\Roaming\AWS SAM\ 时,有一个空的 layers-pkg 目录。

我还缺少其他魔法吗?是否有更好的方法在 Node Lambda 函数之间共享通用代码?

我无法判断 AWS 是否无法获取层,或者 zip 结构错误,或者 require('common-stuff') 不同(希望不是)。

斯科特

0 投票
1 回答
340 浏览

aws-lambda - 如何使用 SAM 模板 cloudformation 在不同的 aws 帐户中调用 lambda

角色的 Cloudformation 片段

我正在使用 AWS lambda cloudformation 创建一个无服务器架构模型 (SAM)。我有两个 lambda - 前端 lambda 和一个后端 lambda。前端 lambda 在账户 A 中,后端 lambda 在账户 B 中。前端 lambda 为 UI 渲染来自 S3 的静态文件。当它必须进行后端数据处理时,它应该调用另一个 aws 帐户中的后端 lambda。我确实在这两个帐户中都有角色,并且也信任这两个帐户。它仍然无法调用后端 lambda。如何使用 cloudformation 模板调用后端 lambda。

0 投票
0 回答
651 浏览

amazon-web-services - 如何设置 VSCode 以在本地调试 aws lambda?

我开始使用 AWS Lambda。我选择的编辑器是VSCode。我观看了有关如何为此任务设置 VSCode的官方介绍作为开始。在那里,“讲师”使用 GUI 在本地调试功能或通过单击“本地运行”或“本地调试”在本地运行它。

在此处输入图像描述

我想使用 task.json 和 launch.json 文件来做到这一点。这对我来说似乎比单击 GUI 更精简。有人知道 task.json 和 launch.json 应该是什么样子吗?

我对此的看法是

启动.json

任务.json

这种关闭工作,但不完全。更好的解决方案是始终先构建,然后通过变量动态使用插入构建目录(它在vsctk7WXgnB此处)。

即使我重新构建,应用程序有时也会忽略我的断点。

0 投票
2 回答
1088 浏览

c++ - 如何使用 SAM 在本地运行 C++ AWS Lambda 函数?

我想尝试 AWS Lambda 的自定义 C++ 运行时并使用SAM在本地对其进行测试。不幸的是,我收到了错误Runtime exited without providing a reason(比较下面的错误详细信息)。如何使用 SAM 在本地运行 C++ Lambda 函数?

方法:

我正在遵循官方 C++ 简介博客中描述的确切步骤,直到“创建您的 C++ 函数”的最后一步。博客的其余部分是关于在 Lambda 上部署函数(我不想这样做,因为我想在本地使用 SAM)。

为了使用 SAM,我template.yaml在构建目录中添加了一个。现在的结构build dir如下所示:

这是template.yaml构建目录中的内容:

调用:

sam local start-api --debugdebug文件夹中运行。我通过127.0.0.1:3000/hello在 chrome 中调用该函数。

错误:

调用 URL 产生的消息中的一些详细信息:

我的系统:

我正在使用 cmake 3.5.1、g++ 4.5.0、gcc 4.5.0 在 Ubuntu 16.04 上构建

如何解决这个问题的想法:

我必须以某种方式在使用 AWS Linux 的机器上构建远程(我希望不是这种情况)

我可以使用这里推荐的CloudFormationPackage stackoverflow。我想避免这种情况,因为我只想在本地进行测试。

0 投票
1 回答
831 浏览

amazon-web-services - AWS CLI - 从 Linux 错误创建 s3 存储桶

我正在使用AWS CLI创建S3 存储桶。我已经安装了AWS CLI并运行以下命令来创建存储桶

Error: make_bucket failed: s3://Test-sam-bucket 调用CreateBucket操作时出错(InvalidBucketName):指定的bucket无效。

另外,我尝试过:

Error: make_bucket failed: s3://sambucket 调用CreateBucket操作时出错(BucketAlreadyExists):请求的bucket名称不可用。存储桶命名空间由系统的所有用户共享。请选择其他名称,然后重试。

我在做什么错请帮忙

0 投票
3 回答
349 浏览

node.js - aws CI/CD 工作流程的最佳路径是什么?Cloudformation、SAM 还是无服务器框架?

需要使用 cloudformation、sam 和 serverless 框架来部署 nodejs 应用程序的专家的意见。

请告知我使用无服务器框架但没有使用 sam 或 cloudformation 的最佳路径,虽然我同意它简化了过程,但我希望了解更多关于底层配置的信息。

我倾向于 cloudformation 只是因为这两个框架都将代码转换为 cloudformation 模板。如果我错了,请纠正我,并感谢学习相同内容的最佳资源。