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

mck*_*nzm 13 region amazon-web-services aws-cli

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

Jes*_*ooa 27

aws configure get region 将在您的脚本中获得当前区域.

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

  • 这将返回配置的区域,而不是执行aws cli调用的区域.(例如rm~/.aws/config; aws configure get region并注意它是空的(或删除你的ENV vars或aws配置设置的其他位置). (5认同)

NSR*_*NSR 19

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

例如:

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

  • 使用AWS CLI,您可以使用`aws configure list | grep region` - 这会考虑环境变量和`〜/ .aws/config` (4认同)
  • 如果无论如何使用元数据服务,自 NSR 发布答案以来已添加“/latest/meta-data/placement/region”。 (2认同)

Joh*_*ees 12

下面给出了 CLI 实际使用的区域,无论是否设置环境变量:

aws ec2 describe-availability-zones --output text --query 'AvailabilityZones[0].[RegionName]'
Run Code Online (Sandbox Code Playgroud)

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选项并仍然得到正确的答案。


kle*_*ver 11

取自@RichVel在此答案中的评论要从AWS_DEFAULT_REGIONaws 配置文件中的任一区域或区域设置解析区域(aws configure get region仅提供在配置文件中设置的值),请使用:

aws configure list | grep region | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)

例子:

$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
Run Code Online (Sandbox Code Playgroud)

$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
Run Code Online (Sandbox Code Playgroud)


J R*_*don 7

该地区如下:

curl http://169.254.169.254/latest/dynamic/instance-identity/document
Run Code Online (Sandbox Code Playgroud)

所以...

curl -s http://169.254.169.254/latest/dynamic/instance-identity/document|jq -r .region
Run Code Online (Sandbox Code Playgroud)


Ala*_*ack 6

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

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

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

python -c 'import boto3; print(boto3.Session().region_name)'
Run Code Online (Sandbox Code Playgroud)

例如

$ AWS_DEFAULT_REGION=us-east-1 python -c 'import boto3; print(boto3.Session().region_name)'
us-east-1
Run Code Online (Sandbox Code Playgroud)


dav*_*avy 6

该区域可以通过以下方式获得:

curl -s http://169.254.169.254/latest/meta-data/placement/region
Run Code Online (Sandbox Code Playgroud)


Acu*_*nus 5

这基于Jeshan BabooaAlastair McCormack的答案,这些答案具有以下已知限制:

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

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

AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:-$(aws configure get region)}
Run Code Online (Sandbox Code Playgroud)

这使用AWS_DEFAULT_REGIONif available的值,否则使用 的输出aws configure get region