问题标签 [serverless-framework]

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 回答
2076 浏览

node.js - 无服务器 AWS Lambda Express 应用程序中的 Mocha 测试

我有一个基于expressjs的nodejs应用程序,我正在使用gruntjs作为任务运行器和mochajs作为测试框架进行测试。因此,我编写了组件、集成和单元测试,这些测试在我开发时通过或直接通过本地执行,并且在部署期间作为 CI 流程的一部分在测试 VM 上执行。grunt testmocha test/component/v1/apiX

现在,当考虑将此应用程序移至 AWS Lambda 也就是无服务器时,我想到了以下关于我的测试和 CI 过程的问题(请注意,我将使用aws-serverless-express,因此不必显式地编写 lambda 函数):

1) 如何实现通过 HTTP api 请求完成的组件/e2e 测试?

2)如何实现只加载和测试应用程序一部分的集成和单元测试?

3) 如果任何测试失败,如何将两者与拒绝部署的新 CI 流集成?

我认为问题 1) 已基本解决:有很多方法可以从外部测试 AWS Lambda。您可以执行从 test-lambda 直接调用 lambda-to-test 的 lambda-to-lambda 测试,或者您可以使用来自 test-lambda 的 HTTP 通过 AWS API Gateway 调用 lambda-to-test,如此处所述。您还可以使用serverless-mocha-plugin进行本地 lambda 测试(如果使用serverless)。

2)有趣的地方:一旦你的 lambda 被部署,它就是一个黑盒子。您不能执行任何未明确声明为 lambda 接口的内容。如何保存或重新实现我现有的 mocha 单元和集成测试?

3) 相同:如何让 CI 在部署时运行所有测试并在部署失败时拒绝部署?

这是我自己的方法:只有在 TEST 环境中,我才会使我的节点应用程序无服务器。简单地让它作为经典节点 HTTP 服务工作,方法是根据环境使所有无服务器更改有条件。由于几乎不需要更改,因此这应该是可能的且可维护的。现在我可以像往常一样在本地运行测试,也可以使用 grunt 和 mocha 进行部署。然后,如果我想确保无服务器版本也能正常工作,我仍然可以进行最终的 lambda 到 lambda 测试。

0 投票
1 回答
75 浏览

amazon-web-services - 无服务器rest api网关nodejs

嘿,我怎样才能得到参数数据?

但是 event.some_data print undefine 有人知道代码有什么问题吗?

0 投票
2 回答
4837 浏览

amazon-web-services - 在使用 Serverless 部署 Lambda 时如何重用 S3 存储桶?

最近,我们采用无服务器来处理 AWS 环境中 Lambda 函数的部署,但是对于部署的每个独特函数,都会创建一个新的 S3 存储桶。这是低效的,对于无服务器创建的每个堆栈都有一个存储桶是理想的。有没有办法从 serverless.yml 文件中做到这一点?我已尝试对资源进行以下 yml 文件配置,但均未成功。

1 - 将存储桶列为要在 yml 中使用的资源

输出:

2 - 尝试引用 yml 中的存储桶

输出:

0 投票
1 回答
337 浏览

python - Serverless Framework v1.0.0 GA - Python 处理程序中的环境变量

关于使用无服务器框架的 env 变量的最佳实践是什么。

我听说过一些关于 python dotenv 环境的讨论,但我对 python 没有太多经验,所以寻找有关设置和使用的指导(一个例子会很好!)

例如,我想在我的无服务器处理程序函数中为 db_arn 提供一个环境变量。

db_arn = "ec2-xx-xx-xx-xxx.eu-west-1.compute.amazonaws.com"

def getCustomer(): #connect 使用 db_arn

我希望 db_arn 是一个环境变量(例如 dev、test、prod),而不是硬编码字符串。

如何使用 dotenv 实现这一点,您将如何组织无服务器服务来实现这一点?

帮助非常欢迎谢谢!

0 投票
3 回答
21512 浏览

aws-lambda - 无服务器框架 - Python 和 Requirements.txt

使用无服务器框架 v1.0.0,我的服务根目录中有一个“requirements.txt”,其内容是依赖 python 包的列表。(例如请求)。

但是,我生成的部署功能失败了,因为这些依赖项似乎没有作为打包的一部分安装

'无法导入模块'处理程序':没有名为请求的模块'

我认为 pip 安装是无服务器的,但我生成的 zip 文件很小,显然它没有这样做,无论是设计还是我的错,因为我错过了一些东西?是因为它的 Lambda 这样做吗?如果是这样,我错过了什么?)

是否有关于执行此操作所需内容及其工作原理的文档?pip 安装这些或在 aws lambda 端是无服务器的吗?

