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

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

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

【问题讨论】:

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

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


【解决方案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 我会接受这个答案。
猜你喜欢
  • 2019-04-03
  • 2017-12-29
  • 2019-03-15
  • 2022-06-24
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多