Regions.getCurrentRegion()
从AWS Lambda函数中返回null。似乎AWS Lambda函数不支持Regions.getCurrentRegion()
。有没有另一种方法可以确定lambda函数在哪个区域运行?
注意:AWS Lambda函数是用Java编写的。
答案 0 :(得分:36)
您可以阅读AWS_DEFAULT_REGION
环境变量并使用Regions.fromName
函数将其解析为可用区域。
Regions.fromName(System.getenv("AWS_DEFAULT_REGION"))
这优于ARN解析方法的优点是您不需要Context对象,这意味着您可以在处理函数之外使用它。
答案 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];