6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS Elastic Beanstalk に swap 設定(永続化も忘れずに)

Posted at

AWS Elastic Beanstalk のウェブコンソールではメモリ容量はインスタンスタイプ設定でできるものの swap 設定はできません。
なので、ebextension に書くことで設定します。

swapを設定するところまではネットに転がっていたのですが、永続化まで考慮に入れている記事がなかったのでこの記事を書きました。
swaponコマンドで実行したものは再起動すると設定が巻き戻ってしまうので、fstabファイルに設定を書いておきます。

書き方

アプリケーションのトップディレクトリに.ebextensionsディレクトリを作成し、その中に swap.config とでも名前をつけて以下の内容を配置します。

.ebextensions/swap.config
commands:
  000_create_file:
    test: test ! -e /swapfile
    command: dd if=/dev/zero of=/swapfile bs=1M count=1024 && chmod 600 /swapfile
  001_mkswap:
    command: mkswap /swapfile
    ignoreErrors: true
  002_swapon:
    command: swapon /swapfile
    ignoreErrors: true
  003_fstab:
    test: test `grep -c swap /etc/fstab` -eq 0
    command: echo "/swapfile  swap   swap    defaults   0 0" >> /etc/fstab

ステップ順に軽い解説をしておきます

  • 000_create_file
    • /swapfile という名前の0埋めされたファイルを作ります
    • swapはメモリの拡張のためにファイルを使う方式なので、ストレージサイズがタイトな場合には予め増量しておいた方が良いと思います。筆者の環境ではサーバに8G、使用中4G程度あったので、2Gのスワップを割り当てると残りがかなりタイトになってしまう状態でした
    • test ! -e /swapfile はファイルがなかったら作るためのshellコマンドです
  • 001_mkswap
    • ファイルを元にswap領域を作成します
    • ignoreErrors しないとすでに転換が済んでいる場合にエラーが出るので入っています
  • 002_swapon
    • スワップ領域を使用します
  • 003_fstab
    • 以下に記述

fstabに記述がすでにある場合には次のデプロイで書き込む必要がないので、存在チェックをしています。

test `grep -c swap /etc/fstab` -eq 0

grep -c swap /etc/fstabがfstabファイルに存在するswapと書かれている行数で、-eq 0はそれが0行であることをチェックしています

fstab の中身は最終的に以下のようになります。

[ec2-user@ip-172-31-26-7 ~]$ cat /etc/fstab
#
LABEL=/     /           ext4    defaults,noatime  1   1
tmpfs       /dev/shm    tmpfs   defaults        0   0
devpts      /dev/pts    devpts  gid=5,mode=620  0   0
sysfs       /sys        sysfs   defaults        0   0
proc        /proc       proc    defaults        0   0
/swapfile  swap   swap    defaults   0 0

おまけ

ebextension はデプロイしないといけないので動作確認の負荷が高いです。
test コマンドの実行などは手元環境で試した方が楽です。

こちらのebextensionの内容の確認をしたいケース。

  003_fstab:
    test: test `grep -c swap /etc/fstab` -eq 0
    command: echo "/swapfile  swap   swap    defaults   0 0" >> /etc/fstab

以下のようにシェルのワンライナーでだいたい確認することができます。

if test `grep -c swap /etc/fstab` -eq 0 ; then echo "/swapfile  swap   swap    defaults   0 0" >> /etc/fstab; fi
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?