我可以使用lambda:invoke调用AWS Lambda Express应用程序吗?

时间:2020-05-12 09:42:22

标签: node.js amazon-web-services express lambda invoke

我有运行多个端点的AWS Lambda Express应用程序

我想在没有api网关的情况下调用该应用程序,即通过lambda:invoke,但无法弄清楚如何导航到特定端点。

有可能吗?

1 个答案:

答案 0 :(得分:0)

完全有可能,这正是API网关正在做的事情。

您打算直接请求Express Lambda的应用程序必须

因此,假设您具有本地凭据并且您的本地用户有权调用lambda函数,则可以通过执行以下操作在本地进行简单测试:

payload.json

{
  "httpMethod": "POST",
  "path": "/PATH/TO/YOUR/ROUTE",
  "headers": { "content-type": "text/plain" },
  "body": "{\"version\":\"2.1.0\"}",
  "isBase64Encoded": false
}

lambda-caller.js

const region = process.env.AWS_REGION || 'us-west-2'
const lambda = new (require('aws-sdk/clients/lambda'))({ region })

const Payload = require('fs').readFileSync('payload.json')
const FunctionName = 'your-function-name'

lambda.invoke({ Payload, FunctionName }).promise().then(console.log)

然后只需调用您的节点应用

node lambda-caller.js

那应该打印出这样的内容

{
  StatusCode: 200,
  ExecutedVersion: '$LATEST',
  Payload: '{"statusCode":202,"body":"{\\"count\\":1,\\"success\\":1}","headers":{"content-type":"application/json; charset=utf-8","content-length":"23","date":"Thu, 21 May 2020 00:29:33 GMT","connection":"keep-alive"},"isBase64Encoded":false}'
}