[PR] あなたが Kindle で読みたいその本、Kindle に対応したら Twitter でお知らせします。

AWS CLI で EC2 がサポートしているプラットフォームを調べる

Posted on

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 ライフを!