GCPのNetwork Endpoint Groupでハマったので、メモ。
エラーにならない
gcloudのバージョン
$ gcloud version
Google Cloud SDK 367.0.0
app-engine-python 1.9.98
beta 2021.12.10
bq 2.0.72
cloud-datastore-emulator 2.1.0
core 2021.12.10
gsutil 5.5
GAEの状況
$ gcloud app services list
SERVICE NUM_VERSIONS
default 1
App Engineのサービスはdefaultだけ存在。
NEGを作ってみる
$ gcloud compute network-endpoint-groups create no-target-gae --app-engine-service dummy --network-endpoint-type=serverless --region us-central1
Created [https://www.googleapis.com/compute/v1/projects/XXXXXXXX/regions/us-central1/networkEndpointGroups/no-target-gae].
Created network endpoint group [no-target-gae].
dummyという、存在していないApp Engineのサービスを指定したが、network-endpoint-groupsが作成された。
$ gcloud compute network-endpoint-groups list
NAME LOCATION ENDPOINT_TYPE SIZE
no-target-gae us-central1 SERVERLESS 0
url-mapでpath matcherを使っていると、切り分けが大変
この、存在しないGAEサービスを指定したNEGにトラフィックを送ると、404エラーになる。存在していないのだから、当たり前と言えば当たり前。
これが、複数のNEGにトラフィックを振り分けるようなLoad Balancerだと、切り分けの難易度が上がる。url-mapのpath matcherに問題があるのではという可能性が出てくるから。
現象的には、トラフィックがLoad Balancerに吸い込まれてNEG(の先の最終的なバックエンド)に届いていないように見えてしまう。Load Balancerの中は見られないので、調査も手詰まりのように思えてしまう。
だが、NEGの作成時に指定したバックエンドが存在していない可能性があるということを知っていれば、意図通りにNEGが作成されているかというところへ、切り分けていけるだろう。
NEGの作成時にエラーになっていれば、こんな苦労もしなくて済むのだが…。
コメント