如何在本地测试AWS Lambda函数

27

我有一个使用node.js express开发的移动应用程序后端。我试图将其部署为lambda服务。为此,我创建了一个Serverless Framework项目(https://github.com/serverless)。之前,我通过启动express后端应用程序本地测试移动应用程序。现在我找不到一种方法在没有本地后端的情况下本地测试我的移动应用程序。jaws run命令只有在我调用它时才运行一次。

是否有任何方法将lambda函数作为Web服务启动?或者是否有任何替代Serverless Framework的方法?

9个回答

19

目前看起来好像没有办法做到这一点,但版本1.4.0即将发布,其中应该包括一个新的命令“jaws serve”,它应该可以解决您的问题。

以下是相关的PR:https://github.com/jaws-framework/JAWS/pull/269

更新:现在您可以使用新的serverless-serve插件来解决此问题。

更新2:serverless-serve已经有一段时间没有更新了,看起来serverless-offline现在是更好的选项以模拟Lambda函数。


谢谢,无服务器架构不仅可以用于离线测试,还有助于部署和其他许多事情。 - Supun Induwara

4

您现在可以使用lambda-local

按照以下方式进行安装:

sudo -H npm install -g lambda-local

将您的参数作为JSON对象添加到文件中,在此示例中为event.json,并像这样调用index.js文件:
lambda-local -l index.js -h handler -e event.json

不支持所有功能,但至少非常轻巧。 - Cukic0d

3

我不确定这个问题是否仍然相关,但是我正在使用DEEP Framework在本地测试代码或将其部署到AWS Lambda。请看:

npm install deepify -g

deepify run-lambda --help

  run-lambda@1.6.8 - Run Lambda function locally 

  Usage example: deepify run-lambda path/to/the/lambda -e='{"Name":"John Doe"}' 

  Arguments:  
    path: The path to the Lambda (directory of handler itself) 

  Options:  
    --event|-e: JSON string used as the Lambda payload 
    --skip-frontend-build|-f: Skip picking up _build path from the microservices Frontend 
    --db-server|-l: Local DynamoDB server implementation (ex. LocalDynamo, Dynalite) 
    --version|-v: Prints command version 
    --help|-h: Prints command help 

声明:我是该框架的贡献者之一


1
无法让它正常工作 :/ 在“启动Lambda”后挂起。 - tedder42

3

Serverless框架现在可以提供本地调用函数的方法

有了这个功能,您可以在json文件中创建查询,如下:

{
  "body": "{\"hello\":\"world\"}",
  "pathParameters": {
    "id": "foo"
  },
  "queryStringParameters": {
    "bar": "42"
  }
  "requestContext": {
    "identity": {
      "cognitoIdentityId": "cognito-id"
    }
  }
}

如果您的函数在 serverless.yml 文件中有描述,那么您可以通过以下方式本地调用它:
serverless invoke local --function yourFunction --path path/to/your/mock.json

2

1
这正是我在寻找的。谢谢! - Thilina Koggalage

2

Python

An example lambda_function.py:

def lambda_handler(*args, **kwargs):
    return 'hello'

本地lambda函数的示例调用:

pip install python-lambda-local
echo '{}' >> event.json
python-lambda-local -t 15 -f lambda_handler lambda_function.py event.json

2

Bespoken serverless插件 可以让您的本地Lambda函数可以从外部访问。它非常有用,既可用于通过Postman进行本地测试,也可用于基于Webhook的服务(如Alexa、Slack、Twilio等)。

其架构如下图所示:enter image description here

使用它很简单,只需安装插件,然后运行:

sls proxy

您可以在本地开始向您的服务发送请求:

enter image description here

我们认为这是一个非常有用的工具,可用于无服务器测试。

1

由于1.4版本尚未发布...

上周我需要完全相同的东西。因此,我创建了一个可以在本地运行的小型模拟服务器: https://github.com/martinlindenberg/JawsLocalServer

  • 所有标题和参数都被复制到传递给处理程序的事件对象中。
  • 上下文对象是一个简单的对象,将数据转发到响应对象

0
截至本篇文章发布日期,您可以通过执行sls function run [函数名称]在本地运行函数。您的函数中使用的任何json都将传递到您的函数的event.json中。
为了测试您的端点,您还可以使用Serverless Offline,它是serverless-serve项目的一个分支。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接