【问题标题】:How to test aws lambda functions locally如何在本地测试 aws lambda 函数
【发布时间】:2016-02-26 09:09:05
【问题描述】:

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

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

【问题讨论】:

    标签: python node.js amazon-web-services aws-lambda serverless-framework


    【解决方案1】:

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

    这是公关:https://github.com/jaws-framework/JAWS/pull/269

    更新:您现在可以为此使用新的 serverless-serve 插件。

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

    【讨论】:

    • 谢谢,无服务器不仅可以用于离线测试,还可以帮助部署和其他很多东西。
    【解决方案2】:

    由于 1.4 尚未发布...

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

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

    【讨论】:

      【解决方案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 
      

      披露:我是这个框架的贡献者之一

      【讨论】:

      • 无法让它工作:/在“启动 lambda”之后挂起。
      【解决方案4】:

      截至本文发布之日,您可以通过 sls function run [name-of-function] 在本地运行函数。您函数的 event.json 中使用的任何 json 都将被传递到您的函数中。

      为了测试您的端点,您还可以使用Serverless Offline,它是serverless-serve 项目的一个分支。

      【讨论】:

        【解决方案5】:

        Bespoken sevrerless plugin 使您的本地 Lambda 可以从外部访问。它对于使用 Postman 进行本地测试以及基于 Webhook 的服务(如 Alexa、Slack、Twilio 等)都非常有用。

        架构如下所示:

        要使用它,你只需安装插件,然后运行:

        sls proxy
        

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

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

        【讨论】:

          【解决方案6】:

          这可能为时已晚.. 但现在你可以试试 Serverless-Offline (https://www.npmjs.com/package/serverless-offline) 就像一个魅力

          这也是它的 github 页面 (https://github.com/dherault/serverless-offline)

          【讨论】:

          • 这就是我要找的。谢谢!
          【解决方案7】:

          您现在可以使用lambda-local

          这样安装:

          sudo -H npm install -g lambda-local
          

          将您的参数作为 JSON 对象添加到文件中,在本例中为 event.json,并像这样调用 index.js 文件:

          lambda-local -l index.js -h handler -e event.json
          

          【讨论】:

          • 不支持一切,但至少很轻
          【解决方案8】:

          The serverless framework now provide a way to invoke functions locally

          这样,您可以在 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
          

          【讨论】:

            【解决方案9】:

            Python

            一个例子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
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-06-03
              • 2019-07-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2018-07-02
              • 1970-01-01
              相关资源
              最近更新 更多