Network Endpoints Group (NEG) が非常に強力にバージョンアップしました!
GCP (Google Cloud Platform) のNEGのバックエンドには、今まではGCEやGKEにしか使用できませんでした。
しかし、NEGのバージョンアップにより、Serverlessなサービスである『GAE (SE&FE)』、『Cloud Functions』、『Cloud Run』もNEGを使用できるようになりました。
※NEGそのものに関しての説明は本記事では省きますので、下記の公式ページを一読ください。
ネットワーク エンドポイント グループの概要 | 負荷分散
インターネット ネットワーク エンドポイント グループの概要 | 負荷分散
ゾーン ネットワーク エンドポイント グループの概要 | 負荷分散
今回はそんなバージョンアップしたNEGであるServerless NEGを使用して、GAEにNEGを設定する手順を紹介します。
設定手順は大きく分けて5工程になります。
● GAEをデプロイする
● 静的IPアドレスを取得する
● Serverless NEGを作成する
● バックエンドサービスを作成する
● URLマップを作成する
また、今回の手順は下記の公式ページを参考にして実施しています。
Setting up serverless NEGs | Load Balancing
目次
0. 前準備
作業をする前に、今回使用するCloud SDKのバージョンの最新化と設定を行いましょう。
Cloud SDKが未インストールの場合は、下記の公式ページよりご自分の環境にあったインストール方法に従ってインストールしてください。
クイックスタート | Cloud SDK のドキュメント
0.1 Cloud SDKの最新化を行う
gcloud components update
0.2 Cloud SDKの認証を行う
gcloud auth login
0.3 プロジェクトの指定をする
gcloud config set project 今回使用するプロジェクト名
0.4 Cloud SDKの設定確認
下記のコマンドを実行し、account と project が正しく設定されているか確認してください。
gcloud config list
0.5 GCPの各種サービスの権限確認
NEGを設定するにあたり、作業者に下記のページの権限があることを確認してください。
https://cloud.google.com/load-balancing/docs/negs/setting-up-serverless-negs#configure_permissions
また、上記に加えて、GCPコンソール画面よりGAEの初期セットアップを行ってください。
https://console.cloud.google.com/appengine?project=プロジェクト名
GAEの初期セットアップを行う際に、GAEのリージョンを聞かれるかと思いますので、その際には『asia-northeast1(東京リージョン)』を選択してください。
1. GAEをデプロイする
まずはじめに、Serverless NEGを試すということでバックエンドのアプリケーションであるGAE SEをデプロイしましょう。
GAE SEを選択した理由ですが、特に深い理由はなく、単純に筆者が一番慣れ親しんでいるサービスであるという理由だけです。
今回、筆者はEclipse 4.7を使用して、GAE SEのJava8のプロジェクトの作成からデプロイまでを実施しました。
GAEのサービスの有効化方法、プロジェクトの作成方法やデプロイ方法が分からない場合は、下記の公式ページを参考にしてみてください。
App Engine スタンダード アプリケーションの作成 | Cloud Tools for Eclipse
Eclipse からの App Engine スタンダード アプリケーションのデプロイ | Cloud Tools for Eclipse
なお、アプリケーションの内容は下記のように『Hello App Engine!』を表示するだけのものです。
2. 静的IPアドレスを生成する
次は、HTTP(S)負荷分散を行うロードバランサーに設定するIPアドレスを生成しましょう。
このIPアドレスの取得は必須ではありませんが、Googleとしては静的IPアドレスを使用することを推奨しています。
下記のコマンドを実行してください。
gcloud compute addresses create serverless-neg-ip \
--ip-version=IPV4 \
--global
生成した静的IPアドレスを確認するために下記のコマンドを実行してください。
gcloud compute addresses describe serverless-neg-ip \
--format="get(address)" \
--global
コマンドを実行すると、『serverless-neg-ip』という名前に紐付けられたIPアドレスが表示されますので、控えておいてください。
3. Serverless NEGを作成する
次はServerless NEGを作成しましょう。
Serverless NEGはまだベータ版のためGCPのコンソール上からは作成できません。
gcloudコマンドの『gcloud beta commands』を使用して作成します。
※コンポーネントが入っていない場合は、下記のコマンドを実行してコンポーネントをインストールしてください。
gcloud components install beta
では、Serverless NEGを作成します。
gcloud beta compute network-endpoint-groups create helloworld-serverless-neg \
--region=asia-northeast1 \
--network-endpoint-type=SERVERLESS \
--app-engine-app
ここで少し、今回使用したコマンドの引数やオプションの説明をします。
引数・オプション | 説明 |
---|---|
helloworld-serverless-neg | NEGの名前です。任意の名前に変えても問題ありません。 |
–region=asia-northeast1 | NEGのリージョンです。GAE SEのリージョンに合わせる必要があります。 |
–network-endpoint-type=SERVERLESS | NEGの種別です。SERVERLESSを指定することでServerless NEGとして作成できます。 |
–app-engine-app | GAEのネットワークエンドポイントグループの構成を使用するための設定です。 |
今回は使用しませんでしたが、GAEのNEGを作る際のオプションは他にもありますので、気になる方は「gcloud beta compute network-endpoint-groups create」コマンドのオプションを確認してください。
https://cloud.google.com/sdk/gcloud/reference/beta/compute/network-endpoint-groups/create
NEGが作成できたかどうか、下記のコマンドを実行して確認します。
『helloworld-serverless-neg』が表示されたらOKです。
gcloud beta compute network-endpoint-groups list
NAME LOCATION ENDPOINT_TYPE SIZE
helloworld-serverless-neg asia-northeast1 SERVERLESS 0
4. バックエンドサービスを作成する
4.1 バックエンドサービスを作成する
gcloud compute backend-services create helloworld-backend-service --global
NAME BACKENDS PROTOCOL
helloworld-backend-service HTTP
4.2 バックエンドサービスへNEGを追加する
gcloud beta compute backend-services add-backend helloworld-backend-service \
--global \
--network-endpoint-group=helloworld-serverless-neg \
--network-endpoint-group-region=asia-northeast1
4.3 バックエンドサービスの確認
gcloud beta compute backend-services list
NAME BACKENDS PROTOCOL LOAD_BALANCING_SCHEME HEALTH_CHECKS
helloworld-backend-service asia-northeast1/networkEndpointGroups/helloworld-serverless-neg HTTP EXTERNAL
『helloworld-backend-service』のBACKENDSに『helloworld-serverless-neg』が表示されていますのでOKです。
5. URLマップを作成する
5.1 URLマップを作成する
gcloud compute url-maps create helloworld-url-map \
--default-service helloworld-backend-service
NAME DEFAULT_SERVICE
helloworld-url-map backendServices/helloworld-backend-service
5.2 ターゲットHTTPプロキシを作成し、URLマップへ追加する
gcloud compute target-http-proxies create helloworld-http-proxy \
--url-map=helloworld-url-map
NAME URL_MAP
helloworld-http-proxy helloworld-url-map
5.3 URLマップへバックエンドサービスを追加する
gcloud compute forwarding-rules create helloworld-http-content-rule \
--address=『2. 静的IPアドレスを生成する』で控えたIPアドレスを指定する \
--target-http-proxy=helloworld-http-proxy \
--global \
--ports=80
5.4 URLマップを確認する
gcloud compute forwarding-rules list
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET
helloworld-http-content-rule 『2. 静的IPアドレスを生成する』で控えたIPアドレス TCP helloworld-http-proxy
6. 動作確認
ロードバランサー経由でGAEにリクエストしてみましょう。
下記のパターンのURLをブラウザにて直打ちしてみましょう。
(肌感覚ですが、5の設定の反映には5〜10分くらいかかるようです。)
http://『2. 静的IPアドレスを生成する』で控えたIPアドレス/hello
IPアドレスを指定して、GAEにアクセスができましたね。
これで、Serverless NEGの設定が正しくできたことが確認できました。
7. まとめ
思ったよりも簡単にServerless NEGを設定できたかと思います。
Serverless NEGの登場により、HTTP(S)ロードバランサーを組み合わせることでServerlessなサービスでもマルチリージョナルに利用できるようになるだけでなく、Cloud Armorといった今まではServerlessなサービスでは使えなかったサービスが使えるようになったのは非常に大きなインパクトがありますね。
筆者としては、シンプルにGAEをはじめとしたServerlessなサービスが簡単に固定IPでリクエストを受け取れるようになったのが大きいと思いました。というのも筆者は以前、運用していたGAEでお客様のサーバからリクエストを受けるために固定IPが必要だった時があり、そのためだけにGCEをプロキシサーバーとして建てた記憶があります。今でしたらServerless NEGを使用すれば簡単に実現ができますね。
Serverless NEGは2020年07月時点でまだベータ版ですが、Serverlessサービスだけでは要件的にNGだった場面がに対して、Serverless NEGと組み合わせる事で要件を満たせる場面も出てくると思いますので、早くGAになるのが待ち遠しいですね。
クラウドエースでは、Google Cloud Platformのご利用について様々な技術支援を行っております。何かお困りのことがございましたらぜひご相談ください!