2026年5月17日

2026年5月17日

GCP App Engineにアプリをデプロイする方法|gcloudでPythonアプリを公開する手順

App Engine は、Google Cloud でウェブアプリケーションを動かすためのサービスです。サーバーの OS やミドルウェアを自分で管理せずに、コードと設定ファイル app.yaml を渡すだけでアプリを公開でき、アクセス数に応じてインスタンスの数が自動で増減します。

この記事では、App Engine のスタンダード環境に Python(Flask)の小さなアプリをデプロイする手順を説明します。ランタイムやコマンドの内容は2026年10月時点の Google Cloud の公式ドキュメントに基づいています。

全体の流れ

  1. gcloud CLI をインストールしてログインする
  2. プロジェクトを用意し、App Engine のアプリを作成する(リージョンを決める)
  3. アプリのファイル(main.py・requirements.txt・app.yaml)を用意する
  4. gcloud app deploy でデプロイする
  5. ログを確認し、必要ならバージョンを切り戻す

gcloud CLI をインストールする

Debian / Ubuntu では、Google の apt リポジトリから google-cloud-cli パッケージを入れます(以前の google-cloud-sdk という名前のパッケージではありません)。

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates gnupg curl

# Google Cloud の公開鍵を登録する
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg

# リポジトリを追加する
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# gcloud CLI と、App Engine の Python 用コンポーネントを入れる
sudo apt-get update
sudo apt-get install -y google-cloud-cli google-cloud-cli-app-engine-python

apt で入れた場合は /usr/bin/gcloud に置かれるので、PATH の設定は不要です。macOS や Windows では、公式のインストーラーを使います。

インストールできたら、ログインして使うプロジェクトを設定します。

# ブラウザーで Google アカウントにログインする
gcloud auth login

# 新しいプロジェクトを作る場合(プロジェクト ID は世界で一意)
gcloud projects create my-project-id

# 以降のコマンドで使うプロジェクトを設定する
gcloud config set project my-project-id

gcloud init を実行すると、ログインとプロジェクトの選択を対話式でまとめて行えます。

App Engine のアプリを作成する

App Engine を使うには、プロジェクトごとに一度だけアプリを作成します。このときリージョン(アプリを動かす地域)を決めます。

# 選べるリージョンを確認する
gcloud app regions list

# 東京リージョンでアプリを作成する
gcloud app create --region=asia-northeast1

公式ドキュメントにあるとおり、アプリのリージョンは作成後に変更できません。利用者の多い地域や、ほかに使う Google Cloud のサービスと同じリージョンを選んでください。--region を省くと、対話式で選ぶ画面になります。

アプリのファイルを用意する

作業用のディレクトリーに、次の3つのファイルを置きます。

myapp/
├── app.yaml
├── main.py
└── requirements.txt

main.py

スタンダード環境の Python ランタイムは、entrypoint を指定しない場合、ディレクトリー直下の main.py にある app という名前の WSGI オブジェクトを Gunicorn で起動します。Flask の場合は次のように書きます。

from flask import Flask

app = Flask(__name__)


@app.route("/")
def index():
    return "Hello, App Engine!"


if __name__ == "__main__":
    # ローカルで試すときだけ使う。App Engine 上では Gunicorn が起動する
    app.run(host="127.0.0.1", port=8080, debug=True)

requirements.txt

使うライブラリを書きます。App Engine はデプロイ時にこのファイルを読んで、ライブラリをインストールします。

Flask==3.1.3

entrypoint を指定しない場合、gunicorn をここに書く必要はありません。app.yaml で entrypoint: gunicorn ... のように Gunicorn を明示したときだけ追加します。

app.yaml

runtime: python313

instance_class: F1

automatic_scaling:
  target_cpu_utilization: 0.65
  min_instances: 0
  max_instances: 5
項目 意味
runtime Python のランタイム ID。2026年10月時点では python311〜python314 がサポート中
instance_class インスタンスの大きさ。自動スケーリングでは F1(既定)・F2・F4・F4_1G から選ぶ
target_cpu_utilization この CPU 使用率を目安にインスタンスを増やす。0.5〜0.95 で指定し、既定は 0.6
min_instances 常に起動しておくインスタンス数。0 にするとアクセスがないときは0台になる
max_instances インスタンス数の上限。費用の上限を抑える目安になる

