Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Global展開するGAEサービスに対するServerless NEG導入の軌跡【DeNA TechCon 2023】

Global展開するGAEサービスに対するServerless NEG導入の軌跡【DeNA TechCon 2023】

youtube:https://youtu.be/DJJy2_MLmkI

概要:
Google App Engine のカスタムドメインを利用する場合、証明書を自前で発行しドメインとアプリをマッピングする対応のままだと、レイテンシの問題が発生するとされています。こちらを回避するためには、Serverless NEG を使う構成への変更が必要となります。

DeNA ではスマートフォン向けゲームに共通して必要となる汎用的な機能を、Google Cloud のAppEngineを利用し、共通基盤のAPIとして提供しています。こちらについて、従来の構成からCloud Load Balancing と Serverless NEG を用いた構成に変更を行いました。

本セッションでは、実際に行った対応内容と、その過程でハマったポイントについてご紹介します。

登壇内でのリンク集:
p5, https://cloud.google.com/docs/security/infrastructure/design?hl=ja#google_front_end_service
p6, https://cloud.google.com/appengine/docs/standard/mapping-custom-domains?hl=ja
p9, https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts?hl=ja
p10, https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts?hl=ja
p12, https://cloud.google.com/certificate-manager/docs/overview
p21, https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts?hl=ja#backend-service-limitations

◆ チャンネル登録はこちら↓
https://youtube.com/c/denatech?sub_confirmation=1

◆ Twitter
https://twitter.com/DeNAxTech

◆ DeNA Engineering
https://engineering.dena.com/

◆ DeNA Engineer Blog
https://engineering.dena.com/blog/

◆ DeNA TechCon 2023 公式サイト
https://techcon2023.dena.dev/

DeNA_Tech

