GCP(Google Cloud Platform)には沢山の機能やサービスがありますが、その中でも「世界最強」と言われる GCP のロードバランサを素晴らしさを体験してみませんか?
ロードバランサの設定を行うのは面倒と思われるかもしれないので、できるだけスマートで、しかも、今後、応用が効きそうな設定方法をご紹介します。エンジニアの方であればどなたでも1時間もかからずに出来ると思います。
以下に設定手順を記載します。
- GCP ロードバランサとは
- GCP ロードバランサの設定イメージ
- ターゲットとなる GCE インスタンスの作成
ロードバランサの配下にインスタンスがなければいけませんのでGCEでインスタンスを作成します。このインスタンスにWebサーバ(nginx)をインストールして Webサイトが開くことを確認します。 - 画像表示用の GCS バケットの作成
特定のURLを指定するとGCSのバケットにある画像ファイルを参照できるようにGSCの設定を行います。 - ロードバランサの作成
ロードバランサのグルーバルIPアドレスにアクセスするとデフォルトはGCEのWebサイトを参照し、特定のURLにアクセスするとGCSの画像ファイルを参照することができるように設定します。
一見すると「設定難しくない?」と思うかもしれませんが本当に簡単です。しかも、一度設定すると複数のリージョンに GCE のインスタンスを配置したり、オートスケールを試してみるといった応用ができるので、GCPのロードバランサを触る第一歩として是非とも挑戦してみてください。
目次
1.GCP ロードバランサとは
GCPのロードバランサの特徴を簡単に表現すると「google.comを支えている技術の結晶」です。https://google.com を支えるロードバランサと同じものを使っていると考えていただけば結構でしょう。
GCPのロードバランサは「アジア/北アメリカ/ヨーロッパ」の3リージョンに分類し、アクセス元から近くのリージョンへアクセスし、GCPの内部ネットワークを経由してGCEサービスに到達します。
図にすると、以下のような挙動になります。
仮にアジアの各リージョンが障害や応答性能が悪くなったりした場合は、もうひとつのリージョンに全部振り向けるというのも自動で行われます。(下図参照)
ただし、この場合、北アメリカ/ヨーロッパの各リージョンに GCE インスタンスが起動していることが前提ですね。
これらの挙動は GCP コンソール(ロードバランサのモニタリング)で参照することができ、具体的には下図のとおり 3 経路(アジア、北アメリカ、ヨーロッパ)からのトラフィックフローを見ることができます。
さて、GCPのグローバルロードバランサの凄さが少しわかって頂けましたでしょうか?
では、実際に構成するとどうなるか見て行きましょう。
2.GCP ロードバランサの設定イメージ
今回想定している環境として、画像は GCS でそれ以外を GCE のサーバでホストするというシンプルな構成を作って見ます。
GCPのロードバランサの配下には、GCE のインスタンスは1台、GCS のバケットを1つとしています。GCE の インスタンスは nginx をインストール、GCS のバケットには画像ファイルを1つ置きます。
画像ファイルを参照する場合は GCS にアクセスする URL を指定します。それ以外の URL へアクセスした場合は、GCE の nginx にアクセスするルールとします。
2つのサービス(GCE と GCS )をロードバランサのバックエンドに指定し、以下のルールに基づき、トラフィックを転送します。
- http://foobar.fizz/images/gcpug.png
→ images のパスは GCS のバケットを参照 - http://foobar.fizz/index.html
→ images のパス以外は GCE の nginx を参照
補足:ドメインを事前に取得しておきましょう。
ロードバランサに SSL 証明書を組み込み、HTTPS通信させたい場合は、以下の記事を参考にしてみてください。無料の SSL 証明書(Let’s Encrypt)の取得方法が記載しています。SSL証明書をロードバランサに組み込むとHTTPS通信が可能となります。
ZeroSSLでブラウザだけで無料の証明書(Let’s Encrypt)を取得しよう!
3. ターゲットとなる GCE インスタンスの作成
手順は以下のとおりです。Web サーバ の機能を有する nginx をインストールだけですから簡単です。
- インスタンスの作成
- インスタンスグループを作成し、インスタンスを入れる
- SSHでインスタンスにログイン後、 nginx をインストール
設定後の画面は以下となります。通常のインスタンス作成と異なるのは、2番目のインスタンスグループの作成だけです。すべて GUI 上で操作できるので簡単です。
今回作成したインスタンスのパラメータは下表にまとめています。課金を最少限にするためマシンタイプは f1-micro(共有 vCPU x 1、メモリ 0.6 GB)を選択しています。
項目 | デフォルト値 | 主な入力値 |
---|---|---|
名前 | intance-1 | modum |
ゾーン | us-east1-b | asia-norteast1-a |
マシンタイプ | n1-standard-1 | f1-micro |
ブートディスク(OS) | Debian GNU/Linux 9(stretch) | 同じ |
ブートディスクの種類 | 標準の永続ディスク | 同じ |
サイズ(ディスク容量) | 10GB | 同じ |
ファイアウォール | なし | HTTP トラフィックを許可 |
その他項目 | デフォルト値または空白 | 同じ |
インスタンスグループのパラメータも下表にまとめました。インスタンスグループは本来、複数のインスタンスをグループ化するのですが、本記事の目的はロードバランサを扱うことなのでインスタンスは1台としています。
項目 | デフォルト値 | 主な入力値 |
---|---|---|
名前 | instance-group-1 | modum-group-1 |
ロケーション | シングルゾーン | 同じ |
ゾーン | us-east1-b | asia-norteast1-a |
グループタイプ | 非マネージドインスタンスグループ | 同じ |
ネットワーク | default | 同じ |
VMインスタンス | インスタンスを追加 | modum |
その他項目 | デフォルト値または空白 | 同じ |
設定後のインスタンスグループの画面は以下となります。インスタンスが1台になっているところを確認してください。
最後に、インスタンスに SSH でログインして、nginx をインストールしましょう。
// アップデート
$ sudo apt-get update
// nginx のインストール
$ sudo apt-get install -y nginx
// nginx の起動有無の確認
// Active: active (running) と表示していれば OK
$ sudo service nginx status
nginx はインストールすると自動起動するので、グローバル IP アドレスでアクセスすると、下図のとおり nginx のデフォルト画面が開きます。
これで GCE の設定は完了です。
4. 画像表示用の GCS バケットの作成
GCS バケットの作成方法は GCP 公式サイトに記載されています。これに準じた GCP バケットの作成ステップは以下となります。
- バケット作成
- フォルダ作成
- フォルダに画像ファイルをアップロード
- 一般公開リンクにチェック
設定後の画面は以下となります。通常の設定と異なるのは、4番目の一般公開リンクのチェックだけです。チェックすることで外部(インターネット)から参照できるようになります。
バケット名は「modum-gcs」、ストレージクラスは「Multi-Regional」、場所は「ASIA」とします。
次に「modum-gcs」バケットの中に、フォルダを作成しましょう。フォルダ名は「images」です。このフォルダがロードバランサで指定する場所となります。そして、お好きな画像をアップロードし、「公開リンク」にチェックしましょう。
今回、アップロードした画像は GCP ユーザーグループの画面( https://gcpug.jp/about )です。GCP ユーザーグループ名は GCPUG(ジーシーバグ)です。勉強会や MEETUP も盛んで国内に14支部もあります。
5. ロードバランサの作成
さて、ここまではどちらかと言うとロードバランサからのリクエストを受けるための準備でした。実際のロードバランサの設定はここからになります。
手順は以下の3ステップです。バックエンド、ホストとパスのルール、フロントエンドの順に設定していきます。
- バックエンドの設定(ロードバランサに GCE と GCS を追加)
- ホストとパスのルール(参照するアクセス先を GCE と GCS へ転送)
- フロントエンドの設定(ロードバランサのグローバル IP アドレスの取得)
バックエンドの設定
GCP の左ペインにある「ネットワーク サービス」→「負荷分散」でロードバランサの設定を開始します。ロードバランサは以下の3つの選択肢があります。本記事では HTTP(S) 負荷分散で設定を行います。
- HTTP(S) 負荷分散 ・・・L7 ロードバランサ
- TCP 負荷分散 ・・・L4 ロードバランサ(TCP 通信用)
- UDP 負荷分散 ・・・L4 ロードバランサ(UDP 通信用)
バックエンドは、作成済みの GCE と GCS を選択します。
GCS はバケットを選択するだけで細かい設定は不要です。
GCE はポート番号、分散モード、ヘルスチェックの設定が必要なので、下図のとおり設定しましょう。今回の設定はデフォルトのままとします。
画面をスクロールすると「ヘルスチェック」が空欄ですので設定しましょう。デフォルトでは TCP 80 となっていますが、明瞭化のため TCP を HTTP に変更しましょう。
これで、バックエンドの設定は完了です。非常に簡単で、後で各項目の値を変更したい場合でも柔軟に変更できます。
フロントエンドの設定
フロントエンドの設定は、ロードバランサの「グローバル IP アドレス」を作成することが主な目的です。
プロトコルは HTTP と HTTPS のいずれか、または両方を追加することができます。ただし、HTTPS の場合は SSL 証明書を追加しなければなりません。
最後に、ロードバランサの「作成」ボタンをクリックして、すべての設定は完了です。これでグローバル IP アドレス(35.201.89.64)を取得することができました。
本記事では HTTP のケースですが、HTTPS 通信を利用したい場合は以下の記事を参照してください。
ZeroSSLでブラウザだけで無料の証明書(Let’s Encrypt)を取得しよう!
ホストとパスのルール
本記事の最も肝な設定箇所です。わかりやすく説明するので下図を参照してください。
- ホスト
アスタリスク( * )を入力しましょう。GCP ロードバランサのグローバル IP アドレスに届くパケットがすべて対象となることを意味します。 - パス
初回に入力するのは3行目の /images/* だけです。ロードバランサの作成が完了すると2行目が自動で追加されます。これは GCP の仕様ですが、初回設定時に2行目を追加しても問題ありません。 - バックエンド
パス /images/* は GCS へ転送します。パス /images/* 以外は GCE へ転送します。
ロードバランサのにアクセス
すべての設定が完了しましたので、実際にアクセスしてみましょう。
- http://35.201.89.64/
- http://35.201.89.64/images/gcpug.png
1番目の http://35.201.89.64/ のアクセスすると GCE インスタンスにインストールした ngnix のデフォルト画面が開きます。2番目の gcpug.png にアクセスすると下図のとおり、GCPUG の画像が開きます。これは GCS のバケットを参照しています。
http://35.201.89.64/ にアクセス
http://35.201.89.64/images/gcpug.png にアクセス
まとめ
GCP のロードバランサから GCE と GCS への転送が簡単に設定できることがわかりました。今回のシステム構成を1度作ってしまえば、応用しやすくなると思います。
例えば、以下のような応用が考えられます。
- GCE インスタンスを複数台構築し、冗長構成にする
- GCEインスタンスを複数リージョンに配置し、マルチリージョンにする
- GCE のオートスケール機能を利用し、負荷増減に対応する
- GCS のバケットを、アーカイブ用のバケット(Nearline、Coldline)に転送する
- Cloud CDN(コンテンツデリバリネットワーク)を試してみる
GCP の様々なサービスと疎結合で連携できるので、是非とも世界最強のロードバランサを体感し、これをトリガーに GCP の魅力を知っていただきたいと思います。
今回はIP直になってますが、もちろんドメイン取得・証明書を設定することでHTTPSにて通常のサイト運用にも容易に適用可能です。
※ 弊社ではクラウドエース(Cloud Ace)というGCPの導入・運用支援サービスを提供しておりますので、ご興味のある方はこちらまでお問い合わせください。
あらゆるGCPサービスのサポートが可能です。