【AWS CLI】EC2の作成から削除までやってみた(前編)

記事タイトルとURLをコピーする

こんにちは。技術4課の福島です。
最近、ゲームオブスローンズ-シーズン7まで見ました。最高です。

最近、AWSマネジメントコンソールを開くのも億劫になっててしまったため、
どうにか、AWS CLIを使いこなしたいと思っております。

そこで今回は、AWS CLIを使いこなす第一歩として、
AWS CLIを使って、EC2の作成から削除まで実施しましたので、
その内容をブログにまとめたいと思います。(前編です。)

はじめに

今回は、以下の流れで作業をしました。

◆流れ
 前編 
①VPCの作成
②サブネットの作成
③IGWの作成&アタッチ
④ルートテーブルの作成&編集&アタッチ
⑤自動割り当てIP設定

 後編 
⑥キーペアの作成
⑦セキュリティグループの作成&設定
⑧EC2の作成&ログイン
⑨リソースの削除

参考)  AWS CLI を使用して IPv4 VPC とサブネットを作成
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-subnets-commands-example.html

参考)AWS CLI Command Reference
https://docs.aws.amazon.com/ja_jp/cli/latest/reference/ec2/index.html

◆補足
AWS CLIのインストールと設定方法は、以下のページを参照ください。

参考)AWS CLI のインストールと設定
https://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html

実行環境

実行環境は、以下の通りです。

#cat /etc/issue
Ubuntu 18.04.3 LTS \n \l

①VPCの作成

早速、VPCの作成から行っていきます。

1-1.VPCの確認(作業前の確認)

◆実行コマンド

aws ec2 describe-vpcs \
--query "Vpcs[].{VpcId:VpcId,CidrBlock:CidrBlock}"

 →「query」オプションを利用して、SubnetId,CidrBlockの値だけを出力するようにします。

◆実行結果

aws ec2 describe-vpcs \
--query "Vpcs[].{VpcId:VpcId,CidrBlock:CidrBlock}"
[
    {
        "VpcId": "vpc-xxxxxxxxxxxxxxx", ★
        "CidrBlock": "10.88.0.0/16"
    }
]

 →上記の場合、既にVPCが1つ作成されていることが分かります。

1-2.VPCの作成

◆実行コマンド

aws ec2 create-vpc \
--cidr-block 10.0.0.0/16

 →CIDRを「10.0.0.0/16」で作成します。実行結果は省略します。

1-3.VPCの確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-vpcs \
--query "Vpcs[].{VpcId:VpcId,CidrBlock:CidrBlock}"

 →「query」オプションを利用して、SubnetId,CidrBlockの値だけを出力するようにします。

◆実行結果

aws ec2 describe-vpcs \
--query "Vpcs[].{VpcId:VpcId,CidrBlock:CidrBlock}"
[
    {
        "VpcId": "vpc-xxxxxxxxxxxxxxx",
        "CidrBlock": "10.88.0.0/16"
    },
    {
        "VpcId": "vpc-0ccdc0139c0ddb146", ★
        "CidrBlock": "10.0.0.0/16"
    }
]

 →作業前後の内容を比較して、無事に作成できていることが分かります。

また、作成したVPCのIDは、今後利用するので、変数に入れておきます。

VPCID=vpc-0ccdc0139c0ddb146

 

②サブネットの作成

次にサブネットの作成を行います。

2-1.サブネットの確認(作業前の確認)

◆実行コマンド

aws ec2 describe-subnets \
--filters Name=vpc-id,Values=${VPCID} \
--query "Subnets[].{SubnetId:SubnetId,CidrBlock:CidrBlock}"

 →「filters」オプションを利用して、作成したVPC内に存在するサブネットのみを確認します。
  また、「query」オプションを利用して、SubnetId,CidrBlockの値だけを出力するようにします。

◆実行結果

aws ec2 describe-subnets \
--filters Name=vpc-id,Values=${VPCID} \
--query "Subnets[].{SubnetId:SubnetId,CidrBlock:CidrBlock}"
[]

 →何も表示されていないため、サブネットが存在しないことが分かります。

