Edited at

AWS EC2インスタンスストアをSwap領域に活用する

More than 3 years have passed since last update.


困ったこと

SWAP領域はLinuxのメモリ管理に重要な役割を果たしています。

一方で、AWSの公式AMIではSWAP領域を用意していません。

よくある解決策はEBS(OS上領域)にSWAPファイルを作成してSWAPとして使用するというやり方です。

ただし、EBS上のIOアクセスは課金されてしまうため、気を付けないと予算をオーバーしてしまう危険性があります。


解決方法

m3などのインスタンスタイプに用意されているIOアクセスが課金されない「インスタンスストア」に注目しました。

しかし、「インスタンスストア」はインスタンス再起動時インスタンスストアのデータはすべて削除され、自動的にext3に再フォーマットされてしまいます。

これらの特性を踏まえて以下の案を考えました。


1. ボリューム追加

AWSインスタンス作成時「ストレージの追加」のステップで、インスタンスストア0/dev/sdbとしてボリューム追加します。


2. インスタンス起動後設定

/etc/fstabを以下のように修正します。


/etc/fstab

...

↓ 従来設定をコメント
# /dev/xvdb /media/ephemeral0 auto defaults,nofail,comment=cloudconfig 0 2
/dev/xvdb swap swap defaults 0 0


3. SWAP領域作成スクリプト準備

/var/lib/cloud/scripts/per-boot直下に、実行権があるmakeswap.shファイルを作成します。

makswap.sh中身は以下です。


makeswap.sh

#!/bin/bash

SWAPDEVNAME=/dev/xvdb
if [ -b $SWAPDEVNAME ]; then
/sbin/swapoff -a
/sbin/mkswap $SWAPDEVNAME > /dev/null
/sbin/swapon -a -e
fi


4. 確認作業

OS再起動後、swapon -sでSWAP領域が作成されたことを確認できます。


参考情報

インスタンスストアを利用できないAWSインスタンスタイプの場合は、こちらを参考にしてください。

http://dev.classmethod.jp/cloud/ec2linux-swap-bestpractice/