『AWSハンズオン』VPCとEC2を使ってWebサーバの構築編

#はじめに
この記事はAWS初学者が書いているAWS初学者の方や未経験の方向けの記事になります。
内容や説明が間違っていた場合はコメントいただけるとありがたいです。
###投稿者のレベル
AWS CLF持ってるレベル
AWS実務経験無し
AWS使用経験(個人用+会社作成アカウント使用)：約2ヶ月
ちょっと触ったことがあるサービス：IAM、EC2、EIP、VPC、RDS、CloudWatch(もしかしたら他にも使ったような気がする．．．)
最近本格的にAWSの勉強を始めたインフラエンジニアです。
#今回の目的
AWSのサービスの中で重要度で言ったら1位2位になるレベル(投稿者個人の感想です。他にも重要なサービスがあるかもしれません)のVPCと、クラウドの良さが詰まったEC2の理解を深める事が目的となります。
また自分自身インフラエンジニアをやっていて初めて触れたAWSのサービスで、皆さんに良さを知っていただきたいというのも目的になります。
#使用するサービス
###・VPC
　Virtual Private Cloud の略です。
　VPCはAWS内にプライベートなネットワーク環境を作成することが出来ます。
　アカウント作成後はデフォルトのVPCが作成されています。
###・EC2
　Elastic Compute Cloud の略です。
　AWS上に仮想サーバを構築するサービスです。
　仮想サーバの事をEC2インスタンスと言います。
　慣れている人なら数分で仮想サーバを作成することが可能です。
#設定の流れ
###1. VPCの作成
まずVPCの作成を行っていきます。
マネジメントコンソールの左上の「サービス」をクリックします。
クリックしたら「VPC」と検索を行います。
![サービス.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/09fcf524-2f34-2211-8b2a-4549ff348971.png)
検索を行いVPCのページに移動すると以下のページが表示されると思います。
表示されましたら右上にあるアカウント名の横にある国名の部分をクリックします。
ここで[リージョン](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)の設定を行います。今回は東京を使用するので「アジアパシフィック (東京)」を選択します。
※リージョンとはAWSが管理しているデータセンターが配置されている地域の事です。
![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/ad88b4cb-33d5-cef9-6e3c-96a6d74f6246.jpeg)
表示されたら左側の欄にあるVPCをクリックします。
クリックすると以下のページが表示されます。表示されたら上の方にある「VPCの作成」をクリックします。
![vpc.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/4c334c17-e4ed-2ce6-70ac-fc76e52c3e40.jpeg)
クリックすると以下のページが表示されます。
表示されたら「名前タグ」、「IPv4 CIDR ブロック*」を入力していきます。
「名前タグ」は任意で好きな名前にしてください。自分はAWS_Webにしました。
「IPv4 CIDR ブロック*」は/16~/28までのサブネットマスクでCIDR表記で入力します。
今回「IPv4 CIDR ブロック*」は192.168.0.0/16にしました。
※VPC作成後はネットワーク範囲を変更できないのでここでは広め(/16)で作成するのが吉
「IPv6 CIDR ブロック」は使用しないので「IPv6 CIDR ブロックなし」で大丈夫です。
「テナンシー」は物理ハードウェアを占有して使えるオプションらしいですが今回は必要ないので「デフォルト」にしておきます。
設定が終わったら右下にある「作成」をクリックします。
![WS000015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/8b7e6318-a0ae-dbe6-827c-1b56f6c4bb12.jpeg)
作成が完了したら先程のページでVPCが作成されている事を確認してください。以下の画像のように1つVPCが追加されていると思います。
![vpc2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/f39db04f-c75f-57f0-7912-010bdc170be5.jpeg)
###2. サブネットの作成
次にVPCのネットワークを区切るためにサブネットの作成をします。
先程のVPC一覧ページから左側の欄にある「サブネット」をクリックします。
![vpc2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/f39db04f-c75f-57f0-7912-010bdc170be5.jpeg)
クリックすると以下のページが表示されます。
表示されたら「サブネットの作成」をクリックします。
![サブネット.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/f5785e2a-79cb-bd32-706c-b5df03ef0e0c.jpeg)
クリックすると以下のページが表示されると思います。
表示されたら「名前タグ」、「VPC*」、「アベイラビリティーゾーン」、「IPv4 CIDR ブロック*」を入力していきます。
「名前タグ」には任意の名前を付けてください。自分はAWS_Web_Pub1にしました。
「VPC*」には先程作成したVPCを選択します。
「アベイラビリティーゾーン」は現在3つ選択できると思いますがどれか好きなものを選択します。
※[アベイラビリティーゾーン](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-regions-availability-zones.html)とはリージョンの中にあるAWSが管理しているデータセンター群の事です。
　なので複数のアベイラビリティーゾーンが固まって1つのリージョンになっているという事です。
「IPv4 CIDR ブロック*」にはVPCの作成時に設定したIPv4 CIDR ブロック内でネットワークを作成します。
今回は192.168.1.0/24を設定しました。
入力が完了したら右下にある「作成」をクリックします。
![WS000018.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/37f1e488-c4b0-0973-4b15-f05f9913c8da.jpeg)
クリックしたら先程のページでサブネットが作成されていることを確認します。
![サブネット2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/24a4a804-a747-44b1-10d8-180bfc4582d8.jpeg)

