✅
リージョン、AZで使用可能なインスタンスタイプを調査する
背景
スポットインスタンスを使っているのですが、
不意に停止されたときのことを考えてスペアのインスタンスタイプを控えておくことにしました。
しかしそのインスタンスタイプがリージョン、AZで使用できないと意味がないため
対象のインスタンスタイプがリージョン、AZに対応しているか調査してみます。
流れ
コンソール、awscliで調べられるらしいので、それぞれで方法を探します。
環境
$ aws --version
aws-cli/2.11.2 Python/3.11.2 Linux/5.4.0-148-generic exe/x86_64.ubuntu.20 prompt/off
コンソール
手順
EC2コンソールから参照可能です。
- ログイン
- 探したいリージョンに移動
- InstanceTypesを選択
- 探したいインスタンスタイプでフィルタ
- Networking > Availability zonesに記載があります
この図から、インスタンスタイプt3.xlarge
が東京リージョンa,c,dで使用可能であることがわかります。
インスタンスタイプは複数指定可能
フィルタに必要なインスタンスタイプは複数でも可能です。
3つ指定したらこのような比較画面になりました。(はじめてみた...)
この図から、インスタンスタイプt3a.xlarge
は東京リージョンcだと使用出来ないことがわかります。
awscli
awscliではdescribe-instance-type-offerings
APIを使うことで調査することができます。
リファレンスにあるサンプルを使って試してみたいと思います。
リージョンで有効なインスタンスタイプをすべて出力
--region
で探したいリージョンを指定すればOKです。
$ aws ec2 describe-instance-type-offerings --region ap-northeast-1
{
"InstanceTypeOfferings": [
{
"InstanceType": "r5a.4xlarge",
"LocationType": "region",
"Location": "ap-northeast-1"
},
{
"InstanceType": "r3.2xlarge",
"LocationType": "region",
"Location": "ap-northeast-1"
},
...
今後の例も同様ですが、返ってくるのはjson形式かつ複数の値が返ってくるため、
適宜フィルタが必要です。
AZで有効なインスタンスタイプをすべて出力
探したいリージョン、AZをコマンドにのっける必要があります。
$ aws ec2 describe-instance-type-offerings \
> --location-type availability-zone \
> --filters Name=location,Values=ap-northeast-1a \
> --region ap-northeast-1
{
"InstanceTypeOfferings": [
{
"InstanceType": "r5a.2xlarge",
"LocationType": "availability-zone",
"Location": "ap-northeast-1a"
},
{
"InstanceType": "r5dn.metal",
"LocationType": "availability-zone",
"Location": "ap-northeast-1a"
},
...
リージョン内で指定したインスタンスタイプが有効か調べる
今度はリージョンとインスタンスタイプを使います。
先程のサンプルでは--filters
でAZを指定していましたが、今回はインスタンスタイプを指定します。
$ aws ec2 describe-instance-type-offerings \
> --filters Name=instance-type,Values=c5* \
> --query "InstanceTypeOfferings[].InstanceType" \
> --region ap-northeast-1
[
"c5n.18xlarge",
"c5d.metal",
"c5d.9xlarge",
"c5d.12xlarge",
"c5a.large",
"c5.metal",
"c5.4xlarge",
"c5a.24xlarge",
"c5d.4xlarge",
"c5d.large",
"c5a.12xlarge",
"c5.18xlarge",
"c5d.18xlarge",
"c5d.2xlarge",
"c5d.xlarge",
"c5n.large",
"c5.large",
"c5n.9xlarge",
"c5n.metal",
"c5.12xlarge",
"c5a.4xlarge",
"c5a.2xlarge",
"c5.xlarge",
"c5a.16xlarge",
"c5.2xlarge",
"c5n.xlarge",
"c5.24xlarge",
"c5n.2xlarge",
"c5a.xlarge",
"c5n.4xlarge",
"c5.9xlarge",
"c5d.24xlarge",
"c5a.8xlarge"
]
複数条件のフィルタは可能?
--filtersで複数指定すればOKです。
ここではAZとインスタンスタイプの2つでフィルタリングをしています。
aws ec2 describe-instance-type-offerings \
--location-type availability-zone \
--filters Name=location,Values=ap-northeast-1a Name=instance-type,Values=c5*\
--region ap-northeast-1
ここまでできたらあとはjsonをわかりやすくする処理を加えればOKですね。
参考
Discussion