2-2.サブネットの作成

◆実行コマンド

aws ec2 create-subnet \
--vpc-id ${VPCID} \
--cidr-block 10.0.0.0/24

 →CIDRを「10.0.0.0/24」で作成します。実行結果は、省略します。

2-3.サブネットの確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-subnets \
--filters Name=vpc-id,Values=${VPCID} \
--query "Subnets[].{SubnetId:SubnetId,CidrBlock:CidrBlock}"

 →「filters」オプションを利用して、作成したVPC内に存在するサブネットのみを確認します。
  また、「query」オプションを利用して、SubnetId,CidrBlockの値だけを出力するようにします。

◆実行結果

aws ec2 describe-subnets \
--filters Name=vpc-id,Values=${VPCID} \
--query "Subnets[].{SubnetId:SubnetId,CidrBlock:CidrBlock}"
[
    {
        "SubnetId": "subnet-00268cd367c18384c", ★
        "CidrBlock": "10.0.0.0/24"
    }
]

 →作業前後の内容を比較して、無事に作成できていることが分かります。

また、作成したサブネットのIDは今後利用するので、変数に入れておきます。

SUBNETID=subnet-00268cd367c18384c

 

③IGWの作成&アタッチ

次にインターネットへの通信ができるようにIGWの作成&アタッチを行います。

3-1.IGWの確認(作業前の確認)

◆実行コマンド

aws ec2 describe-internet-gateways \
--query "InternetGateways[].{InternetGatewayId:InternetGatewayId}"

 →「query」オプションを利用して、InternetGatewayIdの値のみ出力します。

◆実行結果

aws ec2 describe-internet-gateways \
--query "InternetGateways[].{InternetGatewayId:InternetGatewayId}"
[
    {
        "InternetGatewayId": "igw-xxxxxxxxxxxxxxx" ★
    }
]

 →IGWが既に1つ存在することがわかります。

3-2.IGWの作成

◆実行コマンド

aws ec2 create-internet-gateway

 →出力結果は、省略します。

3-3.IGWの確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-internet-gateways \
--query "InternetGateways[].{InternetGatewayId:InternetGatewayId}"

 →「query」オプションを利用して、InternetGatewayIdの値のみ出力します。

◆実行結果

aws ec2 describe-internet-gateways \
--query "InternetGateways[].{InternetGatewayId:InternetGatewayId}"
[
    {
        "InternetGatewayId": "igw-xxxxxxxxxxxxxxx"
    },
    {
        "InternetGatewayId": "igw-029f229b98d819d26" ★
    }
]

 →作業前後の内容を比較して、無事に作成できていることが分かります。

また、作成したIGWのIDは今後利用するので、変数に入れておきます。

IGWID=igw-029f229b98d819d26

 

3-4.VPCにアタッチされているIGWの確認(作業前の確認)

◆実行コマンド

aws ec2 describe-internet-gateways \
--filters Name=attachment.vpc-id,Values=${VPCID} \
--query InternetGateways[].InternetGatewayId

 →「filters」と「query」オプションを利用して、作成したVPCにアタッチされているIGWを確認します。

◆実行結果

aws ec2 describe-internet-gateways \
--filters Name=attachment.vpc-id,Values=${VPCID}
{
    "InternetGateways": []
}

 →IGWがアタッチされていないことが分かります。

3-5.VPCにIGWをアタッチ

◆実行コマンド

aws ec2 attach-internet-gateway \
--vpc-id ${VPCID} \
--internet-gateway-id ${IGWID}

 →アタッチしたいVPCおよびアタッチするIGWを指定します。実行結果は、省略します。

3-6.VPCにアタッチされているIGWの確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-internet-gateways \
--filters Name=attachment.vpc-id,Values=${VPCID} \
--query InternetGateways[].InternetGatewayId

 →「filters」と「query」オプションを利用して、作成したVPCにアタッチされているIGWを確認します。

