【问题标题】:How would I return status codes and repsones in AWS Lambda我将如何在 AWS Lambda 中返回状态代码和响应
【发布时间】:2019-09-25 12:20:20
【问题描述】:

我正在编写一个 Lambda 函数,该函数将用于向 API 发送测试消息。如果出现错误,我将需要它来运行某些功能(例如通过 AWS 消息通知我)。我想通过状态码进行简单的测试。例如,如果我得到 2XX 什么都不做,如果我得到 4XX 或 5XX,请通知我,以便我可以研究问题。在测试环境中,我将正文作为 XML 字符串作为 JSON 对象中的值传递。

示例 Lambda 测试事件

{
 "data": "<xml stuff, credentials, etc"
}

这是我的功能

exports.handler = async (event, context) => {

const https = require('https');

const options = {
  hostname: 'https://mythingy.com',
  port: 443,
  path: '/target',
  method: 'POST',
  headers: {'Content-Type': 'application/xml'}
};

const req = https.request(options, res => {
  console.log(`statusCode: ${res.statusCode}`);

  res.on('data', d => {
    process.stdout.write(d);
  });
});

req.on('error', error => {
  console.error(error);
});

req.write(event.data);
req.end();

};

我在 Lambda 中使用节点 10.x,我从 lambda 收到“结果成功”消息,但没有记录响应 statusCode。我已经通过几种方式完成了它,并且过去很容易从 Node fetch、ajax、http 请求中提取 statsCodes。我知道这可能与 Lambda 的 env 和承诺有关。谁能帮我弄清楚如何在 Lambda 中记录统计代码?

【问题讨论】:

  • 你应该看看this

标签: node.js https aws-lambda


【解决方案1】:

您看不到它打印出来,因为您的函数是 async 并且 https.request 使用回调方法,该方法将由 Node.js 工作人员异步运行。事实证明,函数在有机会执行回调中的代码之前就已经结束了。是的,你是对的,这是由于 Lambda 函数的工作方式,因为它们是短暂的(上下文可以重用,但这是另一个问题的故事),因此进程被底层容器终止。在传统的 Node.js 应用程序中,您从未遇到过这种情况,因为它们通常运行在网络服务器后面,该服务器负责保持进程正常运行,因此最终会执行回调。

你必须要么 promisify https.request 要么使用已经支持 Promises 的库,这样你就可以轻松地 await 使用它们。 AxiosRequest 是不错的选择。

一旦您选择了您的库 - 或已承诺 https.request -(我将使用 axios 作为我的示例),您可以在通话中简单地 await,获取它的结果并用它做任何您想做的事情.

const res = await axios.post('https://service-you-want-to-connect-to.com', {})
console.log(JSON.stringify(res)) // here you inspect the res object and decide what do to with the status code.

【讨论】:

  • 感谢泰雷兹的描述性答案/教育。问题:我可以在 lambda 中加载 axios/request。
  • 不客气。我建议您按照传统方式将依赖项添加到 Node.js 应用程序(使用 npm 或 yarn)。因此,您创建一个 package.json (npm init),然后通过运行 npm i axios 安装 axios(或请求),将代码与您的依赖项一起压缩并将压缩文件上传到 Lambda。已经有一些工具可以为您做到这一点,但它应该足以让您脱离实际,因为您才刚刚开始。
  • 你摇滚泰雷兹。非常感谢。 +2 并回答信用。干杯。
猜你喜欢
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2017-01-29
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多