[初心者向け]Amazon Elastic Compute Cloud(EC2)インスタンスを起動し、VPCの設定からSSHで接続するまで[マネジメントコンソール編]

初心者エンジニアや、AWS初めて触るよって方、あとがSAA受けたい!って方向けにEC2インスタンスの起動とVPCの設定について解説していきます。
何でたくさんあるような記事を書くのかって?~~自分の記事数を増やすため~~やっぱり記事はたくさんあるに越したことはないじゃないですか(?)

#ちょっとした説明
[EC2(Elastic Compute Cloud)](https://aws.amazon.com/jp/ec2/)はAWSのメインサービスの1つ。
LinuxやWindows、その他にRedHatなどを実行する'仮想サーバー'です。
インスタンスという単位で管理され、インスタンスにはt2.microとかc4.largeとか複数のインスタンスタイプが用意されています。
インスタンスタイプ毎にスペックや、[料金設定](https://aws.amazon.com/jp/ec2/pricing/on-demand/)など変わってきます。また、同タイプでもリージョンによって多少前後します。
また、インスタンスにはオンデマンドインスタンスや、スポットインスタンス、リザーブドインスタンスなどがありますが、基本使うのはオンデマンドインスタンスだと思います。私がそれしか使ってないだけかもしれませんが。今回、インスタンスというと全てオンデマンドインスタンスを指すものとして読んでください。
それぞれ簡単に説明すると、

インスタンス  |説明
---|---
オンデマンドインスタンス|インスタンスが動いてる時間で料金が発生
スポットインスタンス|よくわかってない。価格が変動する。この料金で使いたい!って言った金額が、その時点での価格より上だったら使えるらしい。
リザーブドインスタンス|年間契約とか、長い期間使うことを前提に前払い、その分安い

とのこと。
EC2の主なユースケースとしては、Webサーバーやアプリケーションサーバーなど、仮想サーバーという通り'サーバー'として使われる事が多いですね。
私は基本サーバーレス開発が多いので、普段EC2を使う事自体は少ないです。
ですが、もちろんそれだけじゃ解決出来ないような状況もありますので、そのような時に使用しています。

---

**東京リージョンで作ろうとしましたが、すでに動いているモノもあり間違ったら面倒くさいので今回は適当に選んだシンガポールリージョンを使って行きます。**


#マネジメントコンソールから作る

##EC2インスタンスの作成
AWSマネジメントコンソールにログインし、[インスタンスの作成]をクリック
<img width="1911" alt="スクリーンショット 2018-08-26 21.02.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/b54654b0-b4bc-2efe-7dd5-b2381ddd8cb5.png">

AMIを選択します。今回は無料枠で作るので、Ubuntu Server 16.04LTS(ami-03221428e6676db69)を選択します。
AMIで設定するOS次第では、SSHでログインする時のユーザー名などが異なるので、今回Ubuntuで作るという事を覚えておきましょう。
<img width="2531" alt="スクリーンショット 2018-08-26 21.04.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/b57e4d87-58ec-693d-2ab0-ee921727e60d.png">


インスタンスタイプの設定です。こちらは無料枠がt2.microのみなので、そちらを選択します。
<img width="2530" alt="スクリーンショット 2018-08-26 21.09.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/dff21b99-e736-def6-9466-9f9bdd5cb578.png">
「次の手順:インスタンスの詳細の設定」

インスタンスの詳細設定です。
VPCやIAMロール、起動時に実行する設定スクリプトなどを定義できます。
インスタンス数は、いくつ同時に起動するかです、今回は1つにしておきます。
スポットインスタンスは購入しません。
VPCはせっかくですので新しく作りましょう。「新しいVPCの作成」をクリック

###VPCとサブネットの作成
先程のボタンを押すと、VPCのダッシュボードが表示されます。何も設定していないと、デフォルトVPCのみが表示されます。1リージョン毎に複数のVPCを設定できます。1つのVPCを複数リージョンにまたがって使用することは出来ませんが、ピアリングがサポートされているので、似たような事ならできます。
<img width="1650" alt="スクリーンショット 2018-08-26 21.15.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/24716612-9950-e23b-c62b-af244afbad43.png">


VPCの作成を押して、設定をしていきましょう。
名前とIPv4CIDRブロックを定義します。IPv4?CIDRブロック?って人はAWSの前にネットワークの勉強をしましょう。近い内にネットワーク基礎みたいな感じの記事も書きます。
今回は適当に、qiita-hogeVPCと、123.45.0.0/16としておきます。
<img width="703" alt="スクリーンショット 2018-08-26 21.19.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/aa82ca5e-b9bc-0d07-dbd3-6a63321a628c.png">

無事作成出来たら、サブネットを作っていきます。1つのアドレス空間を複数のネットワークに分割できる機能です。
左ペインからサブネットを選択し、サブネットの作成をクリック。
名前とVPC、アベイラビリティゾーン、サブネットのIPv4CIDRブロックを定義します。
アベイラビリティゾーンとは、AWSでの重要な概念で、**そのリージョン内に存在する、1つ以上の独立したデータセンターの事を示します。**
東京には4つありますが、一般的に使用できるのは3つです。ただし今回私が選択しているのはシンガポールですので、東京リージョンで勧めている人とは異なったアベイラビリティゾーンになっています。
<img width="2540" alt="スクリーンショット 2018-08-26 21.37.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/33c023a0-28d1-6ca5-10d4-6aa21f2b2783.png">

---


VPCとサブネットが作成できたら、インスタンスの設定画面に戻ります。また、VPCは後々詳細設定を行います。
そして、設定を勧めていった後の画面はこうなります。
<img width="2557" alt="スクリーンショット 2018-08-26 21.40.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/2caea8f8-7002-7857-01c4-2bfde1cca095.png">
IAMロールに関しては、後から設定できるのと、EC2で何をやりたいかによって変わってくるので、後ほど。
「次の手順:ストレージの追加」

今回、ストレージは無料枠で利用できる範囲まで設定します。
<img width="1576" alt="スクリーンショット 2018-08-26 21.42.21.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/7b09b86e-509c-e1f9-25e4-c4f8340978bf.png">
「次の手順:タグの追加」

タグの追加です。わかりやすくするために、NameというキーにQiitaHogeという値をつけておきましょう。
<img width="1329" alt="スクリーンショット 2018-08-26 21.43.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/a2c920a2-dc06-e52d-432a-e2eff6c8717b.png">
「次の手順:セキュリティグループの設定」

セキュリティグループの設定です。どのタイプのどのソースからのアクセスを許可するか、というものです。
ソースを任意の場所にすると、誰でもアクセスできるようになります。Webサイトを公開したいなら、HTTPとHTTPSの2つのタイプを任意の場所として公開するようにしましょう。今回はSSHのみですので、SSHをマイIPで設定します。<img width="2531" alt="スクリーンショット 2018-08-26 21.46.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/f1f49adf-5f19-ba97-87d0-9ede7131cc46.png">

最後に確認です。
おっと、無料利用の対象枠じゃないと警告が出ていますね。何故でしょうか。
<img width="2556" alt="スクリーンショット 2018-08-26 21.49.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/8fc906d8-5f9d-fdef-dd24-488dfc5dad96.png">

答えはストレージの設定です。
ストレージ設定を編集してみましょう。
<img width="1540" alt="スクリーンショット 2018-08-26 21.49.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/741343c3-de9b-9065-ba0e-76b152caa471.png">
EBSの汎用SSDで30GBまでなら無料利用枠と書いてあるじゃないか!なぜダメなのか!
いーえよく見てください、もうすでに8GB分設定されてるでしょ?
てことでその分減らして22GBで指定しないと無料枠を超えてしまいますので、設定しなおしましょう。
今回は、削除まで含めて説明します。それに伴って、合わせて削除にもチェックを入れておきます。中に保存したデータだけは残したい場合は外しておきましょう。
<img width="1552" alt="スクリーンショット 2018-08-28 12.27.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/e11006fb-594e-0efc-69bd-2ac11cf169f6.png">

はい、これで作成が完了できます。無料枠じゃないよ！と警告が出ていない事を確認して作成します。
<img width="2541" alt="スクリーンショット 2018-08-28 12.28.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/3e266597-d040-132d-1afa-def7fc4d1cdd.png">

キーペアの設定です。これがないとSSHで接続できないので、キーペア名とキーペアをしっかり保存しておきましょう。ダウンロードすると、インスタンスを作成できます。
<img width="701" alt="スクリーンショット 2018-08-28 12.29.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/0d800a97-efd7-9ed6-0d28-1f542665b559.png">

インスタンスの状態がrunningになり、ステータスチェックが合格すると晴れてインスタンスの作成が完了しました。次はVPCの設定に移ります。
<img width="2012" alt="スクリーンショット 2018-08-28 12.35.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/7072c5a9-c881-a950-7678-8308d703734f.png">

##VPCの設定
サービスからVPCと選択し、VPCダッシュボードを開きます
<img width="1491" alt="スクリーンショット 2018-08-28 12.37.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/ea689cd5-a72a-0d49-85e2-d9db46768339.png">

定義する設定は、インターネットゲートウェイ・ルートテーブル・ElasticIPです。
まず、インターネットゲートウェイを設定していきます。
左ペインからインターネットゲートウェイを選択し、インターネットゲートウェイの作成をクリックします。初期からあるのは、デフォルトVPC用のインターネットゲートウェイです。
<img width="608" alt="スクリーンショット 2018-08-28 12.51.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/b63d8b4c-9c43-5982-9f2b-7ca9251f4eab.png">

Nameタグは自分がわかりやすいものにしておきましょう。
<img width="1285" alt="スクリーンショット 2018-08-28 12.53.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/f22906aa-58cd-f4e4-e9c0-468735b54c17.png">

作成が完了しました。
<img width="969" alt="スクリーンショット 2018-08-28 12.54.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/17c1d64a-7f2d-1329-909c-acc5ccf68346.png">

次はインターネットゲートウェイをVPCにアタッチします。アクションからVPCにアタッチを選択します。
<img width="557" alt="スクリーンショット 2018-08-28 12.55.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/83d7ec47-b358-8713-8028-627e9593e444.png">

先程つくったVPCを選択しアタッチ。
<img width="1288" alt="スクリーンショット 2018-08-28 12.55.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/07eec640-69ec-b5bf-4a0f-b91867de4be4.png">

出来たら次はルートテーブルです。左ペインから、ルートテーブルを選択し、作ったVPCに関連付けられてるルートテーブルを選択。
<img width="794" alt="スクリーンショット 2018-08-28 12.57.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/b7e2bbbe-f219-41d2-d200-c65c032a8ad3.png">

すると画面下部にメニューが出てきますので、ルートタブを選択し、編集。
以下のように項目を追加します。
<img width="673" alt="スクリーンショット 2018-08-28 12.58.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/c92c2d0b-b78b-6648-29f4-b33789982774.png">
保存して、設定は終了です。

では最後にElasticIPを設定していきます。ElasticIPとは、IPアドレスを固定する機能です。AWSでは、仮想サーバを再起動したりすると。パブリックIPとプライベートIPが変更されます。一意のIPアドレスに対して設定を行うような場合、毎回変更されると、その度に設定を変える必要があるので、ElasticIPを使うことでその設定トラブルを避けることが出来ます。
まずは、左ペインからElasticIPを選択し、新しいアドレスの割り当てをクリックします。<img width="2324" alt="スクリーンショット 2018-08-28 12.43.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/d927c491-6c89-6e19-c35d-96810466c2f4.png">

何も設定することはなく、そのまま割り当てをクリックします。
<img width="1288" alt="スクリーンショット 2018-08-28 12.44.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/d5f762a0-e8b3-397b-bbe2-b43bc8fc2906.png">

割り当てられました。
<img width="969" alt="スクリーンショット 2018-08-28 12.44.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/a3f6067f-0e00-2f33-b3fd-69da087cda00.png">

次はこのアドレスを、先程作ったインスタンスに関連付けていきます。
関連付けることで、インスタンスのIPアドレスを、上記で表示されたものに固定出来ます。
アクションから、アドレスの関連付けを選択します。
<img width="417" alt="スクリーンショット 2018-08-28 12.46.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/d5fe7955-c9a0-5da3-7a19-a269c3b0f0e8.png">

インスタンスから選択するか、ネットワークインターフェースから選択するか選びます。
今回はインスタンスを選択します。先程作ったインスタンスを選択し、プライベートIPをそのインスタンスに割り当てられてるもので選択します。プライベートIPはEC2のダッシュボードから、インスタンスをクリックすると画面下部に表示されています。
<img width="1286" alt="スクリーンショット 2018-08-28 12.47.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/3f726311-36f1-82de-4941-9ffe2d9a6cb4.png">
アドレスの解放とは、いわばそのアドレスの削除に近い意味合いで捉えても大丈夫です。いわばアドレスとサーバの関連付けをなくし、そのアドレスは自身が使用できなくなるというものです。
では関連付けしていきます。
<img width="966" alt="スクリーンショット 2018-08-28 12.59.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/6c859149-9e83-6397-1fa7-402397273ced.png">

はい、上手く関連付けられました。

ここまで書いて、一つ設定し忘れてた事を思い出したので、設定していきます。左ペインからVPCを選び、自身が作ったVPCを選択。
アクションから、DNSホスト名の編集をクリックします。
<img width="505" alt="スクリーンショット 2018-08-28 13.02.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/35482ed3-8a5c-bbdc-67a8-3934b6bd3d96.png">

DNSホスト名をはいにして保存。
<img width="454" alt="スクリーンショット 2018-08-28 13.03.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/622f9ad2-4870-24c6-921e-7d2d1ff3b5f4.png">

これで全ての設定は終わりました。ではSSHで繋いでいきます。
今回はMacを使って、ターミナルからsshコマンドで接続します。windowsの方はPuTTYとかssh clientなどを使うと思いますが、各自調べてみてください。
先程のpemファイルをダウンロードしたディレクトリへ移動し、
`chmod 400 hogeKey.pem`
とコマンドを入力します。
<img width="487" alt="スクリーンショット 2018-08-28 13.06.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/fa9cf983-2be8-d1bf-b9cc-4a4cf727aebb.png">
私は、ｚｓｈを使っているので、見た目など違う方もいると思いますが、コマンドは変わりません。
`ls -al | grep hogeKey`
で、ファイルモードが変わったことを確認したので、このkeypairを使ってsshでアクセスします。
EC2のダッシュボードへ移動し、自身で作ったインスタンスを選択。
パブリックDNSをコピーします。
<img width="1791" alt="スクリーンショット 2018-08-28 13.09.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/96fb148b-a11e-6e31-0414-dde947ff0e15.png">

そして、下記コマンドをターミナルで実行。@マーク以降の部分は、自身のDNS名にしてください。
`ssh -i hogeKey.pem ubuntu@ec2-52-76-66-111.ap-southeast-1.compute.amazonaws.com`

なにか聞かれるのでyesと答え、Enter。
<img width="963" alt="スクリーンショット 2018-08-28 13.11.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/59dcf2fe-f050-8664-9949-4e17da089671.png">
おめでとうございます。
これで自身で作ったEC2インスタンスにsshで接続出来ました。

##インスタンスの削除
今まで作ったものを綺麗さっぱり削除していきます。
まずはインスタンスを削除します。
EC2ダッシュボードからインスタンスを選択し、アクションからインスタンスの状態→削除を選択します。
<img width="566" alt="スクリーンショット 2018-08-28 13.17.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/2c415120-1f45-17f8-c402-8b0cb3559236.png">

インスタンスの削除をするかのモーダルが出てくるので、ElasticIPの解放にチェックを入れ削除します。
ElasticIPは無料で使用できると、AWSは言っていますが、それはあくまでインスタンスに関連付けられてたりするような特別な場合のみで、何もせずただ存在するだけのElasticIPには時間あたりの料金がかかります。解放せずにインスタンスを削除すると、ただ存在するだけのモノになってしまいますので、解放してあげましょう。
<img width="768" alt="スクリーンショット 2018-08-28 13.18.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/7d70183a-27b0-2b88-1d6d-c549f172ffcf.png">

削除には時間がかかるので、次はVPCの削除をします。
VPCのダッシュボードへ移動し、自身が作ったVPCを選択、アクションからVPCの削除をクリックします。
<img width="532" alt="スクリーンショット 2018-08-28 13.21.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/4f284454-b2d5-ecdf-be30-8a0b3e71c7d1.png">

今回VPNの設定はしていないので、このまま削除します。
<img width="703" alt="スクリーンショット 2018-08-28 13.21.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/85f577a6-f8bf-da98-e8b6-be30cccf4551.png">

左ペインからVPC→サブネット→ルートテーブル→インターネットゲートウェイ→ElasticIPと順に見ていき、先程作ったものが無くなっていればVPCの削除は成功です。
恐らく、この辺りでインスタンスの削除も終わってると思うので、EC2ダッシュボードへ移動します。
先程のインスタンスの状況がterminatedになっていれば成功です、完全に消えるまでもう少し時間はかかりますが、削除はこれで大丈夫です。
<img width="682" alt="スクリーンショット 2018-08-28 13.25.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/249725/cf4db3b4-8652-2def-7720-340d05a7b695.png">

左ペインからELASTIC BLOCK STOREのボリュームを選択し、なにもない。もしくは先程のインスタンスに関連付けられてるボリュームが無くなっていれば成功です。

これで他の環境にまで迷惑をかけず、イチから作成し、全て削除することが出来ました。
お疲れ様でした。

---

AWSを利用する方や、認定資格を取りに行こうとしている方は、一度はこの手順に沿って環境を作ってみる事をオススメします。
また、自身でAMIを選んでみたり、WordPressやAPIサーバ、バックエンドの処理を行うサーバなど、実際に使うモノをなにか一つ建ててみるのも良いでしょう。
ちなみに、インスタンス作成時にデフォルトVPCを選択すると、インスタンスを作るだけですぐにSSHで接続できるようになります。今回はVPCの作成まで含めてやりたかったので回りくどくなってしまいました。
次回はAWS CLIを使ったインスタンスの作成方法についてやっていきます。