EC2の用語とハンズオン

## EC2とは
Elastic Compute Cloud（EC2）とは、Amazonが提供している仮想サーバを構築するサービスです。
そもそも仮想サーバとは、1台のサーバ上に仮想上複数のサーバを運用させる仕組みです。

### 用語

#### インスタンス
EC2上で稼働する仮想サーバのこと。

#### インスタンスタイプ
インスタンスのマシンスペック。CPU・メモリのタイプを決める。
例えば、無料枠のインスタンスタイプt2.microではtがファミリー名（テスト向きか、メモリ最適化等の用途）、数字が世代番号、microはインスタンスのサイズ（CPU・メモリのスペック）。世代番号は数字が大きいほど最新。

##### インスタンスタイプの種類
t3系・・・テスト向き。CPUバーストが特徴。バーストとはCPUのパワーを使っていないとき、そのパワーを溜めることができること。

M系・・・汎用タイプ。CPU・メモリのバランスに優れている。どんなアプリケーションにも合うようなインスタンスタイプ。

C系・・・コンピューティング最適化。CPUスペックの高いインスタンスタイプ。

R系・・・メモリ最適化。パフォーマンスの高いデータベースの処理に向いている。

P系・・・高速コンピューティング最適化。GPUがついている。
参考サイト：[GPUとは](https://www.kagoya.jp/howto/rentalserver/gpu1/)

H系・・・ストレージ最適化。大容量のHDDを使用することができる。

#### AMI（Amazon Machine Image）
インスタンスの作成に必要な情報のこと。仮想サーバのOSにあたる。Amazon LinuxやwindowsなどのOSを選択できる。wordpress等のソフトウェアが搭載しているAMIも存在する。

#### キーペア
インスタンスに接続する際に、認証のために使用する秘密鍵、公開鍵のペア。秘密鍵の拡張子はpem形式。

#### EBS
AWS内で使用できるストレージ。EC2にアタッチして使用する。SSDやHDDにあたる。スナップショットが取得できる。
参考サイト：[クローンとスナップショットの違い](http://tooljp.com/windows/chigai/html/VMware/cron-snapshot-chigai.html)

#### Elastic IP
静的なIPv4アドレス。静的は変わらないという意味。

#### User data
EC2が初回起動する際、任意のスクリプトを実行するサービス。スクリプトは簡単に言えばコマンドのことを指す。再起動する際はスクリプトを実行しない。実行権限はroot権限。

#### Instance Meta Data
インスタンスの中に埋め込まれたデータ。EC2のIPアドレス、ホストネーム、AMIのID番号などが埋め込まれている。

### ハンズオン
今回はEC２にEBSをアタッチし、EC２にSSH接続後、マウントする。それをAMIに保存してバックアップをとる。そしてAMIからEC2を起動するところまでやってみる。

#### EC2作成

EC2を検索

![スクリーンショット 2021-02-02 21.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/7538882a-26ad-9d61-e53c-a98c120897d8.png)

左からインスタンスをクリック

![スクリーンショット 2021-02-02 21.51.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/81dd9889-b940-1170-9fff-3e87bb80e144.png)

インスタンスを起動をクリック

![スクリーンショット 2021-02-02 21.51.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/a066b12d-c54c-1224-e318-f2b56f9765ff.png)

ステップ１：Amazon マシンイメージ（AMI）
今回はAmazon Linux2 AMIを選択

![スクリーンショット 2021-02-02 21.55.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/896c74fa-2a8b-1104-4367-7bfa338b3c2c.png)

ステップ２：インスタンスタイプの選択
今回は無料利用枠のt2.microを選択

![スクリーンショット 2021-02-02 21.56.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/d10ca863-c72b-81bb-c3f6-67584a050969.png)

ステップ３：インスタンスの詳細の設定
ネットワークをデフォルトVPC、サブネットをap-northeast-1a、自動割り当てパブリックIPを有効にする。

![スクリーンショット 2021-02-02 22.01.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/c9889878-811b-48e4-3bb5-08a39d4d6d3e.png)

下にスクロールするとユーザーデータの欄が存在する。
ラジオボタンに「テキストで」を選択
下記のコマンドを記載する。
「yum -y install httpd」はApacheのインストール。-yで自動的にyesを選択。
「systemctl start httpd.service」はApacheの起動。
「systemctl enable httpd.service」は再起動後もApacheを起動するように設定。
echo から始まる最後のコマンドはインスタンスIDを取得したものを/tmp/testに書き出しする。

参考サイト：[#!/bin/shの意味](https://qiita.com/mohira/items/566ca75d704072bcb26f)

```
#!/bin/bash
yum -y install httpd
systemctl start httpd.service
systemctl enable httpd.service
echo $(curl http://169.254.169.254/latest/meta-data/instance-id) >> /tmp/test
```

![スクリーンショット 2021-02-02 22.02.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/9d79c232-306e-1ed2-e588-0c8ff4b020b8.png)

ステップ4：ストレージの追加
今回はデフォルトのままにしておく。終了時に削除のチェックが入っているか確認する。EC2を削除するときにEBSを自動で削除する設定なので、チェックが入っていないとEC２を削除してもそのままEBSが残ってしまい、無駄な料金が発生してしまう。

![スクリーンショット 2021-02-02 22.05.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/90b3b818-ea2b-f267-c41c-d3e395766965.png)

ステップ5：タグの追加

今回はキー：Name、値：EC2-TEST-1としておく

![スクリーンショット 2021-02-02 22.07.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/005f2545-22c9-c8aa-81dc-e460785515dc.png)

ステップ6：セキュリティグループの設定
今回はSSHに加えて、HTTPを追加する。ルールの追加ボタンを押すと追加できる。

![スクリーンショット 2021-02-02 22.08.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/66bd0502-f3ac-fcd7-6b11-6313f29ab1e0.png)

ステップ7：インスタンス作成の確認

![スクリーンショット 2021-02-02 22.19.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/7e06ca4b-ed3f-6bb0-0362-f83aced7ccde.png)

今回は過去にキーペアを作成しているので、既存のキーペアを選択する。
キーペアの作成に関しては下記のリンクを参照。
[キーペアの新規作成](https://qiita.com/nisj/items/6ebdc1635c6d687b848b#%E3%82%AD%E3%83%BC%E3%83%9A%E3%82%A2%E3%81%AE%E6%96%B0%E8%A6%8F%E4%BD%9C%E6%88%90)

![スクリーンショット 2021-02-02 22.20.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/921555bb-76a1-ecd5-03be-124e97f9ca17.png)

![スクリーンショット 2021-02-02 22.20.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/f49aced1-3d0f-b9d2-8b8b-7ce401aff25f.png)

インスタンスの作成終了

![スクリーンショット 2021-02-02 22.20.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/a323d653-97cf-716d-28de-bae973c06848.png)

インスタンスの状態が「実行中」、ステータスチェックが「2/2のチェックに合格しました」となっていればインスタンス作成完了。

![スクリーンショット 2021-02-02 22.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/9a3b7730-019d-10a7-28fa-dc703684744c.png)

Macのターミナル等でEC2にSSH接続後、cat /tmp/testのコマンドを実行すると
i-08e962dc4de3bafffが表示されているか確認。
また、下記のコマンドを実行するとactive(running)になっていれば正常にユーザーデータに入力したコマンドが実行されている。

```
systemctl status httpd.service
```

![スクリーンショット 2021-02-07 13.53.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/84505404-dc73-58d9-8b13-6be9fefd9f8d.png)

ユーザーデータのログを確認したい場合、下記のコマンドを実行すると良い。

```
cat /var/log/cloud-init-output.log
```


赤線のパブリックIPをブラウザのURL欄に貼り付けて実行するとApacheのテストページが表示させる。


![スクリーンショット 2021-02-07 13.39.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/b2fb6ad8-955d-4bfe-fc75-7a5d38b5da74.png)


#### EBSの作成

左からボリュームを選択

![スクリーンショット 2021-02-02 22.36.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/b52e8007-0a4b-3568-498a-cd8a1b9a93e2.png)

ボリュームの作成をクリック

![スクリーンショット 2021-02-02 22.38.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/c5c773b1-1153-7ac0-c345-4dd24a048ac0.png)

ボリュームタイプはスループット最適化 HDD（st1）、アベイラリティーゾーンはap-northeast-1aを選択し、ボリュームの作成をクリック。

![スクリーンショット 2021-02-02 22.39.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/9902f825-3e12-1bb7-c5f8-b366d36118a8.png)

ボリュームの作成が終了

![スクリーンショット 2021-02-02 22.40.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/ccb11e97-844e-48e9-25bb-e6bed25e237e.png)

新規で作成した500GBのEBSが作成されているか確認

![スクリーンショット 2021-02-02 22.40.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/2a596b50-4d44-2791-f462-266303578aa5.png)

Nameの右端にぺンマークがでるのでクリックすると名前を追加できる。

![スクリーンショット 2021-02-02 22.41.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/73f57160-4aff-421b-09ae-8b53bf9afe14.png)

#### EBSをインスタンスにアタッチ

アクションからボリュームのアタッチを選択

![スクリーンショット 2021-02-02 22.42.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/a1ad41c8-c232-b736-7edd-dc0a1476c564.png)

インスタンスに先ほど作成したインスタンス（EC2-TEST-1）を選択

![スクリーンショット 2021-02-02 22.42.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/8a69af5c-9a32-7cfb-55a1-a09cb68d4442.png)

デバイスはデフォルトで/dev/sdfが入力されている（のちほど確認するので覚えておく）。右下のアタッチをクリック

![スクリーンショット 2021-02-02 22.43.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/1bfef064-d06a-8d24-dc56-e0648f0964e7.png)

インスタンスに作成したEBSがアタッチされているか確認

![スクリーンショット 2021-02-02 22.45.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/6826c9c8-a9e8-127e-eaca-7cb71c81b627.png)

デバイス名に/dev/sdfがあればOK。

![スクリーンショット 2021-02-02 22.46.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/910df293-7c51-a331-52fe-d40ef35089ac.png)

#### マウント手順

ここからはターミナルでコマンド操作

root権限に変更

```
sudo su -
```

/dev/sdfを確認
xvdfにリンクされているのが確認できる

```
ls -l /dev/sdf

lrwxrwxrwx 1 root root 4 Feb  7 04:36 /dev/sdf -> xvdf
```

lsblkコマンド実行

参考サイト：[lsblkコマンド](https://www.atmarkit.co.jp/ait/articles/1802/02/news021.html)

```
lsblk

NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda    202:0    0    8G  0 disk 
└─xvda1 202:1    0    8G  0 part /
xvdf    202:80   0  500G  0 disk 
```
df -hでファイルシステムの一覧が表示されるが、現状500GBのものが確認できない。

参考サイト：[dfコマンド](https://webkaru.net/linux/df-command/)

```
df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        482M     0  482M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  508K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.4G  6.7G  18% /
tmpfs            99M     0   99M   0% /run/user/1000
```

file -sでファイルの種類を表示。/dev/sdfはシンボリックリンクであることが確認できる。

参考サイト：[fileコマンド](http://linux-topics.com/command/command/014-file.htm)
参考サイト：[シンボリックリンクとは](https://kazmax.zpp.jp/linux_beginner/symbolic_link.html)

```
file -s /dev/sdf

/dev/sdf: symbolic link to `xvdf'
```

file -s /dev/xvdfで確認する。dataになっている。

```
file -s /dev/xvdf

/dev/xvdf: data
```

ファイルシステムを作成するmkfsコマンドを実行する
参考サイト：[mkfsコマンド](https://www.atmarkit.co.jp/ait/articles/1803/09/news034.html)

```
mkfs -t ext4 /dev/xvdf

mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
32768000 inodes, 131072000 blocks
6553600 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2279604224
4000 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
```


再度file -s /dev/xvdfで確認する。先ほどと表記が変更している。
こちらのUUIDはのちほど使用するのでコピーしておく。

```
file -s /dev/xvdf

/dev/xvdf: Linux rev 1.0 ext4 filesystem data, UUID=e688e4eb-ce76-4c69-b9e5-b430daa1de25 (extents) (64bit) (large files) (huge files)
```
logディレクトリを作成し、lsで確認

```
mkdir /log

ls -l /

total 16
lrwxrwxrwx   1 root root    7 Jan 26 04:14 bin -> usr/bin
dr-xr-xr-x   4 root root 4096 Jan 26 04:15 boot
drwxr-xr-x  15 root root 2860 Feb  7 04:36 dev
drwxr-xr-x  81 root root 8192 Feb  2 13:21 etc
drwxr-xr-x   3 root root   22 Feb  2 13:21 home
lrwxrwxrwx   1 root root    7 Jan 26 04:14 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Jan 26 04:14 lib64 -> usr/lib64
drwxr-xr-x   2 root root    6 Jan 26 04:14 local
drwxr-xr-x   2 root root    6 Feb  7 07:30 log ←作成した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 Jan 26 04:15 opt
dr-xr-xr-x 124 root root    0 Feb  7 04:36 proc
dr-xr-x---   3 root root  124 Feb  7 06:53 root
drwxr-xr-x  28 root root  960 Feb  7 04:36 run
lrwxrwxrwx   1 root root    8 Jan 26 04:14 sbin -> usr/sbin
drwxr-xr-x   2 root root    6 Apr  9  2019 srv
dr-xr-xr-x  13 root root    0 Feb  7 04:36 sys
drwxrwxrwt   9 root root  261 Feb  7 05:16 tmp
drwxr-xr-x  13 root root  155 Jan 26 04:14 usr
drwxr-xr-x  20 root root  280 Feb  2 13:21 var
```

mountコマンドで/dev/xvdfを作成した/logにマウントする。
マウント後、dfコマンドで確認する。
/logがマウントされている。

```
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  508K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.4G  6.7G  18% /
tmpfs            99M     0   99M   0% /run/user/1000
/dev/xvdf       493G   73M  467G   1% /log
```

#### EC2のバックアップ
/logにtestlogfile.logを作成。lsコマンドで確認。

```
touch /log/testlogfile.log

ls -l /log/testlogfile.log

-rw-r--r-- 1 root root 0 Feb  7 07:39 /log/testlogfile.log
```

EC2が再起動した際も、/dev/xvdfが/logにマウントされるように自動マウントの設定を行う。
viコマンドで/etc/fstabファイルを編集する。入力後:wqで保存して終了。
※UUIDはご自身のものに置き換えてください。

参考サイト：[viコマンド](https://prev.net-newbie.com/linux/commands/vi.html)

```
vi /etc/fstab

#
UUID=518d317e-9b1a-43aa-8b7c-850dd3510341     /           xfs    defaults,noatime  1   1
UUID=e688e4eb-ce76-4c69-b9e5-b430daa1de25     /log           ext4   defaults          1   1 ←こちらを入力                                                                                                                                                                                                          
#
```

umountでマウントを外し、df -hで確認。/logがない状態。


```
umount /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  508K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.4G  6.7G  18% /
tmpfs            99M     0   99M   0% /run/user/1000
```
rebootコマンドで再起動する。接続が切れるので再度ssh接続し、root権限にする。

```
reboot
```

dfコマンドで/dev/xvdfが自動でマウントされていることが確認できる。

```
df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        482M     0  482M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  416K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.4G  6.7G  18% /
/dev/xvdf       493G   73M  467G   1% /log
tmpfs            99M     0   99M   0% /run/user/1000
```

#### EC2のバックアップ

インスタンスをいったん停止する。インスタンスの状態からインスタンスを停止を選択。

![スクリーンショット 2021-02-07 17.26.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/e2981acc-3700-9612-860f-3779d0e4d226.png)

停止を押す

![スクリーンショット 2021-02-07 17.27.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/54a12d52-9298-87c8-7e02-f07d976d500f.png)

正常に停止しましたと表示されれば成功

![スクリーンショット 2021-02-07 17.28.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/e4cda97b-239a-00c1-ea17-9886b4f502ff.png)

次にイメージを作成する。アクションからイメージとテンプレート→イメージを作成を選択

![スクリーンショット 2021-02-07 17.34.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/a5d2b073-f3c2-bae3-cce9-65762f18741a.png)

イメージ名、イメージの説明はTESTAMIとしておく。
右下のイメージを作成をクリック

![スクリーンショット 2021-02-07 17.41.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/d568bf9b-9ac3-d73b-caee-fd3d5d07b1e5.png)

無事にイメージを作成できた。

![スクリーンショット 2021-02-07 17.45.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/5e218c06-110b-7177-8b31-9f4515952655.png)

こちらのAMIは２つのスナップショットと紐づいている状態。

![スクリーンショット 2021-02-07 17.52.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/1701ebc7-5088-280d-1b41-613e86c00451.png)

スナップショットを確認してAMIと紐づいているものが作成されているのか確認できる

![スクリーンショット 2021-02-07 17.54.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/403905e0-c0cb-a5bf-6067-a8b6f7e031dc.png)

これでバックアップは完了。

作成したAMIからEC2を作成し、/log/xvdfがあるか確認する。
インスタンスからインスタンスを起動


![スクリーンショット 2021-02-07 18.00.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/930d189c-d0eb-87cc-8edc-05c77043c4a3.png)

マイAMIから作成されたAMIがあるか確認できる。そちらを選択し、EC2を作成していく。

![スクリーンショット 2021-02-07 18.01.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621237/e23d1b97-a5ba-8aa6-b06a-d17c05cd20ca.png)

EC2作成後、新規作成したEC2のパブリックIPアドレスをコピーし、SSH接続する。
root権限にしておく。

```
df -h

Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        482M     0  482M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  416K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.4G  6.7G  18% /
/dev/xvdf       493G   73M  467G   1% /log
tmpfs            99M     0   99M   0% /run/user/1000

ls -l /log/testlogfile.log

-rw-r--r-- 1 root root 0 Feb  7 07:39 /log/testlogfile.log
```

/dev/xvdfが/logにマウントされ、/logにtestlogfile.logがあれば成功！

以上です！お疲れ様でした〜