特定のインスタンスタイプが特定リージョンで利用可能か調べる方法

# はじめに
特定のインスタンスタイプが東京リージョンで利用可能かを調べたときの方法を備忘として記載する。

# 方法
AWS CLIの`describe-instance-type-offerings`コマンドを使用する。

```
aws ec2 describe-instance-type-offerings --location-type availability-zone \
  --filters Name=instance-type,Values=<instance-type> \
  --region <region-name>
```

## 使用例
東京リージョンでインスタンスタイプ p5en.48xlargeが利用可能か確認する。

コマンド

```
aws ec2 describe-instance-type-offerings --location-type availability-zone \
  --filters Name=instance-type,Values=p5en.48xlarge \
  --region ap-northeast-1
```

実行結果
```
{
    "InstanceTypeOfferings": [
        {
            "InstanceType": "p5en.48xlarge",
            "LocationType": "availability-zone",
            "Location": "ap-northeast-1a"
        }
    ]
}
```

インスタンスタイプ p5en.48xlargeは東京リージョン(ap-northeast-1a)で利用できることを確認できました。

ちなみにですが、利用できない場合は何も表示されません。
例として東京リージョンでインスタンスタイプ f2.12xlargeが利用できるか確認したときの結果も載せておきます。

コマンド

```
aws ec2 describe-instance-type-offerings --location-type availability-zone \
  --filters Name=instance-type,Values=f2.12xlarge \
  --region ap-northeast-1
```

実行結果
```
{
    "InstanceTypeOfferings": []
}
```

# 全リージョンを対象にして調べたい場合

特定のインスタンスタイプがどのリージョンで利用可能か調べたい場合は以下のシェルスクリプトを作成して実行します。
インスタンスタイプ部分を任意の値に変更して実行してください。
CloudShell上で作成して実行すると簡単に確認できるかと思います。

```shell
for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
    echo "Region: $region"
    aws ec2 describe-instance-type-offerings \
        --location-type availability-zone \
        --filters Name=instance-type,Values=<instance-type> \
        --region $region \
        --query 'InstanceTypeOfferings[].{AZ:Location,Type:InstanceType}' \
        --output table
done
```

## 使用例

インスタンスタイプ f2.12xlargeが利用可能なリージョンを調べる。

コマンド
```shell
for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
    echo "Region: $region"
    aws ec2 describe-instance-type-offerings \
        --location-type availability-zone \
        --filters Name=instance-type,Values=f2.12xlarge \
        --region $region \
        --query 'InstanceTypeOfferings[].{AZ:Location,Type:InstanceType}' \
        --output table
done
```

実行結果
```
Region: ap-south-1
Region: eu-north-1
Region: eu-west-3
Region: eu-west-2
-------------------------------
|DescribeInstanceTypeOfferings|
+-------------+---------------+
|     AZ      |     Type      |
+-------------+---------------+
|  eu-west-2c |  f2.12xlarge  |
|  eu-west-2a |  f2.12xlarge  |
+-------------+---------------+
Region: eu-west-1
Region: ap-northeast-3
Region: ap-northeast-2
Region: ap-northeast-1
Region: ca-central-1
Region: sa-east-1
Region: ap-southeast-1
Region: ap-southeast-2
Region: eu-central-1
Region: us-east-1
-------------------------------
|DescribeInstanceTypeOfferings|
+-------------+---------------+
|     AZ      |     Type      |
+-------------+---------------+
|  us-east-1b |  f2.12xlarge  |
|  us-east-1e |  f2.12xlarge  |
|  us-east-1d |  f2.12xlarge  |
|  us-east-1a |  f2.12xlarge  |
|  us-east-1c |  f2.12xlarge  |
+-------------+---------------+
Region: us-east-2
Region: us-west-1
Region: us-west-2
```

インスタンスタイプ f2.12xlargeはバージニア北部およびロンドンで利用可能なことがわかりました。

# 終わりに
AWS CLIおよびシェルスクリプトを使用して特定のインスタンスタイプが利用できるリージョンを確認してみました。
公式ドキュメントや公式ブログで確認できる情報かもしれませんが、サッと確認するのであればこちらの方が早いのかなとも思いました。
今後も様々なAWS CLIコマンドを触ってみてブログを書いていきたいなと思います。

# 参考
・[describe-instance-type-offerings](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/ec2/describe-instance-type-offerings.html)
・[Amazon EC2 インスタンスタイプガイドのドキュメント履歴](https://docs.aws.amazon.com/ja_jp/ec2/latest/instancetypes/doc-history.html)
・[第 2 世代 FPGA 搭載の Amazon EC2 インスタンス (F2) が使用可能に](https://aws.amazon.com/jp/blogs/news/now-available-second-generation-fpga-powered-amazon-ec2-instances-f2/)