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とは
H系・・・ストレージ最適化。大容量のHDDを使用することができる。
AMI(Amazon Machine Image)
インスタンスの作成に必要な情報のこと。仮想サーバのOSにあたる。Amazon LinuxやwindowsなどのOSを選択できる。wordpress等のソフトウェアが搭載しているAMIも存在する。
キーペア
インスタンスに接続する際に、認証のために使用する秘密鍵、公開鍵のペア。秘密鍵の拡張子はpem形式。
EBS
AWS内で使用できるストレージ。EC2にアタッチして使用する。SSDやHDDにあたる。スナップショットが取得できる。
参考サイト:クローンとスナップショットの違い
Elastic IP
静的なIPv4アドレス。静的は変わらないという意味。
User data
EC2が初回起動する際、任意のスクリプトを実行するサービス。スクリプトは簡単に言えばコマンドのことを指す。再起動する際はスクリプトを実行しない。実行権限はroot権限。
Instance Meta Data
インスタンスの中に埋め込まれたデータ。EC2のIPアドレス、ホストネーム、AMIのID番号などが埋め込まれている。
ハンズオン
今回はEC2にEBSをアタッチし、EC2にSSH接続後、マウントする。それをAMIに保存してバックアップをとる。そしてAMIからEC2を起動するところまでやってみる。
EC2作成
EC2を検索
左からインスタンスをクリック
インスタンスを起動をクリック
ステップ1:Amazon マシンイメージ(AMI)
今回はAmazon Linux2 AMIを選択
ステップ2:インスタンスタイプの選択
今回は無料利用枠のt2.microを選択
ステップ3:インスタンスの詳細の設定
ネットワークをデフォルトVPC、サブネットをap-northeast-1a、自動割り当てパブリックIPを有効にする。
下にスクロールするとユーザーデータの欄が存在する。
ラジオボタンに「テキストで」を選択
下記のコマンドを記載する。
「yum -y install httpd」はApacheのインストール。-yで自動的にyesを選択。
「systemctl start httpd.service」はApacheの起動。
「systemctl enable httpd.service」は再起動後もApacheを起動するように設定。
echo から始まる最後のコマンドはインスタンスIDを取得したものを/tmp/testに書き出しする。
参考サイト:#!/bin/shの意味
#!/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
ステップ4:ストレージの追加
今回はデフォルトのままにしておく。終了時に削除のチェックが入っているか確認する。EC2を削除するときにEBSを自動で削除する設定なので、チェックが入っていないとEC2を削除してもそのままEBSが残ってしまい、無駄な料金が発生してしまう。
ステップ5:タグの追加
今回はキー:Name、値:EC2-TEST-1としておく
ステップ6:セキュリティグループの設定
今回はSSHに加えて、HTTPを追加する。ルールの追加ボタンを押すと追加できる。
ステップ7:インスタンス作成の確認
今回は過去にキーペアを作成しているので、既存のキーペアを選択する。
キーペアの作成に関しては下記のリンクを参照。
キーペアの新規作成
インスタンスの作成終了
インスタンスの状態が「実行中」、ステータスチェックが「2/2のチェックに合格しました」となっていればインスタンス作成完了。
Macのターミナル等でEC2にSSH接続後、cat /tmp/testのコマンドを実行すると
i-08e962dc4de3bafffが表示されているか確認。
また、下記のコマンドを実行するとactive(running)になっていれば正常にユーザーデータに入力したコマンドが実行されている。
systemctl status httpd.service
ユーザーデータのログを確認したい場合、下記のコマンドを実行すると良い。
cat /var/log/cloud-init-output.log
赤線のパブリックIPをブラウザのURL欄に貼り付けて実行するとApacheのテストページが表示させる。
EBSの作成
左からボリュームを選択
ボリュームの作成をクリック
ボリュームタイプはスループット最適化 HDD(st1)、アベイラリティーゾーンはap-northeast-1aを選択し、ボリュームの作成をクリック。
ボリュームの作成が終了
新規で作成した500GBのEBSが作成されているか確認
Nameの右端にぺンマークがでるのでクリックすると名前を追加できる。
EBSをインスタンスにアタッチ
アクションからボリュームのアタッチを選択
インスタンスに先ほど作成したインスタンス(EC2-TEST-1)を選択
デバイスはデフォルトで/dev/sdfが入力されている(のちほど確認するので覚えておく)。右下のアタッチをクリック
インスタンスに作成したEBSがアタッチされているか確認
デバイス名に/dev/sdfがあればOK。
マウント手順
ここからはターミナルでコマンド操作
root権限に変更
sudo su -
/dev/sdfを確認
xvdfにリンクされているのが確認できる
ls -l /dev/sdf
lrwxrwxrwx 1 root root 4 Feb 7 04:36 /dev/sdf -> xvdf
lsblkコマンド実行
参考サイト:lsblkコマンド
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コマンド
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コマンド
参考サイト:シンボリックリンクとは
file -s /dev/sdf
/dev/sdf: symbolic link to `xvdf'
file -s /dev/xvdfで確認する。dataになっている。
file -s /dev/xvdf
/dev/xvdf: data
ファイルシステムを作成するmkfsコマンドを実行する
参考サイト:mkfsコマンド
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コマンド
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のバックアップ
インスタンスをいったん停止する。インスタンスの状態からインスタンスを停止を選択。
停止を押す
正常に停止しましたと表示されれば成功
次にイメージを作成する。アクションからイメージとテンプレート→イメージを作成を選択
イメージ名、イメージの説明はTESTAMIとしておく。
右下のイメージを作成をクリック
無事にイメージを作成できた。
こちらのAMIは2つのスナップショットと紐づいている状態。
スナップショットを確認してAMIと紐づいているものが作成されているのか確認できる
これでバックアップは完了。
作成したAMIからEC2を作成し、/log/xvdfがあるか確認する。
インスタンスからインスタンスを起動
マイAMIから作成されたAMIがあるか確認できる。そちらを選択し、EC2を作成していく。
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があれば成功!
以上です!お疲れ様でした〜