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.
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)
Joh*_*ees 12
下面给出了 CLI 实际使用的区域,无论是否设置环境变量:
aws ec2 describe-availability-zones --output text --query 'AvailabilityZones[0].[RegionName]'
Run Code Online (Sandbox Code Playgroud)
CLI 将使用的区域由以下优先顺序确定:
--region选项AWS_DEFAULT_REGION环境变量--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)
该地区如下:
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)
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)
该区域可以通过以下方式获得:
curl -s http://169.254.169.254/latest/meta-data/placement/region
Run Code Online (Sandbox Code Playgroud)
这基于Jeshan Babooa和Alastair 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。
| 归档时间: |
|
| 查看次数: |
13471 次 |
| 最近记录: |