交互式地,我可以使用"aws configure"来更改或查看默认区域。是否有类似"pwd"的功能(无论是否记录),可以让我确定或确认当前脚本的区域?即使AWS_DEFAULT_REGION未定义? 我想要一个脚本在多个配置文件下运行。 我可以从aws configure list中抓取信息,但是有没有更简单的方法?
交互式地,我可以使用"aws configure"来更改或查看默认区域。是否有类似"pwd"的功能(无论是否记录),可以让我确定或确认当前脚本的区域?即使AWS_DEFAULT_REGION未定义? 我想要一个脚本在多个配置文件下运行。 我可以从aws configure list中抓取信息,但是有没有更简单的方法?
aws configure get region
会在你的脚本中获取当前区域。
如果您使用配置文件,则输入aws configure get region --profile $PROFILE_NAME
。
aws configure set region us-east-1
(将所需的区域替换为您想要的区域)。 - undefined以下内容显示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
环境变量。aws ec2 describe-availability-zones
。此方法的另一个优点是,您可以指定--region
或--profile
选项,并仍然得到正确的答案。也许AWS没有提供获取当前区域的方法。但是,他们提供了通过实例元数据获取当前可用区的方法。所有可用区都包括一个当前区域,所以您可以在EC2实例上的脚本中替换当前可用区的一部分来确定当前区域。
例如:
curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed 's/\(.*\)[a-z]/\1/'
aws configure list | grep region
命令 - 这将考虑环境变量和 ~/.aws/config
文件。 - RichVel/latest/meta-data/placement/region
。 - Ti Strga取自 @RichVel 在这个答案中的评论,要获取从AWS_DEFAULT_REGION
或AWS配置文件中的区域设置解析出的区域,请使用以下命令:
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
该地区位于以下位置:
curl http://169.254.169.254/latest/dynamic/instance-identity/document
所以...
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document|jq -r .region
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
可以使用以下方法获取该区域:
curl -s http://169.254.169.254/latest/meta-data/placement/region
aws configure get region
不能返回区域(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
的输出。.aws/config
配置文件设置MFA,AWS SSO
或环境变量AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY
等可能会破坏逻辑。我没有测试过,但要确信我们已经覆盖了所有场景实在太令人费解了。最后,唯一万无一失的方法是使用Python boto3
测试(当然它也有自己的包袱)。 - Vincent Yin.aws/config
中为您的配置文件有区域信息,您可以按照以下步骤操作:
.aws/config
的示例(请注意,dev
配置文件被称为profile dev
)。profile
一词是imporant。[default]
region = ap-southeast-2
[profile dev]
region = us-east-1
aws configure get profile.default.region
这里给出了 ap-southeast-2
和
aws configure get profile.dev.region
这给出了us-east-1
。
不确定这对你是否有用,但我来到这个页面寻求类似的建议。我经常在 AWS 配置文件之间切换,这些文件配置为使用不同的区域。在我的情况下,我正在使用的配置文件由一个环境变量 - AWS_PROFILE
控制。
为了获取当前区域,无论我使用哪个配置文件,我发现这个命令很有用:
aws configure get region --profile=$AWS_PROFILE