Google Cloud Platform (GCP) のIaaSである Google Compute Engine (GCE) を、Webサイト用のWebサーバとして利用しようとした場合、可能な限り費用を抑えるには無料で利用できるインスタンスの利用が望ましい。
しかし、無料で利用可能なGCEはスペックが大きくないため利用する際にはメモリに関して少し工夫が必要となる。
そこで、本ナレッジではGCE無料枠インスタンスをWebサーバとして利用する方法を説明する。
GCEの無料枠条件と構築方法 & Webサーバ準備
GCEのマシンタイプは構築したいシステムを踏まえ、基本はスペックと価格を鑑みて選択する。
一方で、GCEをまずは試してみたい場合や、スペックを求めない使い方をする場合は、無料で利用できるGCEも存在する。
一般的なWebサイト用途のWebサーバであれば、そこまでアクセスが多くない場合、メモリに関して少し工夫するだけであまりスペックの高くない無料で利用できるGCEでも十分に開発・運用が可能である。
本ナレッジではメモリに関する工夫を中心に説明する。GCEの無料枠条件および無料インスタンスの構築方法について以下ナレッジを参照。
また、WebサイトおよびWebサーバの作り方については以下ナレッジを参照。
低メモリGCEをWebサーバとして利用する方法 (Linuxでの仮想メモリ設定方法)
無料で利用可能なGCEである “e2-micro” のスペックはあまり高くなく、特にメモリは1GBである。
本インスタンスはWebサイト用のWebサーバとして、そこまでアクセスが多くない場合使うことが出来る。しかし、Webサイト用途で使用すると長時間連続稼働することになるが、その場合、メモリ不足でエラーとなってしまい、Webサイトが落ちてしまうことがある。そこで、Swap領域による仮想メモリを設定することによりメモリが枯渇をした際でも、ディスク上の仮想メモリを利用することである程度の負荷までWebサイトを維持させることができる。その方法について説明する。
※ 本ナレッジではWebサーバをUbuntuやCentOSといったLinuxにて構築している前提の手順となる。
- GCPのコンソールのSSH機能により、GCEインスタンスのOSにログインする。
- 現在のメモリ使用量を確認すると共に、仮想メモリが存在しないこと確認する。
- Mem: 行の値がメモリに関する情報である。
- totalの値がメモリ量である。以下の例では メモリが0.6GBの f1-micro の例を示しており “574” となっているが、e2-micro ではメモリが1GBであるので1024に近い値となる。
- 現在すぐに利用可能な残メモリ容量はavailableの値となる。以下の例だと79となる。この値が0になり、さらにメモリを使おうとしてしまうとエラーになってしまう。
- Swap: 行の値が仮想メモリに関する情報である。全て0で、現在仮想メモリが存在しないことを確認する。
- Mem: 行の値がメモリに関する情報である。
$ free -m
total used free shared buff/cache available
Mem: 574 402 42 3 129 79
Swap: 0 0 0
- ディスクにスワップ領域を割り当て、仮想メモリを用意する。仮想メモリを用意すると上記のメモリを使い切った時、メモリに書き込む代わりにディスク上のスワップ領域を仮想のメモリとして利用する。これで、エラーが発生せずサーバを継続して利用することが可能となる。
- 1つ目のコマンドで、中身が0で埋め尽くされた2048Mbyteのswapfileという名前のファイルを /配下に作成。
- 以下の例では、ディスク領域の中の2GBを仮想メモリとして使うよう設定しているが、状況に応じてコマンド中の “count=2048” の値を変更し、仮想メモリとして確保する容量を変更する。
- 2つ目のコマンドで、/swapfileのアクセス権を適切に設定。
- 3つ目のコマンドで、/swapfile をスワップ領域として扱えるファイルに変換。
- 4つ目のコマンドで、/swapfile をスワップ領域として設定。これにより仮想メモリとして利用可能となる。
- 1つ目のコマンドで、中身が0で埋め尽くされた2048Mbyteのswapfileという名前のファイルを /配下に作成。
$ sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
2048+0 records in
2048+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 56.5869 s, 38.0 MB/s
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
- 再度、メモリの状態を確認する。
- Swap: 行の値を見ると、totalが2GBである2048に近い値となっており、仮想メモリが用意されたことを確認できる。
$ free -m
total used free shared buff/cache available
Mem: 574 397 43 3 134 83
Swap: 2047 0 2047
- 以上で仮想メモリは利用出来るようになったが本設定はサーバを再起動すると元に戻ってしまう。そのため再起動後もこの仮想メモリが利用出来る状態を継続出来るよう設定する。
- OS起動時のマウントするファイルシステムの情報を記述するファイルである “/etc/fstab” に、/swapfile をスワップ領域として使う旨を記載する。“/etc/fstab” は非常に重要なファイルのため、ミスなく操作する必要がある。
- 1つ目のコマンドで“/etc/fstab”のバックアップを“/etc/fstab.bak” として保存。
- 操作を間違った際、このバックアップファイルを利用して“/etc/fstab”を元に戻す。
- 2つ目のコマンドで“/etc/fstab” に/swapfile をスワップ領域として使う旨を記載。コマンドではテキストエディタとしてviを利用しているが、emacsなど他のテキストエディタでも問題ない。
- 3つ目のコマンドで/etc/fstabの記載内容を念のため確認。
- 1つ目のコマンドで“/etc/fstab”のバックアップを“/etc/fstab.bak” として保存。
- OS起動時のマウントするファイルシステムの情報を記述するファイルである “/etc/fstab” に、/swapfile をスワップ領域として使う旨を記載する。“/etc/fstab” は非常に重要なファイルのため、ミスなく操作する必要がある。
$ sudo cp -p /etc/fstab /etc/fstab.bak
$ sudo vi /etc/fstab
※ファイルの最終行に以下記載を追記
/swapfile swap swap defaults 0 0
$ cat /etc/fstab
※基本は前コマンドで追記したものが記載されていることを確認
※最終行の追記した行以外の行のは状況に応じて以下の例とは違う可能性がある。
LABEL=cloudimg-rootfs / ext4 defaults 0 0
LABEL=UEFI /boot/efi vfat defaults 0 0
/swapfile swap swap defaults 0 0
以上の対応で、メモリが大きくない無料のGCEでもメモリ枯渇が起こりにくくなる。
そのため、GCE無料枠インスタンスでもWebサーバとして使うことが可能となる。