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")}"
    ...
}