【问题标题】:How to get the name of the stage in an AWS Lambda function?如何在 AWS Lambda 函数中获取阶段的名称?
【发布时间】:2018-09-04 21:45:47
【问题描述】:

我有一个 lambda 函数(没有 APIGateWay。我希望在测试和生产阶段都使用相同的 lambda 函数,为此我想在运行时获取阶段名称。我的代码是用 java 编写的,我知道我们可以找到使用以下默认 AWS 区域:

Regions regions = Regions.fromName(System.getenv("AWS_DEFAULT_REGION"));

所以这是我的问题:

1- 如何获取我的 lambda 函数正在运行的阶段的名称?

2- 这个默认区域是什么意思?它会始终与我的 lambda 函数运行的区域相同吗?

高度赞赏任何线索。

【问题讨论】:

  • 你是在用 ApiGateway 这个吗
  • 您在寻找这样的东西吗? aws.amazon.com/blogs/compute/…
  • 我得到了一个使用环境变量的解决方案。我们可以使用 AWS 控制台设置环境变量,并可以在我们的 lambda 函数中使用它们。

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


【解决方案1】:

如何获取我的 lambda 函数所在阶段的名称 跑步吗?

对于 Lambda 代理集成,您可以从输入流中的 requestContext 获取阶段名称,其中包含由 API 网关序列化为 JSON 字符串的 API 请求。输入数据还可以包括请求的阶段变量stageVariables(如果您使用/需要任何)。例如:

JSONParser parser = new JSONParser();

public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
  ...
  BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
  String stage = null;

  JSONObject event = (JSONObject)parser.parse(reader);
  if (event.get("requestContext") != null) {
    JSONObject requestContext = (JSONObject)parser.parse((String)event.get("requestContext"));
    if (requestContext.get("stage") != null) {
      stage = (String)requestContext.get("stage");
    }
  }
  ...
}

full example

这个默认区域是什么意思?它会永远和之前一样吗 我的 lambda 函数正在运行的区域?

YES 根据docsNO 根据SDK

SDK 没有引用它。它仅使用AWS_REGION。见SDKGlobalConfiguration.java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 2017-05-14
    • 2018-07-27
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多