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

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

こんにちは。技術4課の福島です。
最近、ウォーキングデッドを見ております。
ゾンビより人の怖さを感じております。

さて今回は、以下のブログの続きになります。

◆【AWS CLI】EC2の作成から削除までやってみた(前編)
http://blog.serverworks.co.jp/tech/2020/01/10/post-77774

はじめに

前回は、①~⑤の内容をブログにまとめましたので、
今回は、⑥~⑨の内容をまとめていきたいと思います。

◆流れ
 前編 
①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

⑥キーペアの作成

早速ですが、この後作成するEC2にログインするために利用するキーペアを作成します。

6-1.キーペアの確認(作業前の確認)

◆実行コマンド

aws ec2 describe-key-pairs

 →キーペアの一覧を表示します。実行結果は省略します。

6-2.キーペアの作成

◆実行コマンド

aws ec2 create-key-pair \
--key-name MyKeyPair \
--query 'KeyMaterial' \
--output text > MyKeyPair.pem

 →MyKeyPair という名前でキーペアを作成します。実行結果は省略します。

また、作成したキーペアの権限を変更します。

◆実行コマンド

chmod 400 MyKeyPair.pem

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

6-3.キーペアの確認(作業後の確認)

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

aws ec2 describe-key-pairs

 →キーペアの一覧を表示します。実行結果は省略します。

⑦セキュリティグループの作成

次に作成するEC2インスタンスに設定するセキュリティグループを作成します。

7-1.セキュリティグループの確認(作業前の確認)

◆実行コマンド

aws ec2 describe-security-groups \
--query "SecurityGroups[].IpPermissions[].UserIdGroupPairs[].{GroupId:GroupId}"

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

◆実行結果

aws ec2 describe-security-groups \
--query "SecurityGroups[].IpPermissions[].UserIdGroupPairs[].{GroupId:GroupId}"
[
    {
        "GroupId": "sg-xxxxxxxxxxxxxxx" ★
    }
]

 →上記の場合、セキュリティグループが1つ存在することが分かります。

7-2.セキュリティグループの作成

◆実行コマンド

aws ec2 create-security-group \
--group-name SSHAccess \
--description "Security group for SSH access" \
--vpc-id ${VPCID}

 →セキュリティグループ名および説明、VPCを指定します。
  出力結果は、省略します。

7-3.セキュリティグループの確認(作業後の確認)

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

aws ec2 describe-security-groups \
--filters "Name=group-name,Values=SSHAccess" \
--query "SecurityGroups[].{GroupName:GroupName,GroupId:GroupId}"

 →今回は、セキュリティグループ名を「SSHAccess」で作成するため、
  「filters」オプションを利用して、group-nameの値が
  「SSHAccess」の設定のみ、出力します。
  また、「query」オプションを利用して、GroupName,GroupIdの値だけ出力します。

◆実行結果

aws ec2 describe-security-groups \
--filters "Name=group-name,Values=SSHAccess" \
--query "SecurityGroups[].{GroupName:GroupName,GroupId:GroupId}"
[
    {
        "GroupName": "SSHAccess", ★
        "GroupId": "sg-078b5bc2a1491b256"
    }
]

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

また、作成したセキュリティグループのIDは今後利用するので、変数に入れておきます。

SGID=sg-078b5bc2a1491b256

 

7-4.セキュリティグループの設定確認(作業前の確認)

◆実行コマンド

aws ec2 describe-security-groups \
--filters "Name=group-id,Values=${SGID}" \
--query 'SecurityGroups[].IpPermissions[]' \
--output table

 →「filters」オプションを利用して、作成したセキュリティグループを指定します。
  また、「query」オプションを利用して、インバウンド設定のみを出力します。
  なお、設定を見やすいように「output」オプションを利用して、「table」形式で出力します。
  出力結果は省略します。 

7-5.セキュリティグループの設定変更

◆実行コマンド

aws ec2 authorize-security-group-ingress \
--group-id ${SGID} \
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0

 →インターネットからSSHアクセスするために必要な設定を行います。

7-6.セキュリティグループの設定確認(作業後の確認)

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

aws ec2 describe-security-groups \
--filters "Name=group-id,Values=${SGID}" \
--query 'SecurityGroups[].IpPermissions[]' \
--output table

 →「filters」オプションを利用して、作成したセキュリティグループを指定します。
  また、「query」オプションを利用して、インバウンド設定のみを出力します。
  なお、設定を見やすいように「output」オプションを利用して、「table」形式で出力します。

◆実行結果

aws ec2 describe-security-groups \
--filters "Name=group-id,Values=${SGID}" \
--query 'SecurityGroups[].IpPermissions[]' \
--output table
--------------------------------------
|       DescribeSecurityGroups       |
+----------+--------------+----------+
| FromPort | IpProtocol   | ToPort   |
+----------+--------------+----------+
|  22      |  tcp         |  22      |
+----------+--------------+----------+
||             IpRanges             ||
|+----------------------------------+|
||              CidrIp              ||
|+----------------------------------+|
||  0.0.0.0/0                       ||
|+----------------------------------+|

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

