AWS CLIで特定のEC2インスタンスタイプをサポートしているリージョンを確認するスクリプトを作成してみた

2022.08.04

prismatixのとばち(@toda_kk)です。

利用中のリージョンやAZが特定のEC2インスタンスタイプをサポートしているかどうかを調べる際に、AWSマネジメントコンソールからEC2「インスタンスタイプ」のページを表示することで確認できます。

ただ、特定のリージョンがサポートしているEC2インスタンスタイプではなく、特定のEC2インスタンスタイプをサポートしているリージョンの一覧を調べたいときがあります。

そこで、下記ページを参考にしながら、AWS CLIを利用したBashスクリプトを作成してみました。

注意点

このスクリプトでは、実行するAWSアカウントで有効になっているリージョンのみを確認の対象とします。

明示的に有効化が必要なリージョンについては、有効化していない場合にはスクリプトの実行結果に表示されません。

インスタンスタイプをサポートしているリージョンの一覧を表示するスクリプト

特定のEC2インスタンスタイプをサポートしているリージョンの一覧を表示するBashスクリプトを作成してみました。

list-instance-type-support-regions.sh

#!/bin/bash

regions=$(aws ec2 describe-regions --query 'Regions[].[RegionName]' --output text | sort)
instance_type=$1

for region in ${regions[@]}; do
    result=$(aws ec2 describe-instance-type-offerings --region ${region} --filters Name=instance-type,Values=$1 --query 'InstanceTypeOfferings[0].Location' --output text)
    if [[ $result = 'None' ]] ; then
        continue
    fi
    echo $result
done

引数にインスタンスタイプを指定します。ここではr6i.largeを指定して実行してみます。2022年8月4日現在、下記の結果が表示されました。

r6i.largeをサポートしているリージョン一覧

./list-instance-type-support-regions.sh r6i.large
ap-northeast-1
ap-northeast-2
ap-south-1
ap-southeast-1
ap-southeast-2
ca-central-1
eu-central-1
eu-north-1
eu-west-1
eu-west-2
eu-west-3
sa-east-1
us-east-1
us-east-2
us-west-1
us-west-2

表示のないリージョン、例えばap-northeast-3(大阪リージョン)やap-southeast-3(ジャカルタリージョン)は、R6iをサポートしていないことが確認できます。

インスタンスタイプをサポートしているAvailability Zoneの一覧を表示するスクリプト

インスタンスタイプによっては、リージョンではサポートしているものの特定のAvailability Zoneではサポートされていない場合があります。

例えば、EC2 Auto Scalingグループを3AZ構成で作成している場合、特定のインスタンスタイプを2つのAZではサポートしているが残りの1つではサポートしておらずEC2インスタンスの起動に失敗する、ということが発生する可能性があります。

このような状況を事前に確認する上で、リージョンだけでなくサポートしているAZの一覧を表示するBashスクリプトも作成してみました。

list-instance-type-support-availability-zones.sh

#!/bin/bash

regions=$(aws ec2 describe-regions --query 'Regions[].[RegionName]' --output text | sort)
instance_type=$1

echo "region: availability-zones"

for region in ${regions[@]}; do
    result=$(aws ec2 describe-instance-type-offerings --location-type availability-zone-id --region $region --filters Name=instance-type,Values=$1 --query 'sort(InstanceTypeOfferings[*].Location)' --output text | sed s/\\t/\,/g)
    if [[ $result = '' ]] ; then
        continue
    fi
    echo "$region: $result"
done

先ほどと同じように、引数にインスタンスタイプを指定します。同じく、r6i.largeを指定して実行してみます。2022年8月4日現在、下記の結果が表示されました。

r6i.largeをサポートしているリージョンとAZの一覧

./list-instance-type-support-availability-zones.sh r6i.large
region: availability-zones
ap-northeast-1: apne1-az2,apne1-az4
ap-northeast-2: apne2-az1,apne2-az2,apne2-az3,apne2-az4
ap-south-1: aps1-az1,aps1-az2,aps1-az3
ap-southeast-1: apse1-az1,apse1-az2,apse1-az3
ap-southeast-2: apse2-az1,apse2-az2,apse2-az3
ca-central-1: cac1-az1,cac1-az2,cac1-az4
eu-central-1: euc1-az1,euc1-az2,euc1-az3
eu-north-1: eun1-az1,eun1-az2,eun1-az3
eu-west-1: euw1-az1,euw1-az2,euw1-az3
eu-west-2: euw2-az1,euw2-az2,euw2-az3
eu-west-3: euw3-az1,euw3-az2,euw3-az3
sa-east-1: sae1-az1,sae1-az2,sae1-az3
us-east-1: use1-az1,use1-az2,use1-az4,use1-az5,use1-az6
us-east-2: use2-az1,use2-az2,use2-az3
us-west-1: usw1-az1,usw1-az3
us-west-2: usw2-az1,usw2-az2,usw2-az3,usw2-az4

R6iインスタンスタイプについて、ap-northeast-1(東京リージョン)ではサポートされているものの、AZのうちapne1-az1ではサポートされていないことがわかります。

用途に合わせてスクリプトをご活用いただけると嬉しいです。

以上、prismatixのとばち(@toda_kk)でした。