クラウド同上

Serverless NEG + GAE を試してみる

Author
yasue
Lv:18 Exp:87761

---ただいま鋭意作成中です---

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のご利用について様々な技術支援を行っております。何かお困りのことがございましたらぜひご相談ください!