【AWS】EC2をまとめてみた

## EC2とは
AWSの仮想サーバーサービスです。

## まずサーバーとは？
業務用コンピューターです。

クライアントからのリクエストに対して、
サーバーからレスポンスを返します。

## 仮想サーバーとは？
OS＋CPU＋Memory＋SSD＋NIC(Network Interface Card)などが構成要素となっている。

これがAWSでは、
OS→AMI（Amazon Machine Image）
CPU, Memory→インスタンスタイプ（t2nano, t3microなど）
SSD→EBS(Amazon Elastic Block Store)
NIC→ENI(Elastic Network Interface)
となっています。
これらが纏まったのが、Amazon EC2です。

### AMIとは？
AMIはインスタンスの作成に必要な情報です。
EC2作成時に使用するAMIの指定が必要です。

![スクリーンショット 2021-04-30 12.29.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/316a56f8-ca09-5b7e-4e29-f0617923792c.png)

### インスタンスタイプ
無料利用枠の対象となっている`t2.micro`を例に説明します。
**t**はファミリー名です。
**2**は世代番号です。
世代番号に関しては、数字が大きいものほど新しいので、できるだけ数字が大きいものを使う方がいいです。
**micro**はインスタンスのサイズを表しています。

#### T系
主な用途は、テストです。

| インスタンス | vCPU | CPU | メモリ(GB) |
| ------------ | ---- | --- | ---------- |
| t3.nano      | 2    | 6   | 0.5        |
| t3.micro     | 2    | 12  | 1          |
| t3.small     | 2    | 24  | 2          |
| t3.medium    | 2    | 24  | 4          |
| t3.large     | 2    | 36  | 8          |
| t3.xlarge    | 4    | 96  | 16         |
| t3.2xlarge   | 8    | 192 | 32         |

#### M系
バランスの取れたCPUとバランスの取れたメモリ数のため、どんな仕様にも使えます。

| インスタンス | vCPU | メモリ(GB) |
| ------------ | ---- | ---------- |
| m5.large     | 2    | 8          |
| m5.xlarge    | 4    | 16         |
| m5.2xlarge   | 8    | 32         |
| m5.4xlarge   | 16   | 64         |
| m5.8xlarge   | 32   | 128        |
| m5.12xlarge  | 48   | 192        |
| m5.16xlarge  | 64   | 256        |
| m5.24xlarge  | 96   | 384        |

#### C系
CPUに優れたインスタンスです。
用途はWEBサーバーなどです。

| インスタンス | vCPU | メモリ(GB) |
| ------------ | ---- | ---------- |
| c5.large     | 2    | 4          |
| c5.xlarge    | 4    | 8          |
| c5.2xlarge   | 8    | 16         |
| c5.4xlarge   | 16   | 32         |
| c5.9xlarge   | 36   | 72         |
| c5.12xlarge  | 48   | 96         |
| c5.18xlarge  | 72   | 144        |
| c5.24xlarge  | 96   | 192        |

#### R系
メモリに優れたインスタンスです。
用途はビッグデータなどDBなどです。

| インスタンス | vCPU | メモリ(GB) |
| ------------ | ---- | ---------- |
| r5.large     | 2    | 16         |
| r5.xlarge    | 4    | 32         |
| r5.2xlarge   | 8    | 64         |
| r5.4xlarge   | 16   | 128        |
| r5.8xlarge   | 32   | 256        |
| r5.12xlarge  | 48   | 384        |
| r5.16xlarge  | 64   | 512        |
| r5.24xlarge  | 96   | 768        |

簡単にまとめると、
開発時にはT系を使用し、
特別な用途などがない限りはM系で十分です。

![スクリーンショット 2021-04-30 12.35.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/71a7f732-0fa7-e593-cd93-5e3cf7d8297b.png)


### EBS
外付けディスクのことを指します。
種類に応じて性能が異なってきます。
また、バックアップ（スナップショット）が取得できます。

EBSの特徴は以下の3つです。
①EC2とEBSは外部でアタッチされる
②同一のAZ内でしかEC2とEBSはアタッチできない
③1つのEBSに対して複数のEC2をアタッチできない（1EBS→1EC2、1EC2→複数のEBSはOK）

