Create swap with cloud-config
digitaloceanでcloud-configを使ってサーバ初期起動時にswapが有効になるようにしてみる。
cloud-configの作成
こんな感じのcloud-config.yml
を書く。fstabへの記述はansibleでやっているので端折ったが、ここまでやるならfstabの編集までcloud-configの責務にしたほうが良さそう。
#cloud-config
runcmd:
- fallocate -l 2G /swapfile
- chmod 600 /swapfile
- mkswap /swapfile
- swapon /swapfile
動作確認
実際にdropletを立てて確認する(もっと楽な方法無いかな…)。
doctl compute droplet create cloud-config-test --region sgp1 --image centos-7-0-x64 --size 512mb --user-data-file ./cloud-config.yml --wait
起動したらログインしてswap確認。(o・ω・o)
[root@cloud-config-test ~]# free -m
total used free shared buff/cache available
Mem: 489 44 204 8 240 417
Swap: 2047 0 2047
yum updateもしたかったけど...
本当はyum updateも起動時に実行したかったんだけど、起動してログイン後もyum updateが走り続けている状態になっていたのでやめた...。
[root@cloud-config-test ~]# pgrep -fl yum
1562 yum
ちなみにyum updateも実行するには以下のように書く。
#cloud-config
package_upgrade: true
runcmd:
- fallocate -l 2G /swapfile
- chmod 600 /swapfile
- mkswap /swapfile
- swapon /swapfile
cloud-configのログ
cloud-configのログは/var/log/cloud-init-output.log
と/var/log/cloud-init.log
にある。2つある意味はよくわからない...。内容はほぼ同じっぽいんだけど...。
違いとしては、/var/log/cloud-init.log
の方には以下のようなプリフィックスが行頭に付いているのみ。
Oct 13 11:46:50 digitalocean cloud-init:
/var/log/cloud-init-output.log
のほうが見やすいのでこっち見れば良いと思われる。
terraformで使うには
terraformで使う場合はこんな感じでローカルのcloud-configを指定できる。
resource "digitalocean_droplet" "main" {
...
user_data = "${file("cloud-config.yml")}"
...
}