使用aws cli,确定当前区域的最佳方法是什么。

时间:2015-07-10 03:05:25

标签: amazon-web-services region aws-cli

交互式地,我可以使用“aws configure”来更改或查看默认区域。是否有“pwd”之类的功能,记录与否,允许我在脚本中确定或确认当前区域?即使没有定义AWS_DEFAULT_REGION?我想要一个脚本在许多配置文件下运行。我可以从aws配置列表中删除,但有什么更整洁的吗?

10 个答案:

答案 0 :(得分:18)

aws configure get region会在您的脚本中为您提供当前区域。

如果您使用的是个人资料,请输入aws configure get --profile $PROFILE_NAME

答案 1 :(得分:14)

或许,AWS尚未提供获取当前区域的信息。但是,它们不是获取当前区域,而是通过实例元数据提供当前可用区域。所有可用区域都包含当前区域,因此您可以在EC2实例的脚本中替换当前可用区域的一部分来确定当前区域。

例如:

curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/\(.*\)[a-z]/\1/'

答案 2 :(得分:4)

aws configure get region很整洁,但是即使设置了AWS_DEFAULT_REGION ,我也希望能够知道该区域。不幸的是,根据文档:

  

请注意,aws configure get仅查看AWS配置文件中的值。它不会解析其他任何地方指定的配置变量,包括环境变量,命令行参数等。

相反,假设您已安装Python和boto3,则可以运行:

python -c 'import boto3;print(boto3.Session().region_name)'

例如

$ AWS_DEFAULT_REGION=us-east-1 python -c 'import boto3;print(boto3.Session().region_name)'
us-east-1

答案 3 :(得分:4)

以下给出了CLI实际使用的区域,而不管是否设置了环境变量:

aws ec2 describe-availability-zones --output text --query 'AvailabilityZones[0].[RegionName]'

CLI将使用的区域由以下优先顺序确定:

  1. 命令行--region选项
  2. AWS_DEFAULT_REGION环境变量的值
  3. 在“当前配置文件”中指定的区域,该区域由以下优先顺序确定
    • 命令行--profile选项
    • AWS_PROFILE环境变量的值
    • 否则配置文件为[默认]

不幸的是,使用aws configure get region仅返回“当前配置文件”指定的区域,而忽略AWS_DEFAULT_REGION环境变量。

您可以仅使用CLI进行实际的API调用并从结果中获取区域,而不必假设任何优先级规则。我唯一能找到的应该一直有效的电话是致电aws ec2 describe-availability-zones。这种方法的另一个优点是,您可以指定--region--profile选项,并且仍然可以获得正确的答案。

答案 4 :(得分:1)

不确定是否适合您,但我来到此页面寻找类似的建议。我经常在配置为使用不同区域的AWS Profile之间切换。就我而言,我使用的配置文件由环境变量-AWS_PROFILE

控制

要获得当前区域,无论我使用的是哪个配置文件,我都发现此命令很有用:

aws configure get region --profile=$AWS_PROFILE

答案 5 :(得分:0)

这是方法

aws configure get region

答案 6 :(得分:0)

该区域位于以下位置:

curl http://169.254.169.254/latest/dynamic/instance-identity/document

所以...

curl http://169.254.169.254/latest/dynamic/instance-identity/document|grep region|awk -F\" '{print $4}'

答案 7 :(得分:0)

从@RichVel的注释in this answer中提取,以从AWS_DEFAULT_REGION或aws配置文件中的区域中获取已解析的区域集(aws configure get region仅给出配置文件中设置的值)使用:

aws configure list | grep region | awk '{print $2}'

示例:

未设置$AWS_DEFAULT_REGION

$ echo $AWS_DEFAULT_REGION

$ cat ~/.aws/config
[foo]
region = us-east-1
$ aws configure list | grep region | awk '{print $2}'
us-east-1
$ aws configure get region
us-east-1

已设置$AWS_DEFAULT_REGION

$ export AWS_DEFAULT_REGION=us-west-2
$ echo $AWS_DEFAULT_REGION
us-west-2
$ cat ~/.aws/config
[foo]
region = us-east-1
$ aws configure list | grep region | awk '{print $2}'
us-west-2
$ aws configure get region
us-east-1

答案 8 :(得分:0)

根据Jeshan BabooaAlastair McCormack的答案,这些答案具有以下已知的局限性:

    如果区域是由环境变量aws configure get region定义的,则
  • AWS_DEFAULT_REGION不会返回该区域。
  • boto3可能并不总是可用,即使python -c 'import boto3; print(boto3.Session().region_name)'在可用时也可以使用。

要解决上述限制,请考虑:

AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:-$(aws configure get region)}

如果可用,则使用AWS_DEFAULT_REGION的值,否则使用aws configure get region的输出。

答案 9 :(得分:0)

如果您在.aws/config中有个人资料的区域信息,则可以执行以下操作:

.aws/config的示例(请注意,dev个人资料称为profile dev )。 profile字词是imporant

[default]
region = ap-southeast-2

[profile dev] 
region = us-east-1

然后使用cli,您可以:

aws configure get profile.default.region

给出ap-southeast-2

aws configure get profile.dev.region

给出us-east-1