python39 と python310 はサポート期間が終わっています(python39 は2026年10月1日に非推奨)。新しく作るアプリでは、サポート中のランタイムを選んでください。各ランタイムのサポート期限は公式の「ランタイムのサポート スケジュール」で確認できます。

min_instances を1以上にすると、アクセスがなくてもインスタンスが起動したままになり、その分の料金がかかります。最初は0で始め、起動の遅さが気になる場合に増やします。

ローカルで動作を確かめる

デプロイ前に手元で動かしておくと、エラーの切り分けが楽になります。

cd myapp
python3 -m venv .venv
. .venv/bin/activate
pip install -r requirements.txt
python main.py

ブラウザーで http://localhost:8080 を開き、「Hello, App Engine!」が表示されれば準備完了です。.venv のような手元専用のファイルは、.gcloudignore に書いておくとアップロードされません。

.venv/
__pycache__/
.git/

デプロイする

app.yaml のあるディレクトリーで実行します。

gcloud app deploy

アップロードするファイルと公開先の URL が表示され、確認を求められるので Y を入力します。初回はビルド用の API の有効化を求められることがあり、その場合も画面の案内に従います。

完了したら、公開された URL をブラウザーで開きます。

gcloud app browse

URL は https://プロジェクトID.リージョンID.r.appspot.com の形式です。

よく使うオプションは次のとおりです。

オプション 用途
--version=v2 バージョン名を指定する(省略すると日時から自動で付く)
--no-promote 新しいバージョンをデプロイだけして、トラフィックは切り替えない
--project=my-project-id 設定とは別のプロジェクトにデプロイする
--quiet 確認の質問をせずに進める(CI などで使う)

ログを確認する

# default サービスのログをリアルタイムで表示する
gcloud app logs tail -s default

# エラー以上のログだけを表示する
gcloud app logs tail -s default --level=error

502 や 500 が返るときは、まずここに Python の例外(トレースバック)が出ていないかを確認します。よくある原因は次のとおりです。

  • requirements.txt に必要なライブラリが書かれていない
  • main.py が無い、または WSGI オブジェクトの名前が app ではない(その場合は entrypoint を指定する)
  • entrypoint を自分で書いたのに、ポートを環境変数 PORT で受けていない

ログは Google Cloud コンソールの「ログ エクスプローラ」でも検索できます。

バージョンを確認して切り戻す

App Engine はデプロイごとにバージョンを残します。新しいバージョンに問題があれば、前のバージョンにトラフィックを戻せます。

# バージョンの一覧(TRAFFIC_SPLIT が 1.00 のものが公開中)
gcloud app versions list

# 前のバージョンにすべてのトラフィックを戻す
gcloud app services set-traffic default --splits=20261029t120000=1

# 使わなくなったバージョンを削除する
gcloud app versions delete 20261028t090000

バージョン名(例の 20261029t120000)は gcloud app versions list の表示に合わせて置き換えてください。--no-promote でデプロイしておき、動作を確かめてから set-traffic で切り替えると、公開中のサイトを止めずに入れ替えられます。

注意点

  • リージョンは後から変更できません。作成前に決めておきます。
  • 料金はインスタンスの稼働時間で決まります。max_instances で上限を決め、Google Cloud の予算アラートも設定しておくと、想定外の請求に気付きやすくなります。
  • パスワードや API キーは app.yaml やコードに直接書かず、Secret Manager などに置きます。
  • 独自ドメインや HTTPS の設定は、Google Cloud コンソールの App Engine の「設定」から行えます。

まとめ

  • google-cloud-cli と google-cloud-cli-app-engine-python を入れ、gcloud auth login と gcloud config set project で準備する
  • gcloud app create --region=... でアプリを作る。リージョンは後から変えられない
  • main.py(WSGI オブジェクト app)・requirements.txt・app.yaml(サポート中の runtime)を用意する
  • gcloud app deploy でデプロイし、gcloud app logs tail でログを見る
  • 問題があれば gcloud app services set-traffic で前のバージョンに戻す

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