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

DLe*_*rdi 4 amazon-web-services aws-lambda aws-api-gateway serverless-framework

我开始使用AWS Lambda,AWS API Gateway和无服务器以及其他供应商API构建JAM应用程序.

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

当我用无服务器生成所有内容时,转到控制台并提取API URL以手动设置作为env变量对我没用,我需要一种方法,以便无服务器可以将公开的API端点URL传递给lambda函数.

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

有人可以提供一些无服务器片段如何实现这一目标?谢谢!

Zan*_*non 6

如果要查找触发Lambda函数的API网关URL,则需要检查eventLambda函数接收的变量.

event.headers.Host -> abcdefghij.execute-api.us-east-1.amazonaws.com
event.requestContext.stage -> dev
event.requestContext.resourcePath -> my-service/resource
Run Code Online (Sandbox Code Playgroud)

如果要构建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}`;
Run Code Online (Sandbox Code Playgroud)

完整的测试示例:

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);
};
Run Code Online (Sandbox Code Playgroud)

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