适用于 AWS Lambda 的本地开发服务器

Posted

技术标签:

【中文标题】适用于 AWS Lambda 的本地开发服务器【英文标题】:Local Dev Server for AWS Lambdas 【发布时间】:2018-05-19 13:00:35 【问题描述】:

是否有在本地运行 AWS Lambda 的开发服务器?我的要求是

nodejs 服务器,没有 rubygo 或除 nodenpm 包之外需要安装的任何东西 创建一个服务器,我可以通过 wget / curl 或 API 测试工具查询以发送各种事件 我应该能够指定服务器用作 lambda 的 js 文件,并且当我更改该文件时服务器应该重新启动/更新

【问题讨论】:

您是否尝试过带有无服务器离线插件的无服务器框架,用于本地 AWS API 网关和 Lambda 模拟? 也许Cloud9 IDE 可以为您工作? 【参考方案1】:

您检查过 SAM Local 吗? https://github.com/awslabs/aws-sam-local

【讨论】:

抱歉,SAM Local 是用 GO 编写的,是为 SAM 制作的,我不想安装 GO 的东西,也不想安装 SAM(SAM Local 使用)。不过还是谢谢。 不是一个服务器,但至少是 JS,它从命令行本地运行:npmjs.com/package/lambda-local【参考方案2】:

这是一个不需要serverlessclaudiajs 的解决方案。

为此,我通常只是编写自己的小express 脚本。我总是只使用 Lambda 代理集成,所以它更简单。

这样的……

const bodyParser = require('body-parser')
const express = require('express')

// Two different Lambda handlers
const  api  = require('../src/api')
const  login  = ('../src/login')

const app = express()

app.use(bodyParser.json())

// route and their handlers
app.post('/login', lambdaProxyWrapper(login))
app.all('/*', lambdaProxyWrapper(api))


app.listen(8200, () => console.info('Server running on port 8200...'))


function lambdaProxyWrapper(handler) 
  return (req, res) => 
    // Here we convert the request into a Lambda event
    const event = 
      httpMethod: req.method,
      queryStringParameters: req.query,
      pathParameters: 
        proxy: req.params[0],
      ,
      body: JSON.stringify(req.body),
    

    return handler(event, null, (err, response) => 
      res.status(response.statusCode)
      res.set(response.headers)

      return res.json(JSON.parse(response.body))
    )
  

然后,使用nodemon 运行它,以便它监视文件并根据需要重新加载。

nodemon --watch 'src,scripts/**/*.js' scripts/server.js

【讨论】:

似乎是合法的,因为其他答案和 cmets 有很大的上手或者不是 JS 我会接受这个答案。

以上是关于适用于 AWS Lambda 的本地开发服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在本地计算机上模拟 AWS Parameter Store 以进行 lambda 函数开发?

如何在本地测试 aws lambda 函数

AWS Cloud9:在本地引用 Lambda 层

为 AWS Lambda 和无服务器推荐啥本地节点版本

如何让我的Lambda函数与在本地计算机上运行的服务器通信?

在本地调试C#AWS Lambda函数