如何通过AWS CLI获取AWS区域英文名称并生成对应表?
我之前也遇到过这个问题——AWS CLI默认的aws ec2 describe-regions确实只返回区域代码(比如ap-northeast-1),不会直接给出像Asia Pacific (Tokyo)这样的友好英文名称。不过有个靠谱的方法可以自动获取官方维护的区域名称映射,不用手动硬编码,分享给你:
前提准备
首先确保你的Linux环境已经安装了jq(用来处理JSON输出的工具),如果没装的话可以用包管理器安装:
- Debian/Ubuntu系:
sudo apt update && sudo apt install jq -y - RHEL/CentOS系:
sudo yum install jq -y
一键生成区域名称对应表
运行以下命令,就能直接输出你想要的键值对格式:
aws ssm get-parameters-by-path --path "/aws/service/global-infrastructure/regions" --recursive --query "Parameters[*].Value" | jq -r 'map(fromjson) | map("\'\(.RegionName)\' => \'\(.RegionDescription)\'") | join(", ")'
这条命令的原理是:AWS SSM(Systems Manager)提供了官方维护的公共参数路径,里面存储了全球所有AWS区域的详细信息(包括区域代码和友好名称)。我们通过get-parameters-by-path递归获取所有区域的参数,再用jq解析JSON并格式化成你需要的字符串格式。
输出示例会和你给出的完全一致:'ap-northeast-1' => 'Asia Pacific (Tokyo)', 'ap-southeast-1' => 'Asia Pacific (Singapore)', 'ap-southeast-2' => 'Asia Pacific (Sydney)', ...
可选:只获取已启用的区域
如果你的账号只启用了部分区域,或者你只想过滤出无需手动启用的区域,可以在命令中加入过滤条件:
aws ssm get-parameters-by-path --path "/aws/service/global-infrastructure/regions" --recursive --query "Parameters[*].Value" | jq -r 'map(fromjson) | map(select(.OptInStatus == "opt-in-not-required" or .OptInStatus == "opted-in")) | map("\'\(.RegionName)\' => \'\(.RegionDescription)\'") | join(", ")'
这个命令会自动排除那些需要手动申请启用且未激活的区域,只返回当前可用的区域映射。
备选方案(如果无法访问SSM)
如果因为权限限制无法使用SSM,可以手动维护一个区域映射表,但这种方法需要定期更新才能跟上AWS新增区域的节奏。不过上面的SSM方法是官方维护的,绝对是最省心的选择。
内容的提问来源于stack exchange,提问作者chriscatfr




