Java 如何确定AWS Lambda函数中的当前区域?
Java 如何确定AWS Lambda函数中的当前区域?,java,amazon-web-services,aws-lambda,Java,Amazon Web Services,Aws Lambda,Regions.getCurrentRegion()从AWS Lambda函数中返回null。AWS Lambda函数中似乎不支持Regions.getCurrentRegion()。是否有其他方法确定lambda函数运行在哪个区域 注意:AWS Lambda函数是用Java编写的。传递给Lambda函数的上下文对象有一个名为invokedFunctionArn的属性。ARN的格式如下: arn:aws:<service>:<region>:<account_id&
Regions.getCurrentRegion()
从AWS Lambda函数中返回null。AWS Lambda函数中似乎不支持Regions.getCurrentRegion()
。是否有其他方法确定lambda函数运行在哪个区域
注意:AWS Lambda函数是用Java编写的。传递给Lambda函数的
上下文
对象有一个名为invokedFunctionArn
的属性。ARN的格式如下:
arn:aws:<service>:<region>:<account_id>:<resource>
arn:aws::
因此,您可以在:
字符上拆分此字符串,并找到与Lambda函数关联的区域
注意:在java中,您可以调用上下文对象的
getinvokedfunctorn()
getter。您可以读取AWS\u REGION
环境变量,并使用Regions.fromName
函数将其解析为可用区域
Regions.fromName(System.getenv("AWS_REGION"))
与ARN解析方法相比,这种方法的优点是不需要上下文对象,这意味着您可以在处理程序函数之外使用它
来源:.所有Lambda容器都设置了环境变量
$AWS\u REGION
来自Lambda中的Java代码。您可以如下访问它
System.getenv("AWS_REGION")
1) 您可以使用环境变量并作为
System.getenv("AWS_REGION")
以下是AWS中的环境变量列表
Lambda执行环境,并提供给Lambda函数。
下表显示了AWS Lambda和
无法更改,以及在创建应用程序时可以设置哪些选项
Lambda函数。有关使用环境变量的详细信息,请参见
使用Lambda函数
2) 您可以读取AWS_DEFAULT_REGION环境变量
Regions.fromName(System.getenv("AWS_DEFAULT_REGION"))
对于希望在Python中执行此操作的任何人:
import os
import json
def lambda_handler(event, context):
my_region = os.environ['AWS_REGION']
print(my_region)
return {
'statusCode': 200,
'body': json.dumps(f'Hello from {my_region}!')
}
虽然使用
AWS_REGION
环境变量在大多数情况下都会起作用,但我发现使用a时,该变量将解析为提供内容的区域(即距离客户端最近的区域)。出于同样的原因,使用上下文
对象中的invokedfunctionrn
值也不会起作用。以下是我从距离us-east-2
最近的位置调用us-east-1
中的Lambda时收到的上下文
:
{
“Callbackhaitsforemptyeventloop”:正确,
“功能版本”:“6”,
“函数名”:“us-east-1.”,
“memoryLimitInMB”:“128”,
“logGroupName”:“/aws/lambda/us-east-1”,
“logStreamName”:“2020/09/04/[6]AWS\u DEFAULT\u REGION
环境变量也可用。这在处理程序外部可用,无需解析。请参阅我的代码答案。请注意,此环境变量并不存在于所有运行时环境中。如您所示,它确实适用于Java。您是否可以提供一些有关his未设置为@garnaat?这不应该特定于JVM。你是对的。我刚刚在Python和NodeJS中运行了测试,并且在这两种语言中都有。我不确定这是何时添加的,但我认为在早期版本的Lambda中没有。这是一种比解析ARN更容易、更可靠的查找区域的方法。对于NodeJS上的Lambda,我认为s“process.env.AWS_REGION”这在Thank@pba中有记录-我已经更新了我的答案,以反映这是一个更好的源代码。导入和语法有效,但代码不会在lambda函数日志中打印区域。@ShikharChaudhary您在哪个区域?我在eu-west-1。我们需要使用此getFunction属性
: