交互式地,我可以使用“aws configure”来更改或查看默认区域。是否有“pwd”之类的功能,记录与否,允许我在脚本中确定或确认当前区域?即使没有定义AWS_DEFAULT_REGION?我想要一个脚本在许多配置文件下运行。我可以从aws配置列表中删除,但有什么更整洁的吗?
答案 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将使用的区域由以下优先顺序确定:
--region
选项AWS_DEFAULT_REGION
环境变量的值--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 Babooa和Alastair 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
。