AWS CLI で EC2 がサポートしているプラットフォームを調べる
Posted on
- #aws
Amazon EC2 には EC2-Classic と EC2-VPC の 2 つのプラットフォームがあります。
AWS Management Console にログインして EC2 のダッシュボードを開けば、右上の Account Attributes で確認できます。最近作られたアカウントだと EC2-VPC しかサポートされていません。 EC2-VPC でも Default VPC というものが予め用意されているので、初心者の方でも VPC を意識することなく EC2 を使える仕組みになっています。
EC2-Classic と EC2-VPC で処理を分けたい
ここからが本題です。仕事でも AWS を利用していますが、プロジェクトや環境(本番、ステージング、開発など)ごとにアカウントを使い分けています。アカウントが作られた時期が違うので、中には EC2-Classic と EC2-VPC の両方が使えるアカウントも存在します。
日々の運用は AWS CLI を使って自動化を進めているのですが、稀に EC2-VPC でしか使えないオプションがあって、それを EC2-Classic が使えるアカウントで実行するとエラーになることがあります。スクリプトに汎用性を持たせるにはサポートしているプラットフォームをチェックして、それに応じて処理を分ける必要があります。
どうやってチェックするか?
AWS CLI の aws ec2 describe-account-attributes
を使ってチェックします。両方をサポートするアカウントで実行してみます。
$ aws ec2 describe-account-attributes --attribute-names supported-platforms
{
"AccountAttributes": [
{
"AttributeName": "supported-platforms",
"AttributeValues": [
{
"AttributeValue": "EC2"
},
{
"AttributeValue": "VPC"
}
]
}
]
}
AttributeValue
のオブジェクトが 2 つ返ってきます。次に EC2-VPC しかサポートしないアカウントで実行してみます。
$ aws ec2 describe-account-attributes --attribute-names supported-platforms
{
"AccountAttributes": [
{
"AttributeName": "supported-platforms",
"AttributeValues": [
{
"AttributeValue": "VPC"
}
]
}
]
}
AttributeValues
のオブジェクトが 1 つしか返ってきません。これを使ってシェルスクリプトの関数にしてみます。
#!/bin/bash
supported_platform() {
aws ec2 describe-account-attributes \
--attribute-names supported-platforms \
| jq -r ".AccountAttributes[].AttributeValues | length"
}
if [ $(supported_platform) -eq 2 ]; then
echo "Supported EC2-Classic, EC2-VPC"
else
echo "Supported EC2-VPC only"
fi
あとは supported_platform
の結果を展開させて、if 文で条件分岐すれば OK です。 AWS CLI でよい AWS ライフを!