◆実行結果

aws ec2 describe-internet-gateways \
--filters Name=attachment.vpc-id,Values=${VPCID} \
--query InternetGateways[].InternetGatewayId
[
    "igw-029f229b98d819d26" ★
]

 →IGWが出力されていれば、作成したVPCにIGWがアタッチされたことが分かります。

④ルートテーブルの作成&編集&アタッチ

次にルートテーブルの作成&編集&アタッチを行います。

ルートテーブルの編集は、インターネットへのアクセスができるよう
全てのトラフィック(0.0.0.0/0)をIGWへルートするように設定を変更します。

また、作成したルートテーブルを先ほど作成したサブネットにアタッチ(関連付け)します。

4-1.ルートテーブルの確認(作業前の確認)

◆実行コマンド

aws ec2 describe-route-tables \
--query RouteTables[].Associations[].{RouteTableId:RouteTableId}

 →「query」オプションを利用して、RouteTableIdの値だけ出力します。

◆実行結果

aws ec2 describe-route-tables \
--query RouteTables[].Associations[].{RouteTableId:RouteTableId}
[
    {
        "RouteTableId": "rtb-09acc8e8702cd7833"
    }
]

 →ルートテーブルが既に1つ存在することが分かります。

4-2.ルートテーブルの作成

◆実行コマンド

aws ec2 create-route-table \
--vpc-id ${VPCID}

 →ルートテーブルを作成したいVPCを指定します。実行結果は、省略します。

4-3.ルートテーブルの確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-route-tables \
--query RouteTables[].Associations[].{RouteTableId:RouteTableId}

 →「query」オプションを利用して、RouteTableIdの値だけ出力します。

◆実行結果

aws ec2 describe-route-tables \
--query RouteTables[].Associations[].{RouteTableId:RouteTableId}
[
    {
        "RouteTableId": "rtb-xxxxxxxxxxxxxxx"
    },
    {
        "RouteTableId": "rtb-024abe4e4fedadb41" ★
    }
]

 →作業前後の内容を比較して、無事に作成できていることが分かります。

また、作成したルートテーブルのIDは今後利用するので、変数に入れておきます。

RTBID=rtb-024abe4e4fedadb41

 

4-4.ルートテーブルの設定確認(作業前の確認)

◆実行コマンド

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--output table

 →作成したルートテーブルを指定するため、「filters」オプションを利用します。
  また、ルートテーブルの設定を見やすいように「output」オプションを利用して、
 「table」形式で出力します。

◆実行結果

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--output table
       ・・・中略・・・
|+---------------+--------------------------+--------------------------+|
|||                              Routes                               |||
||+-----------------------+------------+--------------------+---------+||
||| DestinationCidrBlock  | GatewayId  |      Origin        |  State  |||
||+-----------------------+------------+--------------------+---------+||
|||  10.0.0.0/16          |  local     |  CreateRouteTable  |  active ||| ★
||+-----------------------+------------+--------------------+---------+||

 →ルートテーブルの設定が1つ入っていることが分かります。

4-5.ルートテーブルの設定変更

◆実行コマンド

aws ec2 create-route \
--route-table-id ${RTBID} \
--destination-cidr-block 0.0.0.0/0 \
--gateway-id ${IGWID}

 →設定変更するルートテーブルを指定し、追加するルートを指定します。
  実行結果は、省略します。

4-6.ルートテーブルの設定確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--output table

 →作成したルートテーブルを指定するため、「filters」オプションを利用します。
  また、ルートテーブルの設定を見やすいように「output」オプションを利用して、
 「table」形式で出力します。

◆実行結果

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--output table
       ・・・中略・・・
