こんにちは。技術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歩を進むことができたかなと思います。
以上です。それでは、またお会いしましょう。