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 の公式ドキュメントに基づいています。
全体の流れ
- gcloud CLI をインストールしてログインする
- プロジェクトを用意し、App Engine のアプリを作成する(リージョンを決める)
- アプリのファイル(
main.py・requirements.txt・app.yaml)を用意する gcloud app deployでデプロイする- ログを確認し、必要ならバージョンを切り戻す
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で前のバージョンに戻す
関連記事: