传递无服务器 API 网关 URL 作为同一堆栈中 Lambda 函数的参数

Passing serverless API Gateway URL as a parameter for a Lambda function in the same stack

我开始使用 AWS Lambda、AWS API 网关和无服务器以及其他供应商 API.

构建 JAM 应用程序

此供应商 API 由 Lambda 函数调用,并且需要传递回调 URL 以在完成其工作后接收一些数据。

由于我正在使用无服务器生成所有内容,因此转到控制台并提取 API URL 以手动设置是因为环境变量对我没有用,我需要一个无服务器可以将公开的 API 端点 URL 传递给 lambda 函数。

如何将 Lambda 函数 HTTP 事件 URI 作为 env 或可传递给同一堆栈中的另一个 Lambda 函数的内容?

有人可以提供一些关于如何实现这一点的无服务器代码片段吗? 谢谢!

如果您想找到触发 Lambda 函数的 API 网关 URL,您需要检查您的 Lambda 函数接收的 event 变量。

event.headers.Host -> abcdefghij.execute-api.us-east-1.amazonaws.com
event.requestContext.stage -> dev
event.requestContext.resourcePath -> my-service/resource

如果要构建 API 网关 URL(示例:https://abcdefghij.execute-api.us-east-1.amazonaws.com/dev/my-service/resource),请使用:

const url = `https://${event.headers.Host}/${event.requestContext.stage}/${event.requestContext.resourcePath}`;

完整的测试示例:

module.exports.hello = (event, context, callback) => {

  const url = `https://${event.headers.Host}/${event.requestContext.stage}/${event.requestContext.resourcePath}`;

  const response = {
    statusCode: 200,  
    headers: {
      'Access-Control-Allow-Origin': '*'
    },  
    body: JSON.stringify({
        message: url
    })
  };

  callback(null, response);
};

注意:如果您直接在 AWS Lambda 控制台中测试它,它可能会抛出错误,因为 event 对象将为空并且没有 headersrequestContext 属性。因此,请使用 API 网关控制台或直接浏览 URL 进行尝试。