###3. インターネットゲートウェイの作成
先程のサブネット一覧のページの左側の欄にある「インターネットゲートウェイ」をクリックします。
クリックすると以下のページが表示されます。
表示されたら「インターネットゲートウェイの作成」をクリックします。
![igw.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/d5daf57d-ecc4-8069-ab27-5527bf45d55f.jpeg)
クリックすると以下のページが表示されます。
表示されたら「名前タグ」を入力します。
「名前タグ」は任意のものを入力してください。自分はAWS_Web_igwにしました。
入力が完了したら一番下にスクロールしていただき、「インターネットゲートウェイの作成」をクリックします。
![WS000021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/617c786c-0683-e317-e39f-1b2e420cb824.jpeg)
クリックすると以下のページが表示されると思います。
表示されたら「アクション」をクリックします。
クリックするといくつか項目が表示されると思いますが、「VPCにアタッチ」をクリックします。
![igw2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/772a5fe6-a2de-45f0-a086-d393987a5d4e.jpeg)

クリックすると以下のページが表示されると思います。
表示されたら「VPCを選択」で作成したVPCを選択します。
選択したら「インターネットゲートウェイのアタッチ」をクリックします。
![igw4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/4b44bdc4-b331-41ed-84f7-ab4c178c5714.jpeg)
クリックしたら先程のページで「状態」欄がattachedになっていることを確認します。
###4. ルートテーブルの作成
確認出来たら左側の欄にある「ルートテーブル」をクリックします。
クリックすると以下のページが表示されると思います。
表示されたら「VPC ID」欄のところが上記で作成したVPCが表示されているサブネットを選択します。
(画像の場合だと上のものになります)
選択したら下の欄にある「ルート」をクリックします。
クリックしたら「ルートの編集」をクリックします。
![rt.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/185e591c-cb9d-e5b1-8d36-b1b52ea95734.jpeg)
クリックすると以下のページが表示されると思います。
表示されたら「ルートの追加」をクリックします。
「送信先」には0.0.0.0/0
「ターゲット」には「Internet Gateway」を選択し、先程作成したインターネットゲートウェイを選択してください。
ルートの追加が完了したら「ルートの保存」をクリックします。
ここの設定はAWS内からインターネットへ通信するための設定をしています。
![WS000001.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/f95b95c5-e11a-31d6-0e35-ec4ebf1bd234.jpeg)
クリックしたら先程のルートテーブル一覧のページで編集が保存されているか確認をします。
###5. EC2インスタンスの作成
確認が完了したら左上にある「サービス」をクリックします。
クリックしたらVPCの検索と同じように「EC2」を検索して開いてください。
開くと以下のページが表示されると思います。
表示されたら左側の欄にある「インスタンス」をクリックします。
![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/19a8ba37-3d3c-0679-a5ac-8b0d82781b55.jpeg)
クリックしたら以下のページが表示されると思います。
表示されたら「インスタンスの作成」をクリックします。
![WS000003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/9d515ceb-4504-b3d4-b95f-719929558b80.jpeg)
クリックするとAMI(Amazon machine image)を選択するページが表示されると思います。
(AMIとはOSのイメージファイルのようなものです。VMwareなどでisoファイルを選択する感じです。)
色々とOSが選択できますが、今回は無料枠の「Amazon Linux 2」を選択します。
(Amazon LinuxはAWSに管理されているLinuxです。AWSのサービスと連携するためのライブラリなどが入っています。)
![WS000004.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/45973dcf-a195-6222-8867-312c7c0e76f6.jpeg)
「選択」をクリックすると以下のページが表示されると思います。
ここではインスタンスタイプを選択します。
(インスタンスタイプとはEC2インスタンスの性能を決めるものになります。CPUやメモリなど)
今回はちょっとしたWebサーバを構築するだけなので、無料枠の「t2.micro」を使用します。
選択が完了したら「次のステップ：インスタンスの詳細の設定」をクリックします。
![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/41a0cf8f-5767-d210-f727-e0bccb3cf4fb.jpeg)
クリックすると以下のページが表示されると思います。
ここではEC2インスタンスをどこのVPCに配置するかなどの設定を行います。
ここで変更するのは「ネットワーク」、「サブネット」「自動割り当てパブリックIP」、下の方にスクロールするとある「ネットワークインターフェイス」の「プライマリIP」を変更します。
「ネットワーク」では上記で作成したVPCを選択します。
「サブネット」も作成したサブネットを選択します。
「自動割り当てパブリックIP」は有効を選択します。
「ネットワークインターフェイス」はサブネット内のIPアドレスを指定してください。自分は192.168.1.4にしました。
入力が完了したら「次のステップ：ストレージの追加」をクリックします。
![ec2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/de57b056-f55c-a1a7-4d0c-8682d039d315.jpeg)
クリックすると以下のページが表示されると思います。
ここではストレージの設定を行いますが、今回は必要が無いのでデフォルトで「次のステップ：タグの追加」をクリックします。
![ec22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/e37ed98c-0721-772d-89f8-21bbc90fe13e.jpeg)
クリックすると以下のページが表示されると思います。
ここではインスタンスにつけるタグを設定します。
「タグの追加」をクリックします。
「キー」にはName
「値」には任意の名前を付けてください。自分はAWS_Web_ec2にしました。
追加が完了したら、「次のステップ：セキュリティグループの設定」をクリックします。
![WS000008.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/2326992e-6776-d0a2-3298-b4414b6be1e1.jpeg)
クリックすると以下のページが表示されると思います。
ここではインスタンスに対するセキュリティグループ(ファイアウォール)の設定を行います。
「セキュリティグループ名」には任意の名前を入力してください。自分はAWS_Web_sgにしました。
「説明」はデフォルトで大丈夫です。
デフォルトのセキュリティグループだとSSHをどの送信元IPアドレスでも通す設定になっていますが、セキュリティを考えるなら会社のグローバルIPアドレスだけを指定したり自宅のグローバルIPアドレスを指定しましょう。
今回は自分で遊ぶだけの物なのでデフォルトでやります。
設定が完了したら「確認と作成」をクリックします。
![WS000009.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/342a962c-c3ce-8e9c-9379-076eb75e469c.jpeg)
クリックすると以下のページが表示されると思います。
ここで設定してきた内容が間違っていないか確認をして、問題が無ければ「起動」をクリックします。
![WS000010.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/05c4f06a-3c2b-9b64-f603-d1c7fe011901.jpeg)
クリックすると以下の画面が表示されると思います。
「新しいキーペアの作成」を選択して「キーペア名」を入力してください。自分はAWS_ec2_sshにしました。
入力が完了したら、「キーペアのダウンロード」をクリックします。
※ここでダウンロードしたファイルは後でダウンロードすることが出来ないので失くさないようにしましょう。
ダウンロードが完了したら「インスタンスの作成」をクリックします。
![WS000011.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/4e17b2a6-b676-a3e6-76c1-d3070f9140ad.jpeg)
クリックすると作成ステータスページが表示されます。表示されたら一番下までスクロールして「インスタンスの表示」をクリックします。
クリックするとインスタンス一覧のページが表示されます。無事作成されている事を確認しましょう。
![ec23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/9851b0b7-d50a-bb61-58c7-dfea621024b4.jpeg)
###6. EC2インスタンスにSSHしてApacheを動かす
今回はWindowsからSSHを行います。
※LinuxやMacでもSSHを行えます。
(LinuxやMacだと鍵ファイルの権限変更が必要なようです。)
まずSSHができるソフトをインストールします。自分は「Tera Term」を使用します。
インストールが出来たら開いていただいて、EC2のパブリックIPアドレスを入力します。
EC2のパブリックIPアドレスはインスタンス一覧のページでインスタンスを選択していただき、「説明」をクリックして右下くらいのところに記載されています。
入力が完了したら「OK」をクリックします。
![WS000013.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/b916239b-b921-a791-424f-8f416875a7f8.jpeg)
クリックすると以下の画面が表示されます。
表示されたら「ユーザ名」にec2-userと入力します。
今回SSHするのには秘密鍵を使用するので「RSA/DSA/ECDSA/ED25519鍵を使う」を選択して、「秘密鍵」をクリックします。
クリックしたらEC2インスタンスを作成した際にダウンロードしたファイルを選択します。
選択したら「OK」をクリックします。
![WS000014.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/550608e6-db42-d7c6-48e6-9e107e5fcfba.jpeg)
SSHに成功すると以下の画面が表示されます。
![WS000015.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/d6db9f57-c528-19d3-c8f1-725d8bafd8c4.jpeg)
SSHが成功したら以下のコマンドを実行してください。

