はじめに
こちらでAWSでスケーラブルな仮想サーバー構築を行うという記事を書いたのですが、そのGC編です。ちなみにこの記事では、GCとはGoogle Cloud(2020年10月にGCP→GCに名称が変わった)のことを指しています。この記事の表記ではGCで統一してみようと思います。
対象
AWSの記事と同じです。
前提
AWSの記事と同じです。GCでもコンソールの操作メインで書いてみます。
構成図
AWSの記事と同じような感じになりますが、GCの場合、インスタンスをInstance Groupとしてまとめることで、ロードバランサの負荷分散とオートスケーリングの設定の両方ができます。
方法
キャプチャやサービスの名称は2021年9月現在の情報です。
ネットワーク構築
VPC/サブネット切り分け、およびファイアウォールの設定を行います。
VPC
GCにログイン後、左メニュー「VPC ネットワーク」> 「VPC ネットワーク」を選択し、ページ上部の「VPC ネットワークを作成」をクリックします。今回名称と説明を以下のように指定しました。
名前 | 説明 |
---|---|
auto-scaling-test-vpc | for AutoScalingTest |
「サブネット作成モード」では「カスタム」を選択し、1つのサブネットを作成します。以下のような値にしました。
名前 | リージョン | IPアドレス範囲 |
---|---|---|
auto-scaling-test-public-subnet1 | asia-northeast1 | 10.0.1.0/24 |
インスタンス
仮想サーバーのインスタンスを作成していきます。
インスタンスグループ作成
左メニュー「Compute Engine」> 「インスタンスグループ」に進み、「インスタンスグループを作成」をクリックします。作成画面に遷移するので、「新しいマネージドインスタンスグループ」を選び、項目を入力します。前半部分は以下のようにしました。
名前 | ロケーション | リージョン |
---|---|---|
auto-scaling-test-mig | 複数のゾーン | asia-northeast1 |
その後、「ポート名のマッピングを指定する」をクリックし、以下の値を設定します。
ポート名 | ポート番号 |
---|---|
http | 80 |
「インスタンステンプレート」では「新しいインスタンステンプレートを作成」をクリックし、テンプレート作成画面に遷移します。今回は以下のように項目を入力しました。OSはデフォルト(Debian)のままにしています。
名前 | マシンタイプ |
---|---|
auto-scaling-test-template | e2-micro |
その後、「管理、セキュリティ、ディスク、ネットワーキング、単一テナンシー」をクリックし、「管理」タブを開いて 「自動化」の「起動スクリプト」に以下を入力します。インスタンス起動時に、自動でApacheを起動する設定です。
#!/bin/bash
apt update
apt install -y apache2
chown -R $USER:$USER /var/www
echo Hello,AutoScalingTest > /var/www/html/index.html
その後「ネットワーキングタブ」で以下を設定します。
ネットワーク | ネットワークタグ |
---|---|
作成したVPC(auto-scaling-test-vpc) | auto-scaling-test-tag |
「保存して次へ」をクリックし、最後にスケーリングの設定をします。以下の数値を入力します。
インスタンスの最小数 | インスタンスの最大数 |
---|---|
2 | 4 |
ここまで進んだら、「作成」をクリックします。
インスタンスグループに遷移するので、その中に「auto-scaling-test-mig」が表示されていることを確認します。少し待ったら、ステータスにチェックが入ります。
ファイアウォール
ヘルスチェック用のファイアウォールを作成します。「VPCネットワーク」 > 「ファイアウォール」 > 画面上部「ファイアウォール ルールを作成」をクリックし、項目を入力します。今回は以下のように設定しました。
名前 | ネットワーク | ターゲット | ターゲットタグ | ソースフィルタソースIPの範囲 | ソースIPの範囲プロトコルとポート | プロトコルとポート |
---|---|---|---|---|---|---|
auto-scaling-test-allow-health-check | 作成したVPC(auto-scaling-test-vpc) | 指定されたターゲットタグ | auto-scaling-test-tag | IP範囲 | 130.211.0.0/22, 35.191.0.0/16 | 指定したプロトコルとポートにチェック 「tcp:」にチェック ポート入力欄に「80」 |
入力後、「作成」をクリックします。以下のようにファイアウォールが作成されます。
オートスケーリングの確認
左メニュー「Compute Engine」> 「VMインスタンス」をクリックし、インスタンス一覧に遷移してみると、インスタンスが2台作成されます。オートスケーリングが効いているか確認するため、このうち1台を手動で削除してみます。1台にチェックを入れ、画面上部の三点リーダーから「削除」をクリックします。
確認画面が表示されるのでここでも「削除」をクリックします。削除が終わったあとにしばらく待ってみて、新しくインスタンスが作成されることが確認できたらOKです。(作成されているかどうかを確認するには、画面の更新をする必要があります。あと結構時間がかかります)
ロードバランサ
ロードバランサ設定を進めます。
外部IP予約
「VPCネットワーク」 > 「外部IPアドレス」 > 画面上部「静的アドレスを予約」をクリックし、予約を行います。今回は以下のようにしました。以下以外はデフォルトです。
名前 | タイプ |
---|---|
auto-scaling-test-ip | グローバル |
入力後、「予約」をクリックします。
ロードバランサ
左メニュー「ネットワークサービス」 > 「Cloud Load Balancing」 > 「ロードバランサを作成」 > 「HTTP(S) 負荷分散」の「構成を開始」をクリックして次ページへ遷移します。
「インターネットから自分のVMへ」を選択し、「続行」をクリックします。
そこで、ロードバランサの名前を設定できます。今回はauto-scaling-test-lb
という名前にしました。
その後、「バックエンドの構成」をクリックし、こちらにも名前を設定します。今回はauto-scaling-test-lb-backend
としました。その後「バックエンド」 > 「新しいバックエンド」で値を入力します。
インスタンスグループ | ポート番号 |
---|---|
作成したインスタンスグループ(auto-scaling-test-mig) | 80 |
ヘルスチェックに関しては、「ヘルスチェックを作成」をクリックし、値を入力します。以下入力した値です。
名前 | プロトコル | ログ |
---|---|---|
auto-scaling-test-health-check | HTTP | オン |
ここまで入力したら「保存」をクリックし、最後に「作成」をクリックします。
次に「フロントエンドの構成」をクリックします。ここでは以下の項目を設定します。
プロトコル | IPアドレス | IPバージョン | ポート |
---|---|---|---|
HTTP | 予約したIPアドレス(auto-scaling-test-ip) | IPv4 | 80 |
「完了」を押下し、「作成」をクリックします。
ここまで設定すると、ロードバランサ&オートスケーリングの組み合わせが作成されています。作成したロードバランサをクリックして「IP:ポート」を確認し、ブラウザからアクセスすると以下のようなページに遷移します。
負荷分散の確認
負荷分散が正しく行われているか確認します。
とりあえずファイアウォールを追加します。「VPCネットワーク」 > 「ファイアウォール」 > 画面上部「ファイアウォール ルールを作成」をクリックし、以下のように設定します。
名前 | ネットワーク | ターゲット | ターゲットタグ | ソースフィルタソースIPの範囲 | ソースIPの範囲 | プロトコルとポート |
---|---|---|---|---|---|---|
auto-scaling-test-allow-ssh | 作成したVPC(auto-scaling-test-vpc) | 指定されたターゲットタグ | auto-scaling-test-tag | IP範囲 | 0.0.0.0/0 | 指定したプロトコルとポートにチェック 「tcp:」にチェック ポート入力欄に「22」 |
入力後、「作成」をクリックします。以下のようにファイアウォールが作成されます。
これで、インスタンスにSSH接続ができるようになりました。
左メニュー「Compute Engine」> 「VMインスタンス」をクリックし、インスタンス一覧に遷移します。今回作成したインスタンスは一覧の中に2つあるはずなので、この2つのインスタンスの「接続」 > 「ブラウザウィンドウで開く」をクリックし、SSH接続のコンソールブラウザを展開します。両方展開すると2ブラウザ同時に開くことができます。
その後、両方のコンソールブラウザで以下のコマンドでApacheのログを確認してみます。
cat /var/log/apache2/access.log
すると、GoogleHC/1.0
からのアクセスがたくさんあることがわかります。これはHealthCheckからのアクセスです。ここで、ブラウザからロードバランサの「IP:ポート」に10回ほどアクセスし、再度上のコマンドを叩いてみます。すると、両方のコンソールブラウザでHealthCheck以外からのアクセスが確認でき、その数を合計するとアクセスした回数になっているはずです。
このようにして、アクセスが分散されていることを確認できます。
おわりに
AWSと比較するとオートスケーリングとロードバランサの対象のグループが同じな分、シンプルに設定することができた印象です。ですがヘルスチェック用のファイアウォールを設定したりと、AWSと異なる部分があったため少し手間取りました。
たくさんGCも触って、操作感を覚えていきたいです。
(今回はあえてコンソールでの操作のみに拘りましたが、Cloud Shellとかを使った方が楽できるだろうなあ・・・とも感じました。)