![AWS_EC2EBS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/16ea14c7-9142-fbe5-6033-ef8fa6115eb0.png)

#### 種類
| タイプ | 名前                          | 特徴                                                         |
| ------ | ----------------------------- | ------------------------------------------------------------ |
| SSD    | 汎用 SSD                      | 特別な要件がない限りこれで OK。                              |
| SSD    | プロビジョンド IOPS SSD       | 汎用 SSD よりも高スペック、特別な要件がある時はこれ。        |
| HDD    | スループット最適化 HDD（st1） | データをひたすらにためる時に使う、ビッグデータとか。         |
| HDD    | Cold HDD（sc1）               | データを保管するだけ、あんまり使わないでデータを保持する時。 |

#### スナップショット（バックアップ）
バックアップを差分のみ行ってくれる仕様です。

例えば、
1MBのファイルがあり、そのファイルに更新をしていくものとします。
①1MBの更新を行う
②2MBの更新を行う
③1MBの更新を行う

このように3回の更新を行うケースを考えてみましょう。

##### 通常のコピーの場合
1MB
①2MB+2MB（コピー①）
②4M+2MB（コピー①）+4MB(コピー②)
③５MB＋2MB(コピー①)+4MB(コピー②)+5MB(コピー③)
計16MBの容量が必要となります。

##### スナップショットの場合
1MB
①2MB+2MB（スナップショット①）
②4M+2MB（スナップショット①）+2MB(スナップショット②)
③５MB＋2MB(スナップショット①)+2MB(スナップショット②)+1MB(スナップショット③)
計10MBの容量が必要となります。
6MBの削減となりました！！

## EC2が作成されるまでの流れ
①AMI(Amazon Machine Image)の選択
②インスタンスタイプの選択
③Amazon EC2が起動→**User data**を起動
④EBSをEC２にアタッチ
⑤ENIをEC2にアタッチ（ここでセキュリティグループなども決定する）

### User data
EC2が初回起動する際に実行するスクリプトです。
実行権限はrootユーザー権限のみです。

■よく使われる内容
・パッケージのアップデート → yum update -y
・ソフトウェアのインストール → yum install httpd -y
・設定ファイルの取得

![スクリーンショット 2021-04-30 13.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/dfe5b78d-492e-6189-2a97-eb8b4d5d767c.png)

2つの形式が使える
・シェルスクリプト形式（1行目が`#!`で始まる）
・cloud-init形式（1行目が`#cloud-config`で始まる）

### Instance Meta Data
インスタンスの中に埋め込まれているデータ。
例えば、EC２のIPアドレスやホストネーム、AMIのID番号などがあります。

### キーペア
EC2へログインするために使用する秘密鍵、公開鍵のペアのことを指します。

## それでは実際にEC2を使ってみましょう！

### EBSをEC2にアタッチしてマウントしましょう
■場所
EC2>ボリューム

![スクリーンショット 2021-04-30 15.03.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/82dd7a3f-356a-ba43-4eb6-6c76f9061872.png)

![スクリーンショット 2021-04-30 15.05.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/c5c35a8e-1a7e-6db3-b962-6a7c5c50b7d1.png)

この後、
アクション＞アタッチを行う

ターミナルでアタッチされているか確認する。

```terminal:ターミナル
// root権限に移動
$ sudo su -
 
$ ls -l /dev/sdf
lrwxrwxrwx 1 root root 4 Apr 30 06:05 /dev/sdf -> xvdf

// 中を調べる
$ df -h
/dev/xvda1      8.0G  1.5G  6.6G  18% /

// ファイルを確認
$ file -s /dev/sdf
/dev/sdf: symbolic link to `xvdf'

// 中に何もない
$ file -s /dev/xvdf
/dev/xvdf: data

// ファイルを作成するコマンド
$ mkfs -t ext4 /dev/xvdf

// 中に追加された
$ file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=XXXXXXXXXXXXXXXX (extents) (64bit) (large files) (huge files)

// logフォルダを作成
$ mkdir /log