0 投票
1 回答
540 浏览

amazon-web-services - 如何在 serverless.yml 中禁用 CloudFront 缓存

Serverless-1.0.0允许部署 API 以通过具有自定义域的 AWS API 网关进行访问

问题:使用我的 serverless.yml,我需要禁用 CloudFront 的缓存(例如,通过为缓存标头设置一些零 TTL……还有其他方法吗?)

这可以从内部serverless.yml或无服务器框架中完成吗?

0 投票
1 回答
987 浏览

rest - How to handle errors in serverless

i'm doing this:

and when i call api from postman, it is returning me:

even i'm not sending any key named errorMessage

My question is, am i using correct way to return error if yes, why it is behaving like this if no, what is the correct way to handling error in serverless

I'll be thankful.

0 投票
2 回答
1544 浏览

angular - 在 Google Cloud Function 或 AWS Lambda 上部署 Universal Angular

在尝试使用 Angular 2 时,我碰巧看到了 Angular Universal。它是 Angular 2 应用程序的服务器端渲染,就像我们在 ReactJs 中一样。这里还有一个包含一个代码片段的入门指南。

我试图了解这是否可以部署在无服务器环境中,例如 Google Cloud Function 或 AWS Lambda。两种服务的文档都表明支持 nodejs。我对 Angular2 和无服务器托管模式都很陌生。

0 投票
1 回答
1355 浏览

amazon-web-services - AWS API Gateway 身份验证(Cognito 与自定义授权者)

我正在尝试使用联合身份验证制作无服务器应用程序(ReactJS、API Gateway、AWS Lambda、DynamoDB)。以下是我所设想的那种架构(为简洁起见,没有添加 STS。我也不认为我完全理解流程):

认证顺序

我创建了触发 lambda 函数的 API Gateway 端点。我想先用 google 对我的用户进行身份验证,如果他们成功了,那么他们应该能够使用 API 端点。

第一步是使用标准 Outh2 向 google 验证用户。为此,我创建了 2 个未经身份验证的端点 /signin/google 和 /callback/google。一旦我在回调 lambda 函数中从谷歌获得成功的身份验证响应,我就有了可以使用的 id_token (以及其他)。

目前,我有 2 种方法可用于验证 API。

  1. 构建可用于 API 端点的自定义授权方。这是代码(https://github.com/prabhatsharma/api-gateway-custom-authorizer/)。这很简单。我可以使用 google 提供的相同 id_token 来验证 API 端点。自定义授权方将验证 id_token 是否良好并授予对端点的访问权限。它还将缓存结果,以便每次都不需要此验证。(这是以这种方式重用google id_token 的好方法吗?)您可以使用授权方(https://github.com/prabhatsharma/lambda-custom-auth

  2. 我可以使用 AWS cognito 进行身份验证。为此,我创建了一个联合身份池,并将谷歌应用程序客户端 ID 设置为 cognito 控制台。在我的/callback/google lambda 函数中,我使用AWS SDK 来获取identityId、sessionToken 和accessKeyId。(源代码https://github.com/prabhatsharma/lambda-cognito-auth

    /li>

现在我可以使用凭据使用以下代码获取令牌

我现在可以将 identityId 和 Token 传递给我的前端 reactJS 应用程序。

这是我需要一点帮助来理解这个概念的地方。我现在可以在浏览器中使用 AWS 开发工具包来访问 AWS 资源。但是坚持!!!通过 Gateway 创建标准 RESTful API 的目的不就是使用标准 javascript 而不依赖任何特定库吗?直接使用 AWS SDK 看起来更适合 android/ios/unity 应用程序的用例。我希望我团队中的开发人员也能够使用他们在这种情况下使用的标准前端 javascript 库。此外,我不想将导出的 API SDK 用于我的 API 端点,并且真的希望保持前端应用程序不受 AWS SDK 细节的影响。手动使用 v4 签名对每个请求进行签名是多余的工作。我们不能使用 Cognito 进行基于标准令牌的 API 端点访问吗?

这种身份验证的最佳实践是什么?我在想正确的方向吗?

免责声明 - 请不要使用 repos 中的代码。它正在进行中,尚未准备好生产。

0 投票
1 回答
364 浏览

amazon-web-services - Webpack 外部不需要

在我的环境(aws-lambda)中,我设置了 aws-sdk,所以在 webpack.config 中我添加了:

在构建时,它似乎将其设置为module.exports = aws-sdk;之前module.exports = require('aws-sdk');工作正常,只是随机停止,有什么想法吗?

(使用 serverless-webpack 和 webpack)