如何在无服务器离线状态下从另一个 lambda 调用 lambda 函数?

Mah*_*dra 2 node.js aws-lambda serverless-framework serverless-offline

我正在尝试使用无服务器框架在 lambda 函数中调用 lambda 函数。我现在正在使用这段代码,部署到 AWS 后它可以正常工作。但它在 serverless-offline 中本地返回一些错误。

我现在使用的代码:

const middy = require("@middy/core");
const httpErrorHandler = require("@middy/http-error-handler");
const httpUrlEncodeBodyParser = require("@middy/http-urlencode-body-parser");

const AWS = require("aws-sdk");

const lambda = new AWS.Lambda();

const baseHandler = async (payload) => {
  const params = {
    FunctionName: `my-api-${process.env.STAGE}-handleProcessA`,
    InvocationType: "Event",
    LogType: "None",
    Payload: JSON.stringify(payload),
  };

  await lambda.invoke(params).promise();

  return standardResponse();
}

const endpoint = middy(baseHandler)
  .use(httpUrlEncodeBodyParser())
  .use(httpErrorHandler());

module.exports = { endpoint };

Run Code Online (Sandbox Code Playgroud)

当这个被触发时,它表示找不到该函数: Function not found: arn:aws:lambda:us-west-2:893853743015:function:my-api-local-handleProcessA

我也尝试了这些问题的建议: /sf/answers/4113647121/ /sf/answers/4897727201/

根据建议,我更改了这部分:

const lambda = new AWS.Lambda({
  region: "us-west-2",
  endpoint: process.env.IS_OFFLINE
    ? "http://localhost:6002"
    : "https://lambda.us-west-2.amazonaws.com",
});
Run Code Online (Sandbox Code Playgroud)

但是,它给了我Unsupported Media Type状态 415。以前有人遇到过这种情况吗?任何指导表示赞赏。

谢谢。

Mah*_*dra 5

最后,我在一些帮助下找到了解决方案。当我将离线端点更改为http://localhost:3002: where3002是默认值时,这会起作用lambdaPort

const lambda = new AWS.Lambda({
  region: "us-west-2",
  endpoint: process.env.IS_OFFLINE
    ? "http://localhost:3002"
    : "https://lambda.us-west-2.amazonaws.com",
});
Run Code Online (Sandbox Code Playgroud)

解释:

在无服务器离线中,有 CLI 选项可设置--lambdaPort--httpPort

默认--httpPort为 3000,默认--lambdaPort3002.

在我的项目中,我已设置--httpPort6002不带自定义--lambdaPort,默认为3002.

我调用 lambda 函数时使用的6002是不正确的。使用3002解决了它。