Google App Engine (GAE) チュートリアル – GAEアプリ・サービス・バージョン・インスタンス理解編

  • このエントリーをはてなブックマークに追加

このページでは、グーグルのクラウドサービス GCP で、SSL ありで、独自ドメインな Web サービスを、(できる限り) 無料で作ってみましょう、 というものです。

GAE Standard の課金

GAE Standard の課金は、「1インスタンスあたりいくら」で決まります。当ページ管理人的な表現としては、より正確に言うと「実際に起動されている 1インスタンスあたりいくら」です。

ではインスタンスとは何か。

  • GAE アプリケーションを設定しただけでは、インスタンスが起動していません。よって無料です。これはサービスをデプロイできる枠を作っただけです。
  • GAE アプリケーションに、サービス “default” にデプロイします。特にインスタンス数の設定を行っていないならば、ここで 1インスタンスが起動します。これは課金対象です。
  • サービス “default” に gcloud app deploy でデプロイします。そうするとすでに存在するサービスの別バージョンが新たに作成されます。これも 1インスタンスが起動します。これで合計 2インスタンスです。
  • サービス “default” には複数バージョンがデプロイされています。しかし普通にアクセスすると、新しいバージョンの方につながります。https://[バージョン]-dot-[プロジェクトID].appspot.com/ にアクセスすると古いバージョンが見えますが、一般利用者は知らない URL なので、普通の状態なら古いバージョンにアクセスする人は誰もいなくなります。
  • その結果、しばらくすると自動的に古いバージョンのインスタンスは 0 になります。

別のサービスを起動してみる

cd .. && cp -rp hello_world hello_world2 && cd hello_world2 とする。ここで gcloud app deploy すると、hello_world を上書きしてしまう。別アプリケーションとしてデプロイしてみよう。

app.yaml に service: helloworld2 を追加し、
gcloud app deploy する。
すると、 https://helloworld2-dot-myprojectzxcv.appspot.com/ となる。

これで 2サービスが起動し、それぞれ 1インスタンスずつであることに注意してください。ずっと起動し続けると GAE 無償枠を超えてしまいます。

複数環境 (開発・ステージング・本番)

バージョン

gcloud app deploy すると、新規バージョンが増えていって…
実は過去のバージョンもアクセス可能で…
gcloud app deploy –version=v1 とか…
gcloud app deploy

GAE としてローカルデバッグ実行

flask 単体ではなく GAE としてローカルデバッグ実行したい場合… py3 で
dev_appserver.py ってどうなったんだっけを調査

プロジェクトとGAE アプリケーションとサービスの関係性

GAE にはアプリケーションやサービスという概念がありますが、これが大変わかりづらいものになっています。これはおそらく、GCP ができる前に GAE が存在したことに起因します。

まず、GAE アプリケーションが親です。その下にサービスを複数ぶら下げることができます。サービスは固定のサービス名 “default” がありますが、任意の名称のサービスを追加することもできます。

実例を見てみましょう。最初は下記です。

  • アプリケーション (無効状態)

GAE アプリケーションを有効化します。リージョンは us-central1 にしたとします。すると下記になります。まだサービスはありません。

  • アプリケーション (有効・us-central1)

Hello World サービスをデプロイします。

  • アプリケーション (有効・us-central1)
    • サービス “default” ← これが Hello World

次に Hello World 2 を、新規サービスとしてデプロイしたとします。すると下記のようになります。

  • アプリケーション (有効・us-central1)
    • サービス “default”
    • サービス “helloworld2”

通常、GCP 上でシステムを作るときは「プロジェクト」を作成します。例えばプロジェクト名を myproject とするならば、下記の様にプロジェクトを統一します。

  • GCE インスタンス作成時、プロジェクトは myproject
  • Cloud Storage のバケットを作成し、プロジェクトは myproject
  • BigQuery のデータセット作成時、プロジェクトは myproject

しかし、GAE の場合は GAE 用の新規プロジェクトを作成するほうがよいと考えます。なぜならば、GAE は下記のように特別な事情があるからです。

  • GAE アプリケーションはプロジェクトにつき1つだけ (有効にするか無効にするかのいずれか)
  • GAE アプリケーションのリージョンは一度設定すると変更できない。GAE アプリケーションは削除はできない。無効化はできるが、データは残り、有効化すると元通り。つまりデータの完全削除が難しい。

GAE アプリケーションを削除・無効化

GAE アプリケーションの削除はできませが、無効化なら可能です。

GAE サービスを削除

default サービスは何と削除できません。つまり下記にデプロイしたサービスを削除することはできません。

その他

gcloud app deploy
ERROR: gcloud crashed (BadStatusLine): ”
→ cloud shell のせい

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

Leave a Reply

*

CAPTCHA