Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定AWS Lambda函数中的当前区域?_Java_Amazon Web Services_Aws Lambda - Fatal编程技术网

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属性