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