【保存版】AWSのCLIを使ってVPCの作成〜EC2のSSH接続までを行おう!
こんにちは、CryptoGamesの高橋です。
クリスペというサービスを行っている会社です。
本日は、CLI(コマンドラインインターフェース)を使って、VPCの作成〜EC2のSSH接続までを行います。
こちらの公式に沿って進めていきます。
また、CLIのインストールなどがご不明の場合はこちらからご確認ください。
はじめる前に
EC2の実行などには料金がかかります。
事前に確認を行い、テスト終了後は最終章のクリーンアップを忘れずに行なってください。
0 IAMにEC2の権限をつけよう
まずはIAMにEC2の権限をつけていきます。
IAMユーザーの作成を行ったことがない場合はこちらの第2章もご参照ください。
ユーザー名を選択します。
![](https://assets.st-note.com/img/1657426336152-TZzYKxnSzA.png?width=1200)
「アクセス権限」から「アクセス権限の追加」
![](https://assets.st-note.com/img/1657426349670-jCetpGa2rX.png?width=1200)
「既存のポリシーを直接アタッチ」から「AmazonEC2FullAccess」を選択します。
ただし、アクセス権限は最小限であることが原則です。
本番稼働時には必要最小限のポリシーのみをアタッチしましょう。
![](https://assets.st-note.com/img/1657426358864-vlV6LTyzHx.png?width=1200)
ポリシーを確認し、「アクセス権限の追加」
![](https://assets.st-note.com/img/1657426367491-pWaekVZJzr.png?width=1200)
これで、ポリシーのアタッチができました。
![](https://assets.st-note.com/img/1657426377269-ySyD0N1jHK.png?width=1200)
1 VPCを作成しよう!
では、早速作っていきましょう。
まずはこちらのVPCを作っていきます。
![](https://assets.st-note.com/img/1657428237547-9WcCHtBWbA.png?width=1200)
vpcを作成するために「create-vpc」コマンドを使います。
aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query Vpc.VpcId --output text --profile <profile名>
なお--profileについてご不明な場合は下の記事の第2・3章をご確認ください。
コマンドをうつと、VPC ID が出てきました。
![](https://assets.st-note.com/img/1657401902686-gKGbqRAdVJ.png?width=1200)
VPCの画面を見てみると、このようにVPCができていました!
![](https://assets.st-note.com/img/1657401912162-GTDaIOO5HX.png?width=1200)
2 サブネットを作ろう!
次は、こちらのサブネットを作っていきましょう。
![](https://assets.st-note.com/img/1657428343906-lDyxPUrri5.png?width=1200)
2ー1 サブネットを作ろう
では、前章でできたVPCの中にサブネットを作りましょう。
「create-subnet」コマンドを使います。
aws ec2 create-subnet --vpc-id <vpc ID> --cidr-block 10.0.1.0/24 --profile <profile名>
下のように、うまくできました!
![](https://assets.st-note.com/img/1657402499216-Xmgse4mVTW.png?width=1200)
ちなみに、CIDR表記がよくわからないという方はググることをお勧めします。
一度理解してしまえば、しっくりきやすい概念だと思います。
下のように、サブネットもできていました。
![](https://assets.st-note.com/img/1657402818802-5cLOsufBAp.png?width=1200)
2ー2 サブネットをもう一つ作ろう
では、同じようにして、もう一つサブネットを作りましょう。
aws ec2 create-subnet --vpc-id <vpc ID> --cidr-block 10.0.0.0/24 --profile <profile名>
どこが違うでしょう?
それはCIDR ブロックになります。
![](https://assets.st-note.com/img/1657403155563-pm2rFibrxs.png?width=1200)
下のように見るとわかりやすいと思います。
同じVPC内に異なるCIDRのサブネットが2つできました。
![](https://assets.st-note.com/img/1657403163696-MuKkpjbOWx.png?width=1200)
3 インターネットゲートウェイを作ろう!
次は、インターネットゲートウェイを作ります。
![](https://assets.st-note.com/img/1657428450841-m1QHpuug5k.png?width=1200)
では、次にインターネットゲートウェイを作ってみましょう。
「create-internet-gateway」コマンドを使います。
aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text --profile <profile名>
うまく行ってそうですね。
![](https://assets.st-note.com/img/1657403637557-IbZ3fLco8a.png?width=1200)
下のようにできました!
まだ、どのVPCにも紐づいていないので、「Detached」となっています。
![](https://assets.st-note.com/img/1657403645539-2jZGEfRC0E.png?width=1200)
4 インターネットゲートウェイをVPCにアタッチしよう!
次は、インターネットゲートウェイをVPCにアタッチしましょう。
![](https://assets.st-note.com/img/1657428592334-rq2LsIaTzb.png?width=1200)
では「attach-internet-gateway」コマンドを使って、インターネットゲートウェイをVPCにアタッチしましょう。
aws ec2 attach-internet-gateway --vpc-id <vpc ID> --internet-gateway-id <インターネットゲートウェイID> --profile <profile名>
特に反応はなさそうでしたが、
![](https://assets.st-note.com/img/1657404161357-580QQb5NlA.png?width=1200)
下のように、アタッチがされていました。
![](https://assets.st-note.com/img/1657404170675-ZIIFbEkEzP.png?width=1200)
5 ルートテーブルを作ろう!
次のようなインターネットゲートウェイに向かうルートテーブルを作りましょう。
![](https://assets.st-note.com/img/1657428805762-4wJ3FPITpl.png?width=1200)
では、「create-route-table」コマンドで、ルートテーブルを作りましょう。
aws ec2 create-route-table --vpc-id <vpc ID> --query RouteTable.RouteTableId --output text --profile <profile名>
こんな感じでできました。
![](https://assets.st-note.com/img/1657404984870-X9F7lggyVy.png?width=1200)
「ルートテーブル」を見てみると、すでに2つできていると思います。
一方は、VPCが作られた時にデフォルトでできたルートテーブルです。
![](https://assets.st-note.com/img/1657404993357-q9NGfDQBTL.png?width=1200)
6 インターネットゲートウェイへのルートを作ろう
ルートテーブルのルートを作ってみましょう。
![](https://assets.st-note.com/img/1657428942172-RAQvyfoXzm.png?width=1200)
6ー1 ルートを設定しよう
では、ルートテーブル内に、インターネットゲートウェイへのルートを作りましょう。
「create-route」コマンドを実施します。
aws ec2 create-route --route-table-id <ルートテーブル ID> --destination-cidr-block 0.0.0.0/0 --gateway-id <インターネットゲートウェイID> --profile <profile名>
![](https://assets.st-note.com/img/1657405630828-yUqDmQv9eh.png?width=1200)
結果、下のように、「10.0.0.0/16」以外は全てインターネットゲートウェイに向かうようにルートができました。
![](https://assets.st-note.com/img/1657405639641-Mxgz3BlyaI.png?width=1200)
6ー2 コマンドでルートを確認する(参考)
なお、「describe-route-tables」コマンドでも確認ができます。
aws ec2 describe-route-tables --route-table-id <ルートテーブル ID> --profile <profile名>
こんな感じです。
![](https://assets.st-note.com/img/1657406181591-4FlRZ2POI8.png?width=1200)
7 サブネットにルートテーブルを紐付けよう!
サブネットにルートテーブルを紐付けましょう。
![](https://assets.st-note.com/img/1657429156675-5m6xui9SGC.png?width=1200)
7ー1 VPC内のサブネットを確認しよう
まずは、次の「describe-subnets」コマンドで、VPC内のサブネットを確認しましょう。
aws ec2 describe-subnets --filters "Name=vpc-id,Values=<VPC ID>" --query "Subnets[*].{ID:SubnetId,CIDR:CidrBlock}" --profile <profile名>
下のように2つのサブネットがあることが確認できます。
![](https://assets.st-note.com/img/1657408576929-cLmD3n8KQy.png?width=1200)
7ー2 サブネットにルートテーブルを紐付けよう!
今回は「subnet-01c3fd3f4f3d4c369」の方にルートテーブルを紐づけます。
次のように「associate-route-table」コマンドを利用します。
aws ec2 associate-route-table --subnet-id <サブネット名> --route-table-id <ルートテーブルID> --profile <profile名>
次のように紐づけられました。
![](https://assets.st-note.com/img/1657409420893-67NBIDtvdX.png?width=1200)
まずは「ルートテーブル」を見てみましょう。
「明示的なサブネットの関連付け」が追加されました。
![](https://assets.st-note.com/img/1657409534925-norUCrn42y.png?width=1200)
「サブネット」も見てみましょう。
今回紐付けたサブネットにルートテーブルが紐づいています。
![](https://assets.st-note.com/img/1657409103903-ZxsATB8rpx.png?width=1200)
一方、今回紐付けを行なっていないサブネットはデフォルトのルートテーブルが紐づけられています。
![](https://assets.st-note.com/img/1657409140005-ywcHAuxV7i.png?width=1200)
8 EC2を作ろう
では、EC2を作っていきましょう!
![](https://assets.st-note.com/img/1657429234212-d6LT5P4kvF.png?width=1200)
8ー1 キーペアを作ろう!
「create-key-pair」コマンドでキーペアを作りましょう。
aws ec2 create-key-pair --key-name MyKeyPair --query "KeyMaterial" --output text > MyKeyPair.pem --profile <profile名>
下のようになります。
![](https://assets.st-note.com/img/1657414812838-48BrWrNWeW.png?width=1200)
MyKeyPair.pemは下のようにホームディレクトリに保存されていました。
![](https://assets.st-note.com/img/1657415036893-xHNhyRCgZa.png)
中身はこんな感じです。
![](https://assets.st-note.com/img/1657415044233-SikAsWsyOY.png?width=1200)
画面上でも、このようにキーペアができていることがわかります。
![](https://assets.st-note.com/img/1657415597233-95A0XnS0jz.png?width=1200)
8ー2 キーペアの権限を変更しよう
キーペアは重要な情報なので、誰からも読むことができたら大変です。
そのため、所有者のみ読み取り権限のみをつけます。
下のように、chmodのコマンドを実行しましょう。
chmod 400 MyKeyPair.pem
chmodがご不明の場合はググってみるとたくさん出てくると思います。
![](https://assets.st-note.com/img/1657415358118-CFxFArXJNb.png?width=1200)
9 セキュリティグループを作ろう
次に、セキュリティグループを作ってみましょう。
「create-security-group」コマンドで作成します。
aws ec2 create-security-group --group-name SSHAccess --description "Security group for SSH access" --vpc-id <vpc ID> --profile <profile名>
下のように、グループIDもできました。
![](https://assets.st-note.com/img/1657415662646-qUxWquDqTz.png?width=1200)
このように、画面上も反映されています。
![](https://assets.st-note.com/img/1657415822661-1BaBqrkwyK.png?width=1200)
10 セキュリティグループにルールを設定する
では、作ったセキュリティグループの外から内へ入るルールを設定します。
今回はポート番号22のSSH接続で全て入れる設定にしていきます。
aws ec2 authorize-security-group-ingress --group-id <セキュリティグループID> --protocol tcp --port 22 --cidr 0.0.0.0/0 --profile <profile名>
なお、今回は説明用です。
実際にやる時には、全てを許可するのではなく、「0.0.0.0/0」の部分を変更して、必要最小限の許可を行なってください。
![](https://assets.st-note.com/img/1657416403381-OzdzN8p06J.png?width=1200)
下のように、インバウンドルールが追加されました。
![](https://assets.st-note.com/img/1657416411950-XmcVZ4I9dj.png?width=1200)
11 EC2を起動させよう(参考)
※インスタンスの起動自体はこの章の通りで可能ですが、パブリックIPアドレスの割り当てがうまくいきませんでした。
そのため、13章の手動によるインスタンスの起動をご参照ください。
では、「ec2 run-instances」でEC2を起動させましょう。
aws ec2 run-instances --image-id ami-0b7546e839d7ace12 --count 1 --instance-type t2.micro --key-name MyKeyPair --security-group-ids <セキュリティグループID> --subnet-id <サブネット名> --profile <profile名>
下のように、「どのAMIを使うのか」「どのインスタンスタイプにするのか」などを設定します。
![](https://assets.st-note.com/img/1657417545910-E5FluCVZ2I.png?width=1200)
長いですね。
「↓」を押して最後まで進んでいきます。
![](https://assets.st-note.com/img/1657417680252-CHZyHw1DMn.png?width=1200)
ちなみに「AMI」とはインスタンスの起動に必要なソフトウェア設定を含むテンプレートです。
今回はこちらのAMIを使用しました。
![](https://assets.st-note.com/img/1657417974943-KZdd6zwkDL.png?width=1200)
少し待っていると、次のように完了します。
![](https://assets.st-note.com/img/1657418188235-swH63oiN45.png?width=1200)
12 CLIによるパブリックIPアドレスの自動割り当てについて
公式のチュートリアルでは、ここまででパブリックIPアドレスが割り当てられていますが、現在は自動では割り当てられませんでした。
ヘルプも確認したのですが、見た限り見つかりませんでした。
![](https://assets.st-note.com/img/1657419663552-MRt7QTxSty.png?width=1200)
もしご存知の方がいらっしゃいましたら教えてください。
わかりましたら、こちらを更新いたします。
13 インスタンスの起動について(手動)
上の通り、CLIによるインスタンスの起動時にパブリックIPアドレスの割り当てがうまくいかなかったため、手動による方法をご紹介します。
「インスタンス」から「インスタンスを起動」
![](https://assets.st-note.com/img/1657424880726-CnaTPKLvLK.png?width=1200)
「名前」で任意の名前をつけます。
![](https://assets.st-note.com/img/1657424893751-r3ACqNSsn3.png?width=1200)
「インスタンスタイプ」はここでは無料枠の対象の「t2.micro」とし、キーペア名はすでに作成したキーペアを選択します。
![](https://assets.st-note.com/img/1657424906831-fPjpL5tBkd.png?width=1200)
「パブリックIPの自動割り当て」を有効にするために「編集」を選択します。
なお、ここがCLIでうまく設定できなかった部分です。
![](https://assets.st-note.com/img/1657424918517-75xMVT2JuC.png?width=1200)
「パブリックIPの自動割り当て」を「有効化」とします。
![](https://assets.st-note.com/img/1657424930230-LLpg3Nycbz.png?width=1200)
「既存のセキュリティグループを選択する」ですでに作ったセキュリティグループを選択します。
下まで進み、「インスタンスを起動」を選択します。
![](https://assets.st-note.com/img/1657425146478-34mFQ3BS7J.png?width=1200)
しばらく待つと、このようにインスタンスが実行されました。
そして、パブリックIPV4アドレスができています!
![](https://assets.st-note.com/img/1657425450209-p4QCaN63QM.png?width=1200)
14 SSH接続を行う
パブリックIPv4アドレスが取得できたので、SSH接続を行いましょう。
ssh -i "MyKeyPair.pem" ec2-user@3.113.16.233
初回は接続確認があるので「yes」を入力します。
![](https://assets.st-note.com/img/1657425785471-vI0ZR8uKPm.png?width=1200)
これでインスタンスにSSH接続ができました!
15 クリーンアップについて
料金が継続してかからないよう、不要なものは必ず削除しましょう!
15ー1 インスタンスの終了
まずはインスタンスを終了させます。
「terminate-instances」を使います。
aws ec2 terminate-instances --instance-ids <インスタンスID> --profile <プロファイル名>
このようになります。
![](https://assets.st-note.com/img/1657421877273-NyS8ra1hEE.png?width=1200)
これで依存関係が切れたため、セキュリティグループなどの削除ができるようになります。
15ー2 セキュリティグループの削除
次はセキュリティグループの削除です。
aws ec2 delete-security-group --group-id <セキュリティグループID> --profile <profile名>
問題なさそうです。
![](https://assets.st-note.com/img/1657421938286-OhTDwm8WSt.png?width=1200)
15ー3 サブネットの削除
サブネットは2つ作りましたので、2つとも削除します。
aws ec2 delete-subnet --subnet-id <サブネット名> --profile <profile名>
aws ec2 delete-subnet --subnet-id <サブネット名> --profile <profile名>
![](https://assets.st-note.com/img/1657422070548-WNYVsn7cmX.png?width=1200)
15ー4 ルートテーブルの削除
ルートテーブルも削除しましょう。
aws ec2 delete-route-table --route-table-id <ルートテーブルID> --profile <プロファイル名>
![](https://assets.st-note.com/img/1657422133723-FlkT5SoNK5.png?width=1200)
15ー5 インターネットゲートウェイの削除
15ー5ー1 インターネットゲートウェイのデタッチ
インターネットゲートウェイはVPCにアタッチされているので、まずはデタッチを行います。
aws ec2 detach-internet-gateway --internet-gateway-id <インターネットゲートウェイID> --vpc-id <vpc ID> --profile <profile名>
![](https://assets.st-note.com/img/1657422262310-8be6P1gfE1.png?width=1200)
15ー5ー2 インターネットゲートウェイの削除
デタッチができましたので、削除を行いましょう。
aws ec2 delete-internet-gateway --internet-gateway-id <インターネットゲートウェイID> --profile <profile名>
![](https://assets.st-note.com/img/1657422284718-uOlOviFLvl.png?width=1200)
15ー6 VPCの削除
最後にVPCの削除を行います。
aws ec2 delete-vpc --vpc-id <vpc ID> --profile <profile名>
これで削除ができました。
![](https://assets.st-note.com/img/1657422396515-m2J5HF4BWU.png?width=1200)
15ー7 全体の確認
念の為、削除漏れがないかを「VPCダッシュボード」から確認してみます。
大丈夫そうですね。
![](https://assets.st-note.com/img/1657422692017-RUbo2IMKx8.png?width=1200)
今回は以上です。
最後までありがとうございました!
いいなと思ったら応援しよう!
![ユウキ](https://assets.st-note.com/production/uploads/images/52347520/profile_e7d36b385c74618d7fec56da47f68a35.jpeg?width=600&crop=1:1,smart)