EBSボリュームを作成し、EC2インスタンスにアタッチする

## アジェンダ
1 はじめに
2 環境説明及び、前提条件
3 事前確認
4 EBSボリュームア作成
5 EBSボリュームアタッチ
6 パーティション作成
7 ファイルシステム作成
8 デバイスマウント
9 まとめ

## 1 はじめに
こんにちは、NTTデータ先端技術の陰です。
今回は、Amazon Web Services（AWS）で新しくElastic Block Store（EBS）ボリュームを作成し、Elastic Compute Cloud（EC2）インスタンスにアタッチする方法について紹介します。

## 2 環境情報及び、前提条件
今回、作業を実施する環境情報及び、前提条件は以下の通りです。

##### 環境情報
OSイメージ：Amazon Linux 2 Kernel 5.10 AMI 2.0.20220912.1 x86_64 HVM gp2
リージョン：ap-northeast-1（アジアパシフィック (東京)）

##### 前提条件
①シェル・ターミナル・コンソールがセットアップされていること
②AWSマネジメントコンソールにアクセスでき、作業に必要な権限が付与されたIAMユーザを持っていること
③作成したEBSボリュームをアタッチするためのEC2インスタンスが作成されていること

## 3 事前確認
新しくEBSボリュームを作成し、アタッチする前に状態を確認します。

##### AWSマネジメントコンソールから確認
AWSマネジメントコンソール上部の検索窓から「EC2」を検索し選択します。その後、左ペインの「ELASTIC BLOCK STORE > ボリューム」をクリックし、移動した「ボリューム」ページからEBSボリュームが作成されてないことを確認します。
(現在作成されているボリュームは、今回アタッチ対象のEC2インスタンスのブートボリュームです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/b6f0998a-6148-6d98-a3e8-1d1b18d374de.png)
##### ターミナル・コンソールから確認
サーバ上でもEBSボリュームが作成されてないことを確認します。
(現在作成されているボリュームは、今回アタッチ対象のEC2インスタンスのブートボリュームです)
```
$ lsblk -o +SERIAL
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT SERIAL
xvda    202:0    0   8G  0 disk            
└xvda1 202:1    0   8G  0 part
```
```
$ df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  464K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.5G  20% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
tmpfs          tmpfs      97M     0   97M   0% /run/user/0
```
## 4　EBSボリューム作成 
「ELASTIC BLOCK STORE > ボリューム」をクリックし、移動した「ボリューム」ページから「ボリュームの作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/bd1b7ee3-e114-295f-2390-3d164209701e.png)
「ボリュームの作成」ページから作成したいボリュームの情報を入力し、ボリュームを作成します。
今回は以下の通り設定値を入力していますが、設定値は各環境に応じて設定を変更してください。

①ボリュームタイプ：汎用 SSD gp2
②サイズ：1GB
③アベイラビリティゾーン：ap-noutheast-1c
(アベイラビリティゾーンはアタッチする対象のEC2インスタンスと同じアベイラビリティゾーンを設定する必要がありますので、設定に注意してください)

