お題
GAE(Google App Engine)を理解するために、実際に自分でアプリ作って乗せてみる。
とりあえず、App Engineの特徴をまとめる。
動機
GAE、ドキュメントを読めば読むほど「Webアプリなら、とりあえずGAEに乗せれば、運用面も含め、十分、本番稼働させられるのでは?」と思えてくる。
GKE(k8s)も勉強中だけれども、gRPCでなくRESTでいいなら、GAEにする方が運用コストも断然楽なんじゃないかと思える。
ただ、チュートリアルを多少やったくらいだと、結局出来合いのものなので、つまづくところもなく、したがって実際に自分でWebアプリを作ってGAEにデプロイ、運用しようとした時にどれほど大変(ないし、楽)なのかがわからない。
なので、試してみることにした。
前提
- スタンダード環境での開発とする。
- 自動スケーリングタイプを採用する。
App Engineについて
- PaaSなので、決まった方式に沿って開発すると、あとの面倒(主にインフラ面)はGCP側で見てくれる。
- デフォルトで「[プロジェクトID].appspot.com」のドメインでアクセスできる。(別途調達したドメインを用いることも可能)
- オートスケールが早い(Javaで5秒、Goで40ミリ秒)
構造
+----------------------------------------------------------------------------------+
|[App Engine] |
| |
| +-------------------------------------+ +-------------------------------------+ |
| |[Service-A] | |[Service-B] | |
| | | | | |
| | +---------------------------------+ | | +---------------------------------+ | |
| | |[Version-1] | | | |[Version-1] | | |
| | | | | | | | | |
| | | +-------------+ +-------------+ | | | | +-------------+ +-------------+ | | |
| | | |[Instance-a] | |[Instance-b] | | | | | |[Instance-e] | |[Instance-f] | | | |
| | | | | | | | | | | | | | | | | |
| | | +-------------+ +-------------+ | | | | +-------------+ +-------------+ | | |
| | | | | | | | | |
| | +---------------------------------+ | | +---------------------------------+ | |
| | | | | |
| | +---------------------------------+ | | +---------------------------------+ | |
| | |[Version-2] | | | |[Version-2] | | |
| | | | | | | | | |
| | | +-------------+ +-------------+ | | | | +-------------+ +-------------+ | | |
| | | |[Instance-c] | |[Instance-d] | | | | | |[Instance-g] | |[Instance-h] | | | |
| | | | | | | | | | | | | | | | | |
| | | +-------------+ +-------------+ | | | | +-------------+ +-------------+ | | |
| | | | | | | | | |
| | +---------------------------------+ | | +---------------------------------+ | |
| | | | | |
| +-------------------------------------| +-------------------------------------+ |
| |
+----------------------------------------------------------------------------------+
App Engine
- 1GCPプロジェクトに1つだけ存在する。
Service
- 1 App Engineにつき、プログラミング言語別(Python, Java, Node.js, PHP, Go)に複数のServiceを持てる。
- Service間の通信は、RESTによるやりとりや、Datastore、Memcache、タスクキューにより可能。
- オートスケール、負荷分散、インスタンスタイプはService毎に独立して管理される。
Version
- 1 Serviceにつき、複数のVersionを同時にデプロイできる。
- 各Versionはパーセンテージでリクエストの振り分けができるため、下記が可能。
- A/Bテスト
- スモークテスト
- Blue/Greenデプロイメント
- カナリアリリース
- デプロイの高速ロールバック
Instance
- 1 Versionにつき、複数のInstanceがオートスケールする。
注意点
- 一度作ると、リージョンの変更は不可
- 1リクエストは60秒以内に処理する必要がある(タスクキューの場合は10分以内)
- アプリがファイルを書き込めるパスは「
/tmp
」のみ
参考