こんにちは。技術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/