初めてEC2を触ってみたので手順をまとめた

# はじめに

EC2を初めて触ってみたので、簡単に手順をまとめてみました。

## システム構成

非常にシンプルです。冗長化もしてません。

![system.png](https://qiita-image-store.s3.amazonaws.com/0/203323/58addb81-facc-5448-9d71-602eea128ba4.png)

## ゴール

* EC2インスタンスを起動する
* Apatchをインストールする
* ブラウザでTest Pageが見れる

# ユーザ環境

* Windows 10

# AWS環境の構築

## VPC(Virtual Private Cloud)

AWS（クラウド）にプライベートな空間を作成します。このVPC内にサブネットワークを任意で作成することができ、EC2はこのサブネットワーク内で使用することができます。

### VPCの作成

VPCのサービス画面を開き、「VPCの作成」を選択します。

![vpc01.png](https://qiita-image-store.s3.amazonaws.com/0/203323/ccdd6cbf-4c32-02c3-bdb9-0e1ee2f6fa16.png)

「1個のpublicサブネットを持つVPC」を選択します。これを選択することで、必要なルートテーブルやインターネットゲートウェイの作成を自動で行ってくれるようです。便利！！

![vpc02.png](https://qiita-image-store.s3.amazonaws.com/0/203323/37e46865-a2d3-1211-e1bd-389f7dc2c8a4.png)

ほぼデフォルトのママですが、いろいろと設定を行い、「VPCの作成」を選択します。

|項目名|設定値|
|:---|:--|
|IPv4 CIDRブロック|10.0.0.0/16|
|IPv6 CIDRブロック|なし|
|VPC名|aws-vpc-test（任意）|
|パブリックサブネットのIPv4 CIDR|10.0.0.0/24|
|アベイラビリティゾーン|ap-northeast-1a|
|サブネット名|subnet-1a（任意）|
|DNSホスト名を有効化|はい|
|ハードウェアのテナンシー|デフォルト|

![vpc03.png](https://qiita-image-store.s3.amazonaws.com/0/203323/2fd52b95-17b6-84c7-8082-0c9eb8196107.png)

できました！

![vpc04.png](https://qiita-image-store.s3.amazonaws.com/0/203323/9e59f832-74a9-ea73-58e2-a8234f71e4dc.png)

## EC2

EC2を作成する前に、必要な下準備を行います。（EC2作成時に一緒に作ることもできます）

### キーペアの作成

EC2のサービス画面を開き、左側のメニューにある「キーペア」を選択します。

![key01.png](https://qiita-image-store.s3.amazonaws.com/0/203323/8063ea45-55ed-855d-301b-c691bbb87824.png)

「キーペアの作成」を選択します。

![key02.png](https://qiita-image-store.s3.amazonaws.com/0/203323/21fa3af3-aaea-0bdc-5275-67eb1b3c14e9.png)

任意のキーペア名を入力し、「作成」を選択します。直後にpemファイルのダウンロードが行われます。後ほどssh接続する際に使用するため、忘れずに保存しましょう。

![key03.png](https://qiita-image-store.s3.amazonaws.com/0/203323/e99a0dbd-00ec-697f-74f2-011936e5a4ba.png)

これでキーペアの作成は完了です。

![key04.png](https://qiita-image-store.s3.amazonaws.com/0/203323/a83294cc-75a2-a638-71ae-dacf19ba967b.png)

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

左側のメニューにある「セキュリティグループ」を選択します。

![security01.png](https://qiita-image-store.s3.amazonaws.com/0/203323/2cab961a-b5fa-9bfe-d76c-23def8fbdbd0.png)

「セキュリティグループの作成」を選択します。

![security02.png](https://qiita-image-store.s3.amazonaws.com/0/203323/01bb5a13-3a37-f940-cbe2-4b2cd4ed3647.png)

設定を行い、「作成」を選択します。

|項目名|設定値|
|:---|:--|
|セキュリティグループ名|aws-test-security-group（任意）|
|説明|aws-test-security-group（任意）|
|VPC|aws-vpc-test（先ほど作成したVPC）|

セキュリティグループ（インバウンド）は下記です。マイIPは、AWS接続時に自身が使用しているIPアドレスを意味します。

|項目名|設定値|
|:---|:--|
|タイプ|SSH|
|プロトコル|TCP|
|ポート範囲|22|
|ソース|マイIP|

![security03.png](https://qiita-image-store.s3.amazonaws.com/0/203323/66eb05e0-b202-036d-81d4-b9864f45b24a.png)

これにより、インバウンド（EC2インスタンスへのアクセス）は、SSH（マイIP）のみ許可されることになります。

### インスタンスの作成

左側のメニューにある「インスタンス」を選択し、「インスタンスの作成」を選択します。

![instanse01.png](https://qiita-image-store.s3.amazonaws.com/0/203323/e7092cf0-1ca3-f2f1-a5b1-4e7953552dfb.png)

AMIとして「Amazon Linux AMI」を選択します。

![instanse02.png](https://qiita-image-store.s3.amazonaws.com/0/203323/0714932c-711b-b6d4-8bfa-654dace61cb5.png)

インスタンスタイプは「t2.micro」を選択し、「次の手順」を選択します。AWS登録後12ヶ月は無料利用の対象です。

![instanse03.png](https://qiita-image-store.s3.amazonaws.com/0/203323/3038239b-41c1-e7f0-af00-3075e1dead81.png)

インスタンスの詳細設定を行います。基本的にデフォルトのままです。変更する部分は下記です。設定後に「次の手順」を選択します。

|項目名|設定値|
|:---|:--|
|ネットワーク|aws-vpc-test（先ほど作成したVPC）|
|サブネット|subnet-1a（VPC作成時に作成したサブネット）|
|自動割当パブリックIP|有効化|

![instanse04.png](https://qiita-image-store.s3.amazonaws.com/0/203323/8498eac3-d0cb-88a2-7747-67c44529c718.png)

ストレージの追加ですが、デフォルトのまま進みます。「次の手順」を選択します。

![instanse05.png](https://qiita-image-store.s3.amazonaws.com/0/203323/912de6e5-2b71-3acd-fc5e-b75999efa57a.png)

タグの追加ですが、必要に応じてプロジェクト名や作成者などを追加してください。ここではそのまま進みます。「次の手順」を選択します。

![instanse06.png](https://qiita-image-store.s3.amazonaws.com/0/203323/2b3a6f2e-16f9-3c44-a6ef-43c13cf75a75.png)

セキュリティグループの設定では、「既存のセキュリティグループを選択する」を選択します。

先ほど作成したセキュリティグループを選択し、「確認と作成」を選択します。

![instanse07.png](https://qiita-image-store.s3.amazonaws.com/0/203323/64c08d41-e774-613f-c85c-21a22d43b7e5.png)

最終確認を行い、「作成」を選択します。

![instanse08.png](https://qiita-image-store.s3.amazonaws.com/0/203323/ae602ce9-bf57-77f9-cd7e-7fb36a6e6e79.png)

先ほど作成したキーペアを選択し、「インスタンスの作成」を選択します。

![instanse09.png](https://qiita-image-store.s3.amazonaws.com/0/203323/fdeda35d-bb2c-c8a9-b7be-d9e0a2d5fabe.png)

「インスタンスの表示」を押して、しばらく待ちます。

![instanse10.png](https://qiita-image-store.s3.amazonaws.com/0/203323/8be0f416-ac2d-0c27-b585-26a775210e5c.png)

ステータスチェックが合格になり、状態がrunningならOKです。

![instanse11.png](https://qiita-image-store.s3.amazonaws.com/0/203323/74bb0515-8f7c-9023-cf9e-951b9341b55b.png)

# 動作確認

## EC2インスタンスにログイン

起動しているインスタンスにログインしてみます。

先ほどの画面にある「パブリックDNS」の内容をコピーします。

![login01.png](https://qiita-image-store.s3.amazonaws.com/0/203323/d5c71ccb-1c05-1b17-1cce-a1b615c97561.png)

お好みのSSHクライアントでログインします。ここではRloginを使用します。

|項目名|設定値|
|:---|:--|
|ホスト名|先ほどコピーしたパブリックDNS|
|TCPポート|ssh|
|ログインユーザ名|ec2-user|
|SSH認証鍵|キーペア作成でダウンロードしたpemファイル|

![login02.png](https://qiita-image-store.s3.amazonaws.com/0/203323/9f023171-5db9-326a-26dd-c4019b88bdd7.png)

無事にログインできました！

![login03.png](https://qiita-image-store.s3.amazonaws.com/0/203323/b4451f8a-da38-124d-1568-88364924c063.png)

## Apacheのインストール

下記コマンドでApacheのインストールと起動を行います。

```bash
$ sudo yum install httpd -y
$ sudo service httpd start
$ sudo chkconfig httpd on
```

ただし、セキュリティグループ（インバウンド）はSSHのみ許可しているため、ブラウザでパブリックDNSにアクセスできません。

次はセキュリティグループの設定を変更し、HTTPアクセスを許可します。

## セキュリティグループの設定変更

左側のメニューにある「セキュリティグループ」を選択し、作成したセキュリティグループを選択します。

![security11.png](https://qiita-image-store.s3.amazonaws.com/0/203323/f67ccdc4-b0dc-ee9a-3754-94fcf429a8c5.png)


画面下部の「インバウンド」の「編集」を選択します。

![security12.png](https://qiita-image-store.s3.amazonaws.com/0/203323/dfc84550-26ed-2195-44ef-555bce52ca01.png)


「ルールの追加」を選択し、下記のルールを追加し、「保存」を選択します。

|項目名|設定値|
|:---|:--|
|タイプ|HTTP|
|プロトコル|TCP|
|ポート範囲|80|
|ソース|任意の場所|

![security13.png](https://qiita-image-store.s3.amazonaws.com/0/203323/6e2e575b-9d06-e577-b2dc-4dbe7385ac64.png)


## アクセス確認

適当なブラウザでパブリックDNSにアクセスすると、今度はデフォルトのTest Pageが表示されます！

![test01.png](https://qiita-image-store.s3.amazonaws.com/0/203323/2095c4c3-49fd-8f6f-a413-29f7ab66a1b5.png)


# 補足

## IPアドレスについて

EC2のインスタンスに割り当てられるグローバルIPアドレスは、下記の2種類があります。

|名称|内容|
|:---|:--|
|パブリックIPアドレス|IPアドレスはインスタンスが起動・停止する度に変わる|
|Elastic IPアドレス|IPアドレスは固定されている|

* https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/using-instance-addressing.html#concepts-public-addresses
* https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html

IPアドレスが変わると不都合な場合は、Elastic IPアドレスを使用する必要があります。なお、使っていないと料金発生するので、料金形態は一度確認することをお勧めします。

* https://aws.amazon.com/jp/ec2/pricing/on-demand/

## 冗長化について

様々な冗長化パターンがありますが、今回の内容では取り扱っていません。複数のインスタンスを作成したり、複数のサブネットを作成したり、それらを紐付けるALB(Application Load Balancer)を使用したりします。

* https://aws.amazon.com/jp/cdp/cdp-dr/

# まとめ

* EC2インスタンス以外にもVPCやセキュリティグループなど設定すべきことがたくさんある
* セキュリティ（ファイアフォール的な）は下記2種類が存在するので違いを理解して使う必要がある
    * ネットワークACL
        * VPC画面で設定する
        * サブネットレベルで動作する
    * セキュリティグループ
        * VPC画面またはEC2画面で設定する
        * インスタンスレベルで動作する
* 2種類のIPアドレス（パブリックIP/Elastic IP）に注意する
* ここからが本番（インスタンス内の環境構築、冗長化、バックアップ取得、セキュリティ対応など……）