如何确定AWS Lambda函数中的当前区域?

时间:2016-04-05 14:08:44

标签: java amazon-web-services aws-lambda

Regions.getCurrentRegion()从AWS Lambda函数中返回null。似乎AWS Lambda函数不支持Regions.getCurrentRegion()。有没有另一种方法可以确定lambda函数在哪个区域运行?

注意:AWS Lambda函数是用Java编写的。

6 个答案:

答案 0 :(得分:36)

您可以阅读AWS_DEFAULT_REGION环境变量并使用Regions.fromName函数将其解析为可用区域。

Regions.fromName(System.getenv("AWS_DEFAULT_REGION"))

这优于ARN解析方法的优点是您不需要Context对象,这意味着您可以在处理函数之外使用它。

来源:AWS's Lambda environment variables docs

答案 1 :(得分:13)

所有Lambda容器都将环境变量设置为$AWS_REGION

来自Lambda中的Java代码。您可以按如下方式访问它

System.getenv("AWS_REGION")

答案 2 :(得分:9)

传递给Lambda函数的context对象有一个名为invokedFunctionArn的属性。 ARN的格式为:

arn:aws:<service>:<region>:<account_id>:<resource>

因此,您可以在:字符上拆分此字符串,并找到与Lambda函数关联的区域。

注意:在java中,您可以调用上下文对象的getInvokedFunctionArn() getter。

答案 3 :(得分:3)

对于希望在Python中执行此操作的人:

ggplot(DF[DF$Date < as.Date("2001-06-01"), ], aes(x = Date, y = V1)) +
  geom_line() +
  geom_line(data = DF[DF$Date >= as.Date("2001-06-01"), ], col = "red", linetype = "dashed")

答案 4 :(得分:1)

1)您可以使用环境变量并将其作为

访问
System.getenv("AWS_REGION")
  

以下是属于AWS的环境变量的列表   Lambda执行环境,可用于Lambda函数。   下表指出了AWS Lambda和   不能更改,以及创建时可以设置的   Lambda函数。有关使用环境变量的更多信息   使用您的Lambda函数

https://docs.aws.amazon.com/lambda/latest/dg/lambda-environment-variables.html

2)您可以读取AWS_DEFAULT_REGION环境变量

Regions.fromName(System.getenv("AWS_DEFAULT_REGION"))

答案 5 :(得分:0)

尽管在大多数情况下都可以使用AWS_REGION环境变量,但是我发现使用Lambda@Edge时,此变量将解析为提供内容的区域(即最近的区域)给客户)。出于相同的原因,使用invokedFunctionArn对象中的context值也不起作用。这是从最接近context的位置调用us-east-1中的Lambda时收到的us-east-2

{
  "callbackWaitsForEmptyEventLoop": true,
  "functionVersion": "6",
  "functionName": "us-east-1.<FUNCTION_NAME>",
  "memoryLimitInMB": "128",
  "logGroupName": "/aws/lambda/us-east-1.<FUNCTION NAME>",
  "logStreamName": "2020/09/04/[6]<LOG STREAM NAME",
  "invokedFunctionArn": "arn:aws:lambda:us-east-2:<ACCOUNT ID>:function:us-east-1.<FUNCTION NAME>:6",
  "awsRequestId": "0fa5f5c3-90ea-41d5-b3c3-1714ccdf1b17"
}

因此,我发现的解决方案在Lambda @ Edge和其他Lambda之间始终如一地工作是从functionName对象的context值中检索区域。这是我使用Node.js的方法:

functionName.split('.')[0];