※上記以外の項目（IPOS、スナップショットID、タグオプション）については今回デフォルトのまま設定しています。
設定が必要な場合は各環境に応じて追加で設定をしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/c517c2d2-7e31-e201-ef7a-8af98e7f2743.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/b91cdc3b-8a22-db24-b945-c26908cdfb72.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/bdc1d83a-48ac-28ea-37c1-1968046032e2.png)
「ボリューム」ページから作成したボリュームを選択し、ボリュームの状態が「使用可能」であること、そして、ボリュームにアタッチされたインスタンスがないことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/c18c576d-8eb8-040a-624f-c98b167bf1ae.png)
## 5　EBSボリュームアタッチ
「ボリューム」ページから作成したボリュームを選択します。その後「アクション > ボリュームのアタッチ」をクリックし、「ボリュームのアタッチ」ページに移動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/282bb4a2-b118-b6d7-1630-2bd17d78e96a.png)
「ボリュームのアタッチ」ページから作成したボリュームをアタッチするインスタンスを選択し、「アタッチ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/42094173-a82c-432a-6894-6ed411973770.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/a2d18684-88a0-b19a-ebd7-024992588ba2.png)
「ボリューム」ページから作成したボリュームの状態が「使用中」であること、そして、ボリュームにアタッチされたインスタンスが正しく表示されていることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821879/890919dc-697e-6ae0-03ae-ded0bfd12776.png)
ターミナル・コンソールから以下のコマンドを実行し、サーバ上にもデバイス（xvdf）が追加されていることを確認します。
```
$ lsblk -o +SERIAL
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT SERIAL
xvda    202:0    0   8G  0 disk            
└xvda1 202:1    0   8G  0 part /          
xvdf    202:80   0   1G  0 disk
```
## 6　パーティション作成 
AWSマネジメントコンソールでEBSボリュームを作成し、アタッチするだけではデバイスを使用することはできません。
サーバ上でデバイスを使用するためにはデバイスをマウントする必要があります。
まず、アタッチされたデバイスに新しいパーティションを作成します。
```
$ fdisk /dev/xvdf
Welcome to fdisk (util-linux 2.30.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xb006aecd.

Command (m for help): n

Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-2097151, default 2048): 
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): 
Created a new partition 1 of type 'Linux' and of size 1023 MiB.

Command (m for help): w

The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
```
デバイスにパーティションが作成されていることを確認します。
```
$ lsblk -o +SERIAL
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT SERIAL
xvda    202:0    0    8G  0 disk            
└xvda1 202:1    0    8G  0 part /          
xvdf    202:80   0    1G  0 disk            
└xvdf1 202:81   0 1023M  0 part
```
## 7　ファイルシステム作成 
次に以下のコマンドを実行し、作成したパーティション（xvdf1）にファイルシステムを作成します。
```
$ mkfs.xfs /dev/xvdf1
```
ファイルシステムが作成されていることを確認します。
```
$ file -s /dev/xvdf1
/dev/xvdf1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
```
## 8　デバイスマウント
最後にマウントポイントを作成し、デバイスをマウントします。
まずマウントポイントとなるディレクトリを作成します。マウントポイントはどこに作成しても構わないので、
各環境に応じて適切な場所にマウントポイントとなるディレクトリを作成してください。
```
$ mkdir /ebs_data
```
次に作成したマウントポイントにデバイスをマウントします。
```
$ mount /dev/xvdf1 /ebs_data
```
デバイスがマウントされていることを確認します。
```
$ df –Th
Filesystem     Type      Size  Used Avail Use% Mounted on
devtmpfs       devtmpfs  474M     0  474M   0% /dev
tmpfs          tmpfs     483M     0  483M   0% /dev/shm
tmpfs          tmpfs     483M  468K  483M   1% /run
tmpfs          tmpfs     483M     0  483M   0% /sys/fs/cgroup
/dev/xvda1     xfs       8.0G  1.6G  6.5G  20% /
tmpfs          tmpfs      97M     0   97M   0% /run/user/1000
tmpfs          tmpfs      97M     0   97M   0% /run/user/0
/dev/xvdf1     xfs      1020M   34M  987M   4% /ebs_data
```
これでデバイスのマウントまで完了し、作成したEBSボリュームがサーバ上で使用できるようになります。

## 9　まとめ
今回は、新しくEBSボリュームを作成し、EC2インスタンスにアタッチする方法を紹介しました。
AWSマネジメントコンソールでEBSボリュームを作成する際には、アタッチする対象のEC2インスタンスと同じアベイラビリティゾーンを選択する必要があること、そして、アタッチしたEBSボリュームをサーバ上で使用するためには作成したボリュームデバイスをサーバ上にマウントする必要があることに注意してください。