Operation on AWS

実行中のEC2インスタンスのバックアップ

overview

クラウドデザインパターンでは「Snapshotパターン」と呼ばれる。 EC2インスタンスはディスクボリュームに「EBS(Elastic Block Store)」というストレージデバイスを使用しており、 EBSにはある瞬間のスナップショットとしてバックアップを作成する機能がある。作成したデータはS3に保存されるが、 特殊な形式のデータのため、直接S3から取り出すことはできない。作成したデータはEBSとして新たに作成し、 EC2インスタンスにマウントするか、AMIイメージを作成し、新たなEC2インスタンスとし起動できる。 これは次章「 同じ構成のEC2インスタンスを作成する 」にて記述する「Stampパターン」である。

EBSボリュームの作成手順

  1. 対象のストレージの確認

EC2コンソールメニューから、「ボリューム」を選択し、スナップショットを作成する対象のストレージを選択する。

../../../_images/management-console-operation-snapshot-1.png

Note

/dev/xvda はXenベースのLinuxシステムにおいて、1台目のハードディスクドライブを指す。

  1. スナップショットの作成

VolumeIDを右クリックし、「Create Snapshot」を選択する。

../../../_images/management-console-operation-snapshot-2.png

名称を入力する。

../../../_images/management-console-operation-snapshot-3.png
../../../_images/management-console-operation-snapshot-4.png
  1. EBSボリュームを作成する。

作成したスナップショットを右クリックし、「Create Volume」を選択する。

../../../_images/management-console-operation-snapshot-5.png

「ディスクの種類」、「ディスクの容量」、「アベイラビリティゾーンを選択する。」

../../../_images/management-console-operation-snapshot-6.png

Note

EBSボリュームは同一のアベイラビリティゾーンでしか利用できないため、実行するEC2インスタンスのアベイラビリティゾーンに応じて、作成するゾーンを決定する。

実行すると、ボリュームにEBSがステータスavailabilityで作成される。

../../../_images/management-console-operation-snapshot-7.png

Note

スナップショットの選択時に、右クリック「コピー」を選択すると、別のリージョンへボリュームをコピーできる。

Note

EBSスナップショットは * 差分(増分)バックアップ * 圧縮された状態で保存 * S3に3箇所複数される。 * ディスクサイズはフルサイズ表示となるが、実態は差分バックアップのため、サイズが必ずしも実際のデータサイズと一致しているわけではない。

EBSスナップショットからAMIの作成手順

スナップショットを作成したEBSがブート領域を含むのであれば(1台目のディスク)、AMIを作成できる。

  1. イメージの作成

スナップショットを右クリック「イメージの作成」を選択する。

../../../_images/management-console-operation-stamp-1.png

AMIの名称、説明、仮想マシンの種別を入力する。

../../../_images/management-console-operation-stamp-2.png

Note

T2インスタンスを使用する場合、「ハードウェアアシストの仮想化(Hardware-assisted virtualization)」を選択すること。

実行すると、AMIにイメージがステータスavailabilityで作成される。

../../../_images/management-console-operation-stamp-3.png

同じ構成のEC2インスタンスを作成する

overview

前節「 EBSスナップショットからAMIの作成手順 」にて、EBSのスナップショットからAMIイメージを作成したが、 稼働中のEC2インスタンスからAMIイメージを作成できる。AMIからEC2インスタンスを作るときは、 CPUやメモリ構成も設定でき、スペックを任意に調整できる。

実行中EC2インスタンスからAMIの作成手順

  1. AMIイメージの作成

Warning

当オペレーションを実行すると、完全なディスクの複製を作成するために、実行中のEC2インスタンスが再起動するので注意。再起動したくない場合は、再起動しないオプションにチェックを入れて実行すること。

メニュー「インスタンス」から、右クリック「イメージの作成」を選択する。

../../../_images/management-console-operation-stamp-4.png

EBSスナップショットからAMIの作成手順 」と同様、AMIの名称、説明、仮想マシンの種別を入力する。

../../../_images/management-console-operation-stamp-5.png

実行すると、AMIにイメージがステータスavailabilityで作成される。

../../../_images/management-console-operation-stamp-6.png

複製したAMIからEC2インスタンスを実行する手順

作成したAMIを使用して、EC2インスタンスを起動する。

  1. EC2インスタンスの実行

メニュー「AMI」でイメージを選択し、右クリック「作成」を行う。

../../../_images/management-console-operation-stamp-7.png

インスタンスの作成 」と同様に、EC2インスタンスを起動する。

Todo

AMIイメージの作成方法により実行可能なインスタンスタイプが制限される模様。条件を確認する。

CPUやメモリスペックを上昇させる

Todo

EC2インスタンス起動中にCPUやメモリスペックを変更する手順を記載する。

ディスク容量を増設する

overview

起動中のEC2インスタンスの容量が足りなくなった場合、以下のようなメッセージが表示される。

open /var/lib/docker/image/devicemapper/layerdb/tmp/layer-314207183/diff: no space left on device

dfコマンドでディスク残容量の確認は以下の通り可能であるが、ここでは、起動中のインスタンスのディスク増設する方法を記述する。