// フォルダを確認
$ ls -l /
total 16
lrwxrwxrwx   1 root root    7 Apr 24 09:37 bin -> usr/bin
dr-xr-xr-x   4 root root 4096 Apr 24 09:38 boot
drwxr-xr-x  15 root root 2860 Apr 30 06:05 dev
drwxr-xr-x  81 root root 8192 Apr 30 05:47 etc
drwxr-xr-x   3 root root   22 Apr 30 05:47 home
lrwxrwxrwx   1 root root    7 Apr 24 09:37 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Apr 24 09:37 lib64 -> usr/lib64
drwxr-xr-x   2 root root    6 Apr 24 09:37 local
drwxr-xr-x   2 root root    6 Apr 30 06:15 log
drwxr-xr-x   2 root root    6 Apr  9  2019 media
drwxr-xr-x   2 root root    6 Apr  9  2019 mnt
drwxr-xr-x   4 root root   27 Apr 24 09:38 opt
dr-xr-xr-x 108 root root    0 Apr 30 05:46 proc
dr-xr-x---   3 root root  103 Apr 30 05:47 root
drwxr-xr-x  28 root root  960 Apr 30 05:47 run
lrwxrwxrwx   1 root root    8 Apr 24 09:37 sbin -> usr/sbin
drwxr-xr-x   2 root root    6 Apr  9  2019 srv
dr-xr-xr-x  13 root root    0 Apr 30 05:46 sys
drwxrwxrwt   9 root root  261 Apr 30 05:47 tmp
drwxr-xr-x  13 root root  155 Apr 24 09:37 usr
drwxr-xr-x  20 root root  280 Apr 30 05:47 var

// マウントされているかを確認（EBSはアタッチしてマウントしてようやく使える）
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        482M     0  482M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  468K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.5G  6.6G  18% /
tmpfs            99M     0   99M   0% /run/user/1000
tmpfs            99M     0   99M   0% /run/user/0

// 上記にないのでされていない、だからマウントしましょう
$ mount /dev/xvdf /log

// マウントされているか確認しましょう
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        482M     0  482M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  468K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.5G  6.6G  18% /
tmpfs            99M     0   99M   0% /run/user/1000
tmpfs            99M     0   99M   0% /run/user/0
/dev/xvdf       123G   61M  117G   1% /log →あった
```

### EC2インスタンスが再起動した時に、EBSが自動的にマウントされるように設定する

```terminal:ターミナル
// ①ファイル作成完了
$ touch /log/testlogfile.log
$ ls -l /log/testlogfile.log
-rw-r--r-- 1 root root 0 Apr 30 06:21 /log/testlogfile.log

// ②マウントしたいファイルシステムのUUIDを取得する
$ file -s /dev/xvdf
/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=edc2cbbe-XXXX-XXXX-8883-909522484c6d (needs journal recovery) (extents) (64bit) (large files) (huge files)

// ③viで/etc/fstabにUUIDを追記する
$ vi /etc/fstab
UUID=edc2cbbe-XXXX-XXXX-8883-909522484c6d     /log        ext4   default           1   1
```

これで自動的にマウントされるようになりました。

### スナップショット
①インスタンスの停止
アクション＞インスタンスの停止

②イメージの作成
アクション＞イメージを作成

![スクリーンショット 2021-04-30 15.43.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/54f5ab64-5c35-1a0b-5c5a-eb2915b53c46.png)

③イメージの確認
ブロックデバイスが2つあることを確認できました。
008b9ff
04e3d35
![スクリーンショット 2021-04-30 15.45.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/e0cc67ff-caac-1148-ffc4-e6977b5d3752.png)

④スナップショットを確認
スナップショットが2つあることを確認できました。
008b9ff
04e3d35
![スクリーンショット 2021-04-30 15.46.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/525b26fd-1070-1a50-51f8-87a73f816b75.png)

これで完了です。

ではこのスナップショットを使ってEC2を起動してみましょう！

### スナップショットを使ったEC2の起動方法
①インスタンスを起動
マイAMI内にイメージがあります。

![スクリーンショット 2021-04-30 15.49.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/8e33c2b3-776c-cfe9-183e-d6fb25ea6333.png)

②EC2にログインする

```terminal:ターミナル
// ログイン（パブリックIP）
$ ssh -i test-keypair.pem ec2-user@(パブリックIP)

// バックアップが取れているか確認
$ sudo su -
$ df -h
/dev/xvdf       123G   61M  117G   1% /log →あった
```