适用于 AWS Lambda 的本地开发服务器
Posted
技术标签:
【中文标题】适用于 AWS Lambda 的本地开发服务器【英文标题】:Local Dev Server for AWS Lambdas 【发布时间】:2018-05-19 13:00:35 【问题描述】:是否有在本地运行 AWS Lambda 的开发服务器?我的要求是
nodejs
服务器,没有 ruby
或 go
或除 node
和 npm
包之外需要安装的任何东西
创建一个服务器,我可以通过 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】:这是一个不需要serverless
或claudiajs
的解决方案。
为此,我通常只是编写自己的小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 函数开发?