【问题标题】:Can I use lambda:invoke to call AWS Lambda express app?我可以使用 lambda:invoke 调用 AWS Lambda express 应用程序吗?
【发布时间】:2020-08-28 02:29:38
【问题描述】:

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

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

有可能吗?

【问题讨论】:

  • 可以,但必须向应用程序本身提供 IAM 用户或角色凭证。

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


【解决方案1】:

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

您打算直接请求 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}'
}

【讨论】:

  • 你好,我按照这个例子,确实让我的 lambda 调用另一个快速 lambda 上的端点,但是,有效负载似乎不适用于端点。知道可以传入有效载荷吗?到目前为止,我发现的所有信息都指向我通过 API 网关进行调用。谢谢!
  • @Chuck 你确定有效载荷中的主体是 json 字符串化的吗?您将需要 Payload: JSON.stringify(payload) 在有效负载中您还需要 JSON.stringify(body)
  • 对不起,我现在才看到这条消息。我和我的伙伴决定暂时停放这个。我们决定先使用 ApiGateway 让事情正常运行,然后稍后再讨论。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 2017-06-21
  • 2021-12-03
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
相关资源
最近更新 更多