awsって便利だよねー。
centos7 linuxのec2が一番好き。
理由は使い慣れてるから(笑)
AWSでの環境構築に慣れてくると
どんどん自動化、IaC(インフラストラクチャー・アズ・コード)したくなるよね。
Opsworks, Cloudformation様様だね。
今回はある程度、IaCを行っている人が出会う可能性のある問題。
Opsworksを使って環境構築をする際、swapファイルを作るのだが、別のスワップファイルが存在していてそれが1GBほど使っているのだ。
Opsworksで/var/swapfileが自動生成されてしまう
メモリ状況を確認していたら、かなり逼迫していたからスワップファイルの使用状況を見てみるとあら不思議。
/var/swapfile
ってなものが1GBも使用していたとの連絡が入った。
どれどれとswapの状態を見てみると。。。
1 2 3 4 |
$ cat /proc/swaps Filename Type Size Used Priority /var/swapfile file 1034236 304144 -1 /swap file 2029468 0 -2 |
...何これ??笑
swapファイルは元々自分で設定していたのに(/swapの方)。
なぜ/var/swapfileなんてのが作られているんだ??
Opsworks Chef11.10に搭載された機能
おかしいと思って調べていたら, 出た出た。
重要
t1.micro インスタンスを更新する前に、各インスタンスに一時スワップファイル /var/swapfile があることを確認してください。Chef 0.9 スタックの t1.micro インスタンスにはスワップファイルがありません。Chef 11.4 および Chef 11.10 スタックでは、最近のバージョンのインスタンスエージェントによって、t1.micro インスタンスのスワップファイルが自動的に作成されます。ただし、この変更が導入されたのは数週間の期間であったため、2014 年 3 月 24 日頃より前に作成されたインスタンスに /var/swapfile が存在するかどうかを確認する必要があります。
スワップファイルがない t1.micro インスタンスでは、次の方法でスワップファイルを作成できます。
Chef 11.10 以降のスタックの場合、新しい t1.micro インスタンスを作成すると、スワップファイルが自動的に作成されます。
OpsworksでEc2をコントロールすると
自動的にswapfileを生成するみたい。。
自分はchef12を使っているので、自動生成の対象に成ります。
まじかよ!!
いらねぇww
自分でswapfile を作成している場合、
この機能は非常に有難くありません。笑
/var/swapfileを削除して、無効化する。
まずは、自動生成されたスワップファイルを無効化して削除します。
1 2 |
sudo swapoff /var/swapfile sudo rm /var/swapfile |
次に/etc/fstabを開いて編集しますお。
コメントアウトするよ。
1 2 3 4 5 6 7 8 |
# /etc/fstab # Created by anaconda on Mon Feb ** **:0*:** 201* # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=a*****a***0c-***-***0-c****** / xfs defaults 0 0 # /var/swapfile swap swap defaults 0 2``` # <<== この行の先頭からコメントアウトすること |
とりあえず、これでいいけど、
どうせならchefを実行する際に自動的に削除、無効果したいね。
Chefのレシピに追記する。
CookBookに何書けばいいの??
はい。
fileとbashのブロックを呼びますよ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# opsworks で自動生成される/var/swapfileを無効にし削除するよん。 bash "disable opsworks default swap settings" do code <<-EOH sudo swapoff /var/swapfile sudo rm /var/swapfile EOH end file "/etc/fstab" do _file = Chef::Util::FileEdit.new(path) _file.search_file_replace(/\/var/, "#/var") content _file.send(:editor).lines.join not_if "grep '#/var' /etc/fstab" #notifies :request_reboot, 'reboot[now]', :immediately end |
これを、該当するレシピ内に書き込めばオッケー。
簡単だね。
じゃあね〜〜〜。