EC2インスタンスのインスタンスストアボリュームにSWAP領域を作る話

# EC2インスタンスのインスタンスストアボリュームにSWAP領域を作る話

初投稿です。
先日とある事情で、AWSのEC2インスタンスのインスタンスストアボリュームにSWAP領域を作ったので
その手順のメモです。
抜けているところがあったら、ご容赦ください。

↓こんな感じのAmazon Linux2のEC2インスタンスを、インスタンスストアボリューム付きのインスタンスタイプでログイン。
`c5d.large`でたてているのは、インスタンスストアボリューム付きのインスタンスタイプでは一番安いからです。

```
[ec2-user@ip-***-**-**-** ~]# curl http://169.254.169.254/latest/meta-data/instance-type
c5d.large
[ec2-user@ip-***-**-**-** ~]# cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
[ec2-user@ip-***-**-**-** ~]#
```

いちいちsudoするのが面倒なので、rootにスイッチします。
スイッチ後、念のため、インスタンスストアボリューム(nvme1n1)が認識されていることを確認します。

```
[ec2-user@ip-***-**-**-** ~]$ sudo -i
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
nvme1n1       259:0    0 46.6G  0 disk
nvme0n1       259:1    0    8G  0 disk
├─nvme0n1p1   259:2    0    8G  0 part /
└─nvme0n1p128 259:3    0    1M  0 part
```

マウントされていないこと、SWAP領域がないことも念のため、確認します。

```
[root@ip-***-**-**-** ~]# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  1.8G     0  1.8G   0% /dev
tmpfs          tmpfs     1.9G     0  1.9G   0% /dev/shm
tmpfs          tmpfs     1.9G  400K  1.9G   1% /run
tmpfs          tmpfs     1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/nvme0n1p1 xfs       8.0G  1.2G  6.8G  16% /
tmpfs          tmpfs     371M     0  371M   0% /run/user/1000
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# free
              total        used        free      shared  buff/cache   available
Mem:        3793980       71192     3307076         400      415712     3482164
Swap:             0           0           0
```
インスタンスストアボリュームをSWAP領域に指定します。
（インスタンスストアボリューム全ての領域をSWAP領域にしたいので、ボリュームごとスワップ領域化します）  

```
[root@ip-***-**-**-** ~]# mkswap /dev/nvme1n1
Setting up swapspace version 1, size = 46.6 GiB (49999994880 bytes)
no label, UUID=c2ac66b7-9d67-4dc4-9dea-652b5d94a504
```
SWAP領域を有効化します。

```
[root@ip-***-**-**-** ~]# swapon /dev/nvme1n1
[root@ip-***-**-**-** ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/nvme1n1                            partition       48828120        0       -2
[root@ip-***-**-**-** ~]#
```

このままではEC2インスタンス再起動（停止→起動）時にSWAP設定が解除された状態になってしまうので
**/etc/cloud/cloud.cfg**と **/etc/fstab**を編集します。  

```
[root@ip-***-**-**-** ~]# vi /etc/cloud/cloud.cfg
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# cat /etc/cloud/cloud.cfg
(略)
mounts:
 - [ ephemeral0, swap, swap ,"defaults", "0", "0"]    ← これに修正 
# vim:syntax=yaml
[root@ip-172-31-33-88 ~]# vi /etc/fstab
[root@ip-172-31-33-88 ~]# cat /etc/fstab
#
UUID=a1e1011e-e38f-408e-878b-fed395b47ad6     /           xfs    defaults,noatime  1   1
/dev/nvme1n1  none swap sw,nobootwait,comment=cloudconfig 0 2       ← これに修正 
```

また、起動時にSWAP領域を作成・有効化するコマンドも流さなければならないので、 **/etc/rc.d/rc.local**を編集します。
  
```
[root@ip-***-**-**-** ~]# vi /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]# cat /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
mkswap /dev/nvme1n1       ← 追記
swapon /dev/nvme1n1       ← 追記 
[root@ip-***-**-**-** ~]#
```

**/etc/rc.d/rc.local**に実行権限をつけて、起動時に実行するようにします。

```
[root@ip-***-**-**-** ~]# ls -la /etc/rc.d/rc.local
-rw-r--r-- 1 root root 513 Aug 11 16:25 /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]# chmod +x /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]# ls -la /etc/rc.d/rc.local
-rwxr-xr-x 1 root root 513 Aug 11 16:25 /etc/rc.d/rc.local
[root@ip-***-**-**-** ~]#
```

↓EC2インスタンス停止→起動時に時にSWAP領域ができていることを確認します。  

```
[root@ip-***-**-**-** ~]# free
              total        used        free      shared  buff/cache   available
Mem:        3793980      106464     3522712         404      164804     3479892
Swap:      48828120           0    48828120
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]#
[root@ip-***-**-**-** ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/nvme1n1                            partition       48828120        0       -2
[root@ip-***-**-**-** ~]#
```