```text:EC2インスタンス上
sudo yum update -y ///このコマンドでパッケージを最新版のものにしています。
sudo yum instal httpd -y ///このコマンドでApacheをインストールしています。
sudo systemctl start httpd ///このコマンドでApacheを起動しています。
sudo systemctl is-active httpd ///このコマンドの結果がactiveになっていれば起動しています。
sudo systemctl enable httpd ///このコマンドでEC2インスタンスを再起動してもApacheが自動で起動します。
sudo systemctl is-enabled httpd ///このコマンドの結果がenabledになっていれば自動起動します。
```
ここまで完了したらAWSマネジメントコンソールに戻ります。
###7. セキュリティグループの編集
マネジメントコンソールにログインしたら左上の「サービス」をクリックします。
クリックしたらサービスの検索で「VPC」を検索して開いてください。
開いたら左側の欄にある「セキュリティグループ」をクリックします。(少し下にスクロースするとあります。)
クリックすると以下のページが表示されると思います。
表示されたらEC2インスタンス作成時にアタッチしたセキュリティグループを選択します。
選択すると下の方に「インバウンドルール」というものがあるので選択します。
![sg.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/fe4e918e-b465-7a78-f490-333948095c79.jpeg)
選択すると以下のインバウンドルールが表示されると思います。
この設定は現在SSHの通信以外は通さない設定になっています。
なのでHTTPの通信を通すためにルールの追加を行います。
※セキュリティグループは何もルールを書いていないと全ての通信を通さない設定になっています。
「インバウンドルールを編集」をクリックします。
![sg2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/8296e2f6-19af-63cc-60b8-ca79d6f50a8a.jpeg)
クリックすると以下のページが表示されます。
表示されたら「ルールを追加」をクリックします。
クリックしたら「タイプ」にHTTPを選択します。
「ソース」は0.0.0.0/0を入力します。
入力が完了したら下にスクロールして「ルールの保存」をクリックします。
![sg3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/cbaf9a01-29c8-fb0c-f90f-305850fa0303.jpeg)
クリックしたら設定が保存されていることを確認してください。
###7. Elastic IPの設定
ここまでの設定が完了したらElastic IPの設定を行います。
この設定を行わないとEC2インスタンスを再起動するたびにパブリックIPアドレスが変わってしまいます。
なのでElastic IPアドレスを使ってIPアドレスを固定します。
まずAWSマネジメントコンソールの左上にある「サービス」をクリックします。
クリックしたらサービスの検索で「EC2」を検索して開きます。
開いたら左側の欄にある「Elastic IP」をクリックします。(少し下の方にスクロールするとあります。)
クリックすると以下のページが表示されます。
表示されたら「Elastic IPアドレスの割り当て」をクリックします。
![WS000020.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/86eec6f4-4856-df22-4dba-892cce16cafa.jpeg)
クリックすると以下のページが表示されます。
表示されたら「AmazonのIPv4アドレスプール」を選択して「割り当て」をクリックします。
![WS000021.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/5b61bee0-a7bf-b74c-b4bc-57c3a0323bdb.jpeg)
クリックすると先程のページで1つIPアドレスが増えていると思います。
新しく増えているIPアドレスを選択して「アクション」をクリックします。
クリックすると以下のページが表示されると思います。
表示されたら「インスタンス」に上記で作成したEC2インスタンスを選択します。
「プライベートIPアドレス」はEC2インスタンスに紐づいているIPアドレスを選択します。
ここまで完了したら「関連付ける」をクリックします。
![WS000022.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/ea89616a-1beb-a8ae-d74c-b11d2554ce7d.jpeg)
クリックしたらElastic IPの一覧ページで紐づいていることを確認してください。
確認が出来たらElastic IPで紐づいているグローバルIPアドレスをコピーしてブラウザにペーストします。
ここまでの作業が全て成功していればApacheのテストページが表示されます。
![WS000023.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612471/a7b4dbfe-9e9a-a18e-b1e4-02cfec746c5c.jpeg)
これでAWSでのWebサーバ構築は以上です。
###8. 片付け
ここまでのことが完了して満足した方はサービスを終了していきましょう。
まずはElastic IPを解放します。
Elastic IPはインスタンスに紐づいていなかったり停止しているインスタンスに紐づいていると料金が発生するので解放します。
Elastic IPの一覧ページを表示したら、解放したいIPアドレスを選択します。
選択したら「アクション」をクリックして「Elastic IPアドレスの関連付けの解除」をクリックします。
クリックすると注意書きが表示されますが閉じます。
閉じたらもう一度「アクション」をクリックして「Elastic IPアドレスの解放」をクリックします。
また注意書きが表示されますが閉じます。
閉じると先程まで表示されていたIPアドレスが消えています。