|+------------------+------------------------------+-------------------------------+|
|||                                    Routes                                     |||
||+----------------------+-------------------------+--------------------+---------+||
||| DestinationCidrBlock |        GatewayId        |      Origin        |  State  |||
||+----------------------+-------------------------+--------------------+---------+||
|||  10.0.0.0/16         |  local                  |  CreateRouteTable  |  active |||
|||  0.0.0.0/0           |  igw-029f229b98d819d26  |  CreateRoute       |  active ||| ★
||+----------------------+-------------------------+--------------------+---------+||

 →追加した設定が入っていることが分かります。

4-7.作成したサブネットにアタッチされているルートテーブルを確認(作業前の確認)

◆実行コマンド

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--query RouteTables[].Associations[].{SubnetId:SubnetId}

 →作成したルートテーブルをアタッチしているサブネットを確認します。

◆実行結果

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--query RouteTables[].Associations[].{SubnetId:SubnetId}
[]

 →作成したルートテーブルをアタッチしているサブネットがないことが分かります。

4-8.作成したサブネットにルートテーブルをアタッチ

◆実行コマンド

aws ec2 associate-route-table \
--subnet-id ${SUBNETID} \
--route-table-id ${RTBID}

 →アタッチするサブネットとアタッチしたいルートテーブルを指定します。
  実行結果は、省略します。

4-9.作成したサブネットにアタッチされているルートテーブルを確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--query RouteTables[].Associations[].{SubnetId:SubnetId}

 →作成したルートテーブルをアタッチしているサブネットを確認します。

◆実行結果

aws ec2 describe-route-tables \
--filters Name=route-table-id,Values=${RTBID} \
--query RouteTables[].Associations[].{SubnetId:SubnetId}
[
    {
        "SubnetId": "subnet-00268cd367c18384c"
    }
]

 →指定したサブネットが表示されていれば、
  無事にルートテーブルをアタッチできたことが分かります。

⑤自動割り当てIP設定

この後作成するEC2に自動でパブリックIPを付与するため、
サブネットの自動割り当てIP設定を行います。

5-1.自動割り当てIP設定の確認(作業前の確認)

◆実行コマンド

aws ec2 describe-subnets \
--filters Name=subnet-id,Values=${SUBNETID} \
--query Subnets[].{MapPublicIpOnLaunch:MapPublicIpOnLaunch}

 →MapPublicIpOnLaunch(自動割り当てIP設定)の値だけ出力します。

◆実行結果

aws ec2 describe-subnets \
--filters Name=subnet-id,Values=${SUBNETID} \
--query Subnets[].{MapPublicIpOnLaunch:MapPublicIpOnLaunch}
[
    {
        "MapPublicIpOnLaunch": false
    }
]

 →falseになっていることを確認します。

5-2.自動割り当てIPの設定変更

◆実行コマンド

aws ec2 modify-subnet-attribute \
--subnet-id ${SUBNETID} \
--map-public-ip-on-launch

 →実行結果は、省略します。

5-3.自動割り当てIP設定の確認(作業後の確認)

◆実行コマンド(作業前と同じコマンドです。)

aws ec2 describe-subnets \
--filters Name=subnet-id,Values=${SUBNETID} \
--query Subnets[].{MapPublicIpOnLaunch:MapPublicIpOnLaunch}

 →MapPublicIpOnLaunch(自動割り当てIP設定)の値だけ出力します。

◆実行結果

aws ec2 describe-subnets \
--filters Name=subnet-id,Values=${SUBNETID} \
--query Subnets[].{MapPublicIpOnLaunch:MapPublicIpOnLaunch}
[
    {
        "MapPublicIpOnLaunch": true
    }
]

 →trueになっていることを確認します。

まとめ

前編は、ここまでにしたいと思います。
初めて、AWS CLIでAWSリソースを作成したのですが、慣れないので、
とても大変でしたが、「query」や「filters」を使いこなせれば、設定の確認とかは、
AWSマネジメントコンソールを利用するより楽なのかなーと思いました。

それでは、また後編でお会いしましょ~

後編はこちら
http://blog.serverworks.co.jp/tech/2020/01/10/post-77961/

福島 和弥 (記事一覧)

SRE2課

2019/10 入社