⑧EC2の作成&ログイン

やっとEC2を作成するところまできました!
ここから実際にEC2を作成していきます。

8-1.EC2の確認(作業前の確認)

◆実行コマンド

aws ec2 describe-instances \
--query "Reservations[].Instances[].{InstanceId:InstanceId}"

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

◆実行結果

aws ec2 describe-instances --profile kensho --query "Reservations[].Instances[].{InstanceId:InstanceId}"
[
    {
        "InstanceId": "i-xxxxxxxxxxxxxxxx" ★
    }
]

 →上記の場合、EC2インスタンスが1つ存在することが分かります。

8-2.EC2の作成

◆実行コマンド

aws ec2 run-instances \
--image-id ami-011facbea5ec0363b \
--count 1 \
--instance-type t2.micro \
--key-name MyKeyPair \
--security-group-ids ${SGID} \
--subnet-id ${SUBNETID}

 →それぞれのオプションの詳細は、以下の通りです。
  上記のAMIは、東京リージョンのAmazonLinux2を指定しております。

オプション 説明
--image-id AMIのIDを指定します。
--count 起動するインスタンスの数を指定します。
--instance-type インスタンスタイプを指定します。
--key-name キーペアを指定します。
--security-group-ids セキュリティーグループのIDを指定します。
--subnet-id サブネットIDを指定します。

 

8-3.EC2の確認(作業後の確認)

◆実行コマンド

aws ec2 describe-instances \
--query "Reservations[].Instances[].{InstanceId:InstanceId}"

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

◆実行結果

aws ec2 describe-instances --profile kensho --query "Reservations[].Instances[].{InstanceId:InstanceId}"
[
    {
        "InstanceId": "i-xxxxxxxxxxxxxxxx"
    },
    {
        "InstanceId": "i-08045a7db3443a71e" ★
    }
]

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

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

EC2ID=i-08045a7db3443a71e

 

なお、EC2が正常に起動できているか、以下のコマンドで確認できます。

◆実行コマンド

aws ec2 describe-instances \
--filters "Name=instance-id,Values=${EC2ID}" \
--query "Reservations[].Instances[].State[].Name"

◆実行結果

aws ec2 describe-instances \
--filters "Name=instance-id,Values=${EC2ID}" \
--query "Reservations[].Instances[].State[].Name"
[
    "running"
]

 →runningとなっているので、正常に作成できていることが分かります。

8-4.EC2へのログイン

◆実行コマンド

aws ec2 describe-instances \
--filters "Name=instance-id,Values=${EC2ID}" \
--query "Reservations[].Instances[].NetworkInterfaces[].PrivateIpAddresses[].Association[].PublicIp"

 →上記コマンドでEC2のパブリックIPを確認します。
  実行結果は、省略します。

ssh -i MyKeyPair.pem -l ec2-user 【パブリックIP】

 →上記で確認したパブリックIPを入力します。

◆実行結果

#ssh -i MyKeyPair.pem -l ec2-user xx.xx.xx.xx
The authenticity of host 'xx.xx.xx.xx (xx.xx.xx.xx)' can't be established.
ECDSA key fingerprint is SHA256:sXS5eyONPVDG+yhXOf78l9s14KsORwOczd5zHYtk40A.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xx.xx.xx.xx' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
2 package(s) needed for security, out of 13 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-0-105 ~]$

 →作成したEC2のプロンプトが表示されているので、無事にEC2にログインできました!!

⑨リソースの削除

最後に作成したリソースの削除を行います。

◆実行コマンド

①EC2インスタンスの削除
aws ec2 terminate-instances --instance-ids ${EC2ID}

②セキュリティグループの削除
aws ec2 delete-security-group --group-id ${SGID}

③サブネットの削除
aws ec2 delete-subnet --subnet-id ${SUBNETID}

④ルートテーブルの削除
aws ec2 delete-route-table --route-table-id ${RTBID}

⑤インターネットゲートウェイのデタッチ
aws ec2 detach-internet-gateway --internet-gateway-id ${IGWID} --vpc-id ${VPCID}

⑥インターネットゲートウェイの削除
aws ec2 delete-internet-gateway --internet-gateway-id ${IGWID}

⑦VPCの削除
aws ec2 delete-vpc --vpc-id ${VPCID}

⑧キーペアの削除
aws ec2 delete-key-pair --key-name MyKeyPair.pem
rm MyKeyPair.pem

 →これでリソースの削除完了です。
  リソースが削除されたことを確認したい場合、
  今まで使ったコマンドを利用して、確認することができます。

まとめ

かなり長くなってしまいましたが、
AWS CLIを利用して、EC2の作成から削除までやってみました。

最初は、「query」、「filters」オプションがよく分からなく、
頭を抱えていましたが、少し理解を深めることができました。

とりあえず、無事にAWS CLIを使いこなすための第1歩を進むことができたかなと思います。

以上です。それでは、またお会いしましょう。

福島 和弥 (記事一覧)

SRE2課

2019/10 入社