AWSサービスの構築をBashで自動化してみる

 AWSで各種サービスを利用するとき、何かしらの構築が必要になります。例えばEC2でWebアプリを動かしたい!というときには、EC2インスタンスの作成が必要になります。もしかしたら新しいVPCを用意するところから始める必要があるかもしれません。この場合、EC2インスタンスだけではなく、VPC、ルートテーブル、インターネットゲートウェイ、サブネット、ACL…とAWSでのネットワーク構築についても実施する必要が出てきます。

 ある程度操作に慣れてくると、次はコマンド一つで構築できないか、と考えるようになります。AWSはaws-cliというBashで実行できるツールを用意してくれています。今回、このツールを使った、サブネットを1つ作るプログラムを紹介します。

 早速プログラムを載せます。
 私の環境では aws-cli の出力形式を json としているため、Bashで扱いやすくなるよう jq コマンドもインストールしています。

# Read default vpc's id.
_region="ap-northeast-1"
_default_vpc_id=$( \
    aws --region ${_region} ec2 describe-vpcs \
    | jq -r '.Vpcs[] | select(.CidrBlock == "172.31.0.0/16") | .VpcId' \
)

# Try to create subnet for ap-northeast-1d.
_az="${_region}d"
_cidr="172.31.160.0/20"
_existing=$( \
    aws --region ${_region} ec2 describe-subnets \
    | jq -r ".Subnets[] | select(.CidrBlock == \"${_cidr}\") | .CidrBlock" \
)
if [ "${_existing}" = "" ]; then
    aws --region ap-northeast-1 ec2 create-subnet \
        --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=Public Subnet for App Instances}]" \
        --vpc-id ${_default_vpc_id} \
        --availability-zone ${_az} \
        --cidr-block ${_cidr}
else
    echo "Subnet ${_cidr} is already exists. Skip creation."
fi

 このプログラムは東京リージョン(ap-northeast-1)のデフォルトVPCに、サブネット “172.31.160.0/20” を追加します。また、すでに作成済みの場合はスキップするよう、考慮しています。
 普段マネージメントコンソールでやっている操作を、実行するかどうかの判断も含めてBashスクリプトとして書き起こしたものになります。

 これを雛形にすれば、だいたいの構築をコマンド一発で済ませる事ができるようになるのではないでしょうか。aws-cli、使いこなすといろいろと捗るので、是非マスターしたいですね!

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください