【GCP】無期限の無料枠でLinuxサーバを構築
Contents
はじめに
Google Cloud Platform (以下GCP)で、Always Freeと呼ばれる期限を設けない無料枠があることを最近知りました。
AWSにも同じような無料枠があるのですが、なんとAWSには無い仮想マシンの無料プランがあるではないですか!(2019年8月現在)
Google Compute Engine (GCE)では、CentOSをはじめとしたLinuxがOSとして選択でき、グローバルIPが使用できます。踏み台サーバや、外部からの自宅サーバの監視など色々遊べそうなので、早速構築してみました。
前提条件
今回の作業は以下の前提で進めます。
- Googleのアカウント取得とGCPの申し込みが終わっていること
- GCP上にプロジェクトが作成されていること
- GCEに作成する仮想マシンインスタンスはf1-micro
- 仮想マシン上で動かすOSはCentOS7
事前作業
SSH認証鍵の作成
早速サーバ構築に取り掛かりたいところですが、後の作業で自宅の作業端末からSSHできるようにSSH認証鍵を作成します。
macOSやLinuxなど、OpenSSLが使える端末で下記コマンドを実行し、ホームディレクトリの配下に公開鍵と秘密鍵の2ファイルを作成します。
$ ssh-keygen -t rsa -f ~/.ssh/gcp-ssh-key -C "<ユーザ名>"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): <何も入力せずEnter>
Enter same passphrase again: <何も入力せずEnter>
Your identification has been saved in /home/user01/.ssh/gcp-ssh-key.
Your public key has been saved in /home/user01/.ssh/gcp-ssh-key.pub.
The key fingerprint is:
SHA256:m7s1CD1lmTCcKBFVzsi33C2ZQumyOFrKYngxxxxxxxx xxxx@xxxx
The key's randomart image is:
+---[RSA 2048]----+
| o+.++. |
| ...+o+ o |
| .o * = |
| * = + |
| .. o . = . |
|o+ . . + * . |
|.o* + . + o |
|+=o. . o . |
|.o=. o. |
+----[SHA256]-----+
$ ls -l ~/.ssh/
total 8
-rw-------. 1 user01 user01 1675 Aug 11 02:25 gcp-ssh-key
-rw-r--r--. 1 user01 user01 405 Aug 11 02:25 gcp-ssh-key.pub
$ cat ~/.ssh/gcp-ssh-key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9uSkP5Xk4pUJSZHphnA08nT9vnuh86g76LEJN
(略)
UonVJtHazL1RlEOipvte2qO8CWPiSFrX5ounoOXNfuO4mFmO54UoMx5wsqBp+ofN/y3Z user01
コマンド引数のユーザ名は、Googleアカウント(Gmailアドレスの@手前)を指定します。
作成されたファイルのうちgcp-ssh-key
が秘密鍵、gcp-ssh-key.pub
が公開鍵です。
公開鍵については、catコマンドなどで内容を表示し全文字列をコピーしておきます。
GCE VMインスタンスの作成
ここからは、Cloud Console(以下Webコンソール)へアクセスして、GCE VMインスタンスの作成を行います。
Webコンソール左上のナビゲーションメニューを開き、[Compute Engine]→[VMインスタンス]をクリックします。
青色の[作成]をクリックします。
[新規VMインスタンス]をクリックし、[マシンタイプ]にf1-micro
を選択します。
リージョンは、北バージニア [us-east4] を除くUSリージョンからお好みの場所を選択します。特にこだわりがなければデフォルトのus-central1 (アイオワ)でよいでしょう。
ブートディスクには、任意のOSを選択します。今回は、無料かつサーバ用途向けのCentOS 7を選択します。
ディスクサイズは、無料枠の最大値である30GBを指定します。
その後、[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー]をクリックします。
詳細メニューが表示されるので、[セキュリティ]タブをクリックします。
[SSH認証鍵]のテキストボックスに、事前作業で作成したSSH認証鍵の公開鍵の内容文字列をコピペします。
作成画面下部の[作成]をクリックします。
しばらくすると作成したインスタンスが表示されるので、[外部IP]をメモしておきます。
このIPアドレスを使用して、インターネット上から該当インスタンスにアクセスができます。
外部IPは、標準設定では一時的な扱いとなっているため、インスタンス再起動で変更されてしまう可能性があります。そのため、静的IPとして固定化するための設定を行います。
ナビゲーションメニューから、[VPCネットワーク]→[外部IPアドレス]をクリックします。
外部IPアドレスの一覧に、先ほど作成したインスタンスが使用しているIPアドレスが表示されるので、[タイプ]の箇所をクリックします。
[エフェメラル]を[静的]に変更します。
静的IPアドレスの名前を尋ねられるので、任意の名前を入力し、[予約]をクリックします。
外部IPアドレスが、静的IPアドレスとして設定されていることを確認します。
事後作業
SSHログイン
事前作業で作成したSSH認証鍵のうち秘密鍵を使用して、インスタンスに作業端末からインターネット経由でログインします。
作業端末側で下記コマンドを実行します。
$ ssh -i <秘密鍵の場所> <ユーザ名>@<VMインスタンスの外部IPアドレス>
fail2banのインストール
セキュリティ対策として、何度もSSHでログインを試みるIPアドレスを遮断してくれる機能を持つfail2banをインストールします。
$ sudo -s
# yum -y install fail2ban
設定ファイルは、下記の要領で作成します。
# vi /etc/fail2ban/jail.local
[DEFAULT]
# 不正判定された送信元IPアドレスのBAN時間
bantime = 86400
# 不正判定の単位時間
findtime = 600
# 不正判定の単位時間内に不正通信とみなすログイン再試行回数
maxretry = 5
[sshd]
enabled = true
[sshd-ddos]
enabled = true
設定完了後、サービス起動と自動起動設定を行います。
# systemctl start fail2ban
# systemctl enable fail2ban
swap領域の設定
今回作成したf1-microインスタンスはメモリが0.6GBしかないので、気を付けないとメモリ不足でシステムが停止する可能性があります。
そのため、一時的にメモリ使用率が高騰しても耐えられるようswap領域を設定します。
デフォルトでインストールされるCentOSにはswap領域用のパーティションは存在しないので、swap用のファイルを作成します。
dd
コマンドのcountの箇所がMB単位で指定できるので、必要に応じて変更します。今回は1GBで作成しています。
# dd if=/dev/zero of=/swapfile bs=1M count=1024
# chmod 600 /swapfile
作成したファイルをswap形式に変換し、swapを有効化します。
その後、free
コマンドでswap領域がマウントされているか確認します。
# mkswap /swapfile
# swapon /swapfile
# free -h
total used free shared buff/cache available
Mem: 587M 200M 42M 20M 343M 244M
Swap: 1.0G 0B 1.0G
問題なくswapファイルがマウントできていることを確認できたので、/etc/fstab
にマウント設定を追記し、OS起動時に自動的にswapが有効化されるようにします。
# cat << '__EOF__' >> /etc/fstab
/swapfile swap swap default 0 0
__EOF__
簡単ですが、以上で事後作業は終了です。
まとめ
GCPの無料枠でLinuxサーバを構築する方法を紹介しました。
f1-microはそこまでスペックが高くないものの、他のクラウドサーバの監視やバックアップを行うには十分活用できると思います。
また、dockerによるコンテナアプリケーションの検証環境にも使えるので、今後も使い倒していきたいです。