次にEC2インスタンスを削除します。
EC2インスタンス一覧のページを開いて消去したいインスタンスを選択します。
選択したら「アクション」をクリックして「インスタンスの状態」を選択します。
選択したら「終了」をクリックすると消すことが可能です。

次にインターネットゲートウェイを消去します。
インターネットゲートウェイの一覧ページを開いて消去したいインターネットゲートウェイを選択します。
選択したら「アクション」をクリックして「VPCからデタッチ」を選択します。
選択したら「アクション」から「インターネットゲートウェイの削除」をクリックします。
クリックしたらインターネットゲートウェイが消えていることを確認してください。

次にサブネットの消去をします。
サブネット一覧ページを表示して、消去したいサブネットを選択します。
選択したら「アクション」から「サブネットの削除」をクリックして削除します。
クリックしたらサブネットが消えていることを確認してください。

次にVPCの消去をします。
VPC一覧のページを表示して、消去したいVPCを選択します。
選択したら「アクション」から「VPCの削除」をクリックします。
クリックしてVPCが消えてることを確認してください。
#感想
今回の記事でAWSの操作感や、AWSが使えるようになるまでの速さが何となく伝わっていると良いかなと思います。
AWSのマネジメントコンソールのGUIは結構変わったりするので自分で操作をして復習がてら記事が書けたのは良かったかと思います。
Webサーバだけを今回構築しましたが、RDSというサービスを使えばデータベースサーバの構築もできるのでここら辺を極めていくとWebアプリなんかも作れるのかと思います。~~投稿者にはプログラミング知識ゼロなので何となくで書いています。