首页 文章

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

提问于
浏览
4

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

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

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

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

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

1 回答

  • 5

    如果要查找触发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);
    };
    

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

相关问题