March 02, 2023
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. 経歴 • ソリューション事業本部 • サーバーサイドエンジニア • 2014 年に新卒入社 • 2014年

    ~ 2019年 ◦ Mobage や AndApp のゲーム開発者向けシステムの開発・運用 ◦ Mobage や AndApp の決済計上システムの開発・運用 • 2019年 ~ 現在 ◦ スマートフォン向けゲーム共通基盤の API 開発・運用 ◦ グループマネージャー 自己紹介 2
  2. • システム紹介 • カスタムドメインを利用した従来の構成 • 従来の構成の課題 • レイテンシ問題の解決 ◦ Serverless

    NEG を利用した構成への変更 • 証明書問題の解決 ◦ Certificate Manager の導入 • ハマったポイント • まとめ 目次 3
  3. システム紹介 • スマートフォン向けゲームでよく利用される機能をAPIとして提供 • ゲーム毎に環境が独立しており、専用のGCPプロジェクトを作成 • API は App Engine

    を利用 • APIのコードベースは共通で同じコードがdeployされている 4 Google Cloud Platform is a trademark of Google LLC. Google App Engine is a trademark of Google LLC.
  4. 従来の構成の課題 6 レイテンシの問題 ◦ カスタムドメインを使用すると一部のリージョンにおいて App Engine がユーザーに送信するレスポンスに 著しいレイテンシ が発生することがある

    ▪ [2] https://cloud.google.com/appengine/docs/standard/mapping-custom-domains ◦ ゲームはグローバルに展開がなされており高トラフィックである ◦ クライアント側のタイムアウト設定は 2秒 (API の レスポンスは2秒以内に返す必要がある)
  5. • レイテンシの問題 ◦ カスタムドメインを使用すると一部のリージョンにおいて App Engine がユーザーに送信するレスポンスに 著しいレイテンシ が発生することがある ◦

    ゲームはグローバルに展開がなされており高トラフィックである ◦ クライアント側のタイムアウト設定は 2秒 (API の レスポンスは2秒以内に返す必要がある) • 証明書 ◦ 自前の証明書であるため、作成や管理などを全て行う必要があり煩雑 • メンテナンスコスト ◦ 期限を迎える前に証明書の入れ替えなどの作業がゲームの数だけ必要となる レイテンシ問題の解決 8 Load Balancer + Serverless NEG の構成に変更
  6. 9 Serverless NEG を利用した構成 概要 • ネットワークエンドポイントグループ • バックエンドやサービスのグループを構成する構成オブジェクト •

    NEGは一部のロードバランサのバックエンドとして使用できる [3] https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts Serverless NEG とは Cloud Load Balancing is a trademark of Google LLC.
  7. Serverless NEG のユースケースと制約事項 10 ユースケース • ロードバランサを有効にすることで1つの専用IPアドレスからサーバーレスアプリを運用可能 • 同じドメインで動作する複数のサーバーレスのサービスに1つのURLをマッピング可能 •

    GCE,GKE,GCSで同じSSL証明書と秘密鍵を再利用することで個別の証明書管理が不要 制約事項 • 1つのServerless NEGに複数のエンドポイントは設定できない • NEGと同じリージョンにあるサービスのみ参照できる • ロードバランサやバックエンドサービスに応じ細かな制限がある [4] https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts
  8. • レイテンシの問題 ◦ カスタムドメインを使用すると一部のリージョンにおいて App Engine がユーザーに送信するレスポンスに 著しいレイテンシ が発生することがある ◦

    ゲームはグローバルに展開がなされており高トラフィックである ◦ クライアント側のタイムアウト設定は 2秒 (API の レスポンスは2秒以内に返す必要がある) • 証明書 ◦ 自前の証明書であるため、作成や管理などを全て行う必要があり煩雑 • メンテナンスコスト ◦ 期限を迎える前に証明書の入れ替えなどの作業がゲームの数だけ必要となる 証明書&メンテナンスコストの課題解決 11 Certificate Manager を用いた Googleマネージド証明書の作成
  9. 概要 • セルフマネージド証明書、Googleマネージド証明書、ワイルドカード証明書が使用可能 • Certificate Manager と Cloud Loadbalancing を組み合わせることにより

    堅牢なサービスを構築することが可能 • ロードバランサのマネージド証明書では最大15個の制限があるが、 Certificate Manager ではロードバランサ毎に最大100万個の証明書を設定可能 メリット • ワイルドカード証明書が使用可能となっている • 証明書の有効期限についてモニタリング機能があり通知ができる • 証明書の自動管理が可能 • GCP上で動作するアプリケーションへの導入が簡単 [5] https://cloud.google.com/Certificate-Manager/docs/overview Certificate Manager について 12
  10. Certificate Managerの導入 13 手順 1. ドメインの所有権確認 2. DNS authorizationのための設定追加 3.

    Certificate Managerで証明書を作成 a. provisioning statusがactiveになることを確認 4. 証明書をLoad Balancerに設置 a. Certificate ManagerでCertificate mapを作成 b. Certificate ManagerでCertificate map entryを作成 c. Certificate map entryのステータスを確認 5. 作成した証明書の動作確認 必要に応じて • 証明書についてのモニタリングと通知の設定
  11. Certificate Managerの導入 14 手順 1. ドメインの所有権確認 2. DNS authorizationのための設定追加 3.

    Certificate Managerで証明書を作成 a. provisioning statusがactiveになることを確認 4. 証明書をLoad Balancerに設置 a. Certificate ManagerでCertificate mapを作成 b. Certificate ManagerでCertificate map entryを作成 c. Certificate map entryのステータスを確認 5. 作成した証明書の動作確認 必要に応じて • 証明書についてのモニタリングと通知の設定 gcloud certificate-manager certificates create "game–a-cert" --domains=”game-a.sample.com” -- dns-authorizations="game-a-dns-authorization" gcloud certificate-manager certificates describe game-a-cert
  12. 15 Certificate Managerの導入 gcloud certificate-manager maps create game-a-cert-map gcloud certificate-manager

    maps entries create "game-a-cert-map- entry" --map=game-a-cert-map -- certificates=game-a-cert -- hostname="game-a.sample.com" gcloud certificate-manager maps entries list --map=game-a-cert-map 手順 1. ドメインの所有権確認 2. DNS authorizationのための設定追加 3. Certificate Managerで証明書を作成 a. provisioning statusがactiveになることを確認 4. 証明書をLoad Balancerに設置 a. Certificate ManagerでCertificate mapを作成 b. Certificate ManagerでCertificate map entryを作成 c. Certificate map entryのステータスを確認 5. 作成した証明書の動作確認 必要に応じて • 証明書についてのモニタリングと通知の設定
  13. 16 Certificate Managerの導入 手順 1. ドメインの所有権確認 2. DNS authorizationのための設定追加 3.

    Certificate Managerで証明書を作成 a. provisioning statusがactiveになることを確認 4. 証明書をLoad Balancerに設置 a. Certificate ManagerでCertificate mapを作成 b. Certificate ManagerでCertificate map entryを作成 c. Certificate map entryのステータスを確認 5. 作成した証明書の動作確認 必要に応じて • 証明書についてのモニタリングと通知の設定
  14. 1. GAE Firewall 利用時のエラー (すでに解消) 18 • 一部のGCPプロジェクトの App Engine

    では Firewall を利用し、IPの許可/拒否設定をしていた • Load Balancer + Serverless NEG の設定を適用し、 リクエストのテストをしたところ、403が返された • 設定を間違えたのかと思い、設定を見直したが、思い当たる場所はなし • 問い合わせた結果、GAE Firewall の設定を全て削除したところ、リクエストが成功 • GAE Firewall を利用していると、全てのリクエストが403になるバグが発覚 • その後、Googe Cloud のサポートから直ったと連絡があった このエラーはLoad Balancer (Classic) では発生しておらず、 Envoy ベースのロードバランサ固有の問題であったようです 補足
  15. 現状として、 • API提供開始時にCertificate Managerがなかったため別に証明書を管理していた ◦ Certificate Managerで新たに設定する必要がある • ゲーム毎にプロジェクトが分かれている ◦

    他のゲームに影響を与えないため • Certificate Managerに移行することで新たに証明書が必要 ◦ ワイルドカード証明書も作成可能だがプロジェクトを跨げない • プロジェクト間で証明書を共有することはできない 結果 • 稼働しているタイトル毎に証明書を作成する必要が出てきた • 証明書の作成に失敗すると稼働中のタイトルに与える影響大 2. 大量の証明書作成 19
  16. 20 3. Console の表示 (サンプルレート) • ロードバランサーのバックエンドサービス作成時に –enable-logging を指定し、ログを有効にした •

    ロードバランサーのログは全て問題なく出力されていた • 後日、ログのサンプルレートを変更しようと、console を確認したところ ロギングは有効だが、サンプルレートが 「0」 になっていた • –enable-logging を指定しサンプルレートを指定しなかった場合は 「1」 になるはず • Google Cloud のサポートに問い合わせたところ、console の表示の不具合だった • 明示的に --logging-sample-rate=1.0 を指定してほしいとのこと • 最近 console を確認したらサンプルレートが 「1」 になっていたので 現在は解消 gcloud compute backend-services create app-engine-backend-service --load-balancing-scheme=EXTERNAL_MANAGED --global --enable-logging
  17. 3. Console の表示 (タイムアウトに関する注意) • バックエンドサービスを作成し、CLIで設定を確認すると タイムアウトが 30 秒と表示されていた •

    console でも確認したところタイムアウトは 30秒と表示されていた • Serverless NEG バックエンドを利用する場合、タイムアウト設定は適用されず、 代わりに Serverless NEG の 60 分 がデフォルトで適用され、修正できない 21 [6] https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts#backend-service-limitations $ gcloud compute backend-services describe "app-engine-backend-service" backends: : 省略 : timeoutSec: 30
  18. まとめ 22 • レイテンシの問題は、Load Balancer + Serverless NEG の構成により改善が期待できる •

    Certificate Manager を利用することで煩雑な証明書作成/更新等の管理作業から解放される • 導入過程でいくつかハマったポイントがある ◦ 適用しようとしている構成に対し、適切な解決策であるか検討すること ◦ 実際に利用する際には十分な検証が必要 ◦ console の内容を鵜呑みにせず、公式ドキュメント等を参考に設定を確認する • 何かおかしいと思ったらバグの可能性がある ◦ 一人で悩まず、周りに聞く・サポートに問い合わせをする事が大事
  19. 23

  20. 出典 24 • [1] Google インフラストラクチャのセキュリティ設計の概要 https://cloud.google.com/docs/security/infrastructure/design?hl=ja#google_front_end_service • [2] カスタム

    ドメインのマッピング https://cloud.google.com/appengine/docs/standard/mapping-custom-domains • [3] サーバーレス ネットワーク エンドポイント グループの概要https://cloud.google.com/load- balancing/docs/negs/serverless-neg-concepts • [4] サーバーレス ネットワーク エンドポイント ユースケース https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts?hl=ja#use_cases • [5] Certificate Manager overview https://cloud.google.com/Certificate-Manager/docs/overview • [6] サーバーレス ネットワーク エンドポイントバックエンド サービスの制限事項 https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts#backend-service-limitations