【问题标题】:Passing serverless API Gateway URL as a parameter for a Lambda function in the same stack将无服务器 API 网关 URL 作为参数传递给同一堆栈中的 Lambda 函数
【发布时间】:2017-06-17 21:25:10
【问题描述】:

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

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

当我使用无服务器生成所有内容时,转到控制台并提取 API URL 以手动设置是因为环境变量对我没有用,我需要一种方法,以便无服务器可以传递暴露的 API 端点lambda 函数的 URL。

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

有人可以提供一些关于如何实现这一点的无服务器 sn-p 吗? 谢谢!

【问题讨论】:

  • 听起来这应该是构建/部署过程的一部分?因此,在构建服务器上部署期间,您调用供应商 API 并接收 URL,然后使用它来设置环境变量?或者您能否详细说明您想要支持的流程。
  • 问题是在部署堆栈时会配置主机,所以这是一个先有鸡还是先有蛋的问题。我不能将它们作为环境变量传递,因为它还不存在。

标签: amazon-web-services aws-lambda aws-api-gateway serverless-framework


【解决方案1】:

如果您想找到触发 Lambda 函数的 API Gateway 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 Gateway 控制台或直接浏览 URL 尝试此操作。

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 2014-11-14
    • 2021-12-30
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多