[centos@ip-XXX-XXX-XXX-XXX ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      8.0G  8.0G   52M 100% /
devtmpfs        7.4G     0  7.4G   0% /dev
tmpfs           7.4G     0  7.4G   0% /dev/shm
tmpfs           7.4G   17M  7.4G   1% /run
tmpfs           7.4G     0  7.4G   0% /sys/fs/cgroup
tmpfs           1.5G     0  1.5G   0% /run/user/1000

EC2ボリュームサイズの拡張

■EC2コンソールメニューからボリュームを選び、拡張したいインスタンスのボリュームを選択する。アクションメニューから、「ボリュームの変更」を選択する。

../../../_images/management-console-ec2-modify-volume-1.png

■ボリュームサイズを変更し、「変更」ボタンを押下する。

../../../_images/management-console-ec2-modify-volume-2.png
../../../_images/management-console-ec2-modify-volume-3.png

■EC2インスタンスにSSHでログインし、拡張したボリュームサイズにルートデバイスのパーティションを拡張させる。最初に、現状のディスクの状況を確認する。

# ルートデバイスのパーティションサイズを確認。
[centos@ip-XXX-XXX-XXX-XXX ~]$ lsblk
NAME                         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda                         202:0    0   50G  0 disk
└─xvda1                      202:1    0    8G  0 part /
loop0                          7:0    0  100G  0 loop
└─docker-202:1-12881694-pool 253:0    0  100G  0 dm
loop1                          7:1    0    2G  0 loop
└─docker-202:1-12881694-pool 253:0    0  100G  0 dm

# パーティションの占有状況を確認。

[centos@ip-XXX-XXX-XXX-XXX ~]$ df -TH
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     xfs       8.6G  8.6G   58M 100% /
devtmpfs       devtmpfs  8.0G     0  8.0G   0% /dev
tmpfs          tmpfs     8.0G     0  8.0G   0% /dev/shm
tmpfs          tmpfs     8.0G   18M  8.0G   1% /run
tmpfs          tmpfs     8.0G     0  8.0G   0% /sys/fs/cgroup
tmpfs          tmpfs     1.6G     0  1.6G   0% /run/user/1000

# ファイルシステムの確認。

[centos@ip-XXX-XXX-XXX-XXX ~]$ sudo file -s /dev/xvd*
/dev/xvda:  x86 boot sector; partition 1: ID=0x83, active, starthead 32, startsector 2048, 16775168 sectors, code offset 0x63
/dev/xvda1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

Warning

AWSの公式ガイド では、XFSファイルシステムのディスク拡張はxfs_growfsコマンドを使用しているが、更新が行われなかったため、fdiskコマンドを使ってパーティションの再作成を行う方法で実施する。

■ fdiskコマンドを使用して、/dev/xvdaのパーティションを作成し直し、再起動する。

[centos@ip-XXX-XXX-XXX-XXX ~]$ sudo fdisk /dev/xvda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/xvda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ae09f

Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *        2048    16777215     8387584   83  Linux

Command (m for help): d
Selected partition 1
Partition 1 is deleted

Command (m for help): n
Partition type:
p   primary (0 primary, 0 extended, 4 free)
e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-104857599, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599):
Using default value 104857599
Partition 1 of type Linux and of size 50 GiB is set

Command (m for help): p

Disk /dev/xvda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000ae09f

Device Boot      Start         End      Blocks   Id  System
/dev/xvda1            2048   104857599    52427776   83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

[centos@ip-XXX-XXX-XXX-XXX ~]$ reboot

# 再起動後、パーティションのサイズ変更を確認。
[centos@ip-XXX-XXX-XXX-XXX ~]$ df -TH
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/xvda1     xfs        54G  8.6G   46G  16% /
devtmpfs       devtmpfs  8.0G     0  8.0G   0% /dev
tmpfs          tmpfs     8.0G     0  8.0G   0% /dev/shm
tmpfs          tmpfs     8.0G   18M  8.0G   1% /run
tmpfs          tmpfs     8.0G     0  8.0G   0% /sys/fs/cgroup
tmpfs          tmpfs     1.6G     0  1.6G   0% /run/user/1000

[centos@ip-XXX-XXX-XXX-XXX ~]$ lsblk
NAME                         MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda                         202:0    0   50G  0 disk
└─xvda1                      202:1    0   50G  0 part /
loop0                          7:0    0  100G  0 loop
└─docker-202:1-12881694-pool 253:0    0  100G  0 dm
loop1                          7:1    0    2G  0 loop
└─docker-202:1-12881694-pool 253:0    0  100G  0 dm

冗長化構成のアプリケーションをアップデートする

overview

ロードバランサーを使用して冗長化構成したアプリケーションをサービス停止せずにアップデートする。 片系のアプリケーションサーバをターゲットグループから除外した後、アプリケーションをアップデートし、 再度ターゲットグループに組み込む。その後もう片系のアプリケーションサーバを同様にターゲットグループから削除し、 アップデートを行い、組み戻しを行う。


  1. APサーバのインスタンスをターゲットグループから除外

コンソールのメニュー「ターゲットグループ」にて、ターゲットタブから編集ボタンを押下する。

../../../_images/management-console-operation-app-update-1.png
  1. アップデート対象のアプリケーションインスタンスを選択し、削除ボタンを押下する。
../../../_images/management-console-operation-app-update-2.png

Note

削除したインスタンスはロードバランサーがターゲットのリクエストルーティングを即時指定するが、deregistration_delay.timeout_secondsとして設定した時間、Connection Dranining状態として、セッションが維持される。