1. 概要
Google App Engine アプリケーションは作成や管理が簡単で、トラフィックやデータ ストレージの需要の変動に合わせて容易にスケーリングできます。App Engine 環境では、サーバーを管理する手間がかかりません。必要な作業は、アプリケーションをアップロードすることだけです。
この Codelab では、Flask ウェブ フレームワークを使用して記述されたシンプルな Python ウェブアプリをデプロイする方法を学びます。このサンプルでは Flask を使用しますが、Django、Pyramid、Bottle、web.py など、他のウェブ フレームワークも使用できます。
このチュートリアルは、https://cloud.google.com/appengine/docs/standard/python3/quickstart から編集されています。
学習内容
- Google App Engine で簡単な Python サーバーを作成する方法
- サーバーをダウンさせずにコードを更新する。
必要なもの
- Python の使用経験
- Linux の標準的なテキスト エディタ(vim、emacs、nano など)を使い慣れていること
アンケート
このチュートリアルをどのように使用されますか?
Python のご利用経験はどの程度ありますか?
Google Cloud サービスの利用経験をどのように評価されますか。
<ph type="x-smartling-placeholder">2. 設定と要件
セルフペース型の環境設定
- Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。
- プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
- プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は
PROJECT_ID
と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。 - なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
- 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
Cloud Shell の起動
Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では Cloud 上で動作するコマンドライン環境である Cloud Shell を使用します。
Cloud Shell をアクティブにする
- Cloud Console で、[Cloud Shell をアクティブにする] をクリックします。
Cloud Shell を初めて起動する場合は、内容を説明する中間画面が表示されます。中間画面が表示されたら、[続行] をクリックします。
Cloud Shell のプロビジョニングと接続に少し時間がかかる程度です。
この仮想マシンには、必要なすべての開発ツールが読み込まれます。5 GB の永続的なホーム ディレクトリが用意されており、Google Cloud で稼働するため、ネットワークのパフォーマンスと認証が大幅に向上しています。この Codelab での作業のほとんどはブラウザを使って行うことができます。
Cloud Shell に接続すると、認証が完了し、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。
- Cloud Shell で次のコマンドを実行して、認証されたことを確認します。
gcloud auth list
コマンド出力
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
コマンド出力
[core] project = <PROJECT_ID>
上記のようになっていない場合は、次のコマンドで設定できます。
gcloud config set project <PROJECT_ID>
コマンド出力
Updated property [core/project].
3. ウェブアプリを作成する
Cloud Shell が起動したら、コマンドラインを使用して、Cloud SDK の gcloud
コマンドを呼び出すか、仮想マシン インスタンスで利用可能なその他のツールを呼び出すことができます。永続ディスク ストレージの $HOME
ディレクトリを使用して、複数のプロジェクトや Cloud Shell セッション間でファイルを保存できます。$HOME
ディレクトリは非公開であり、他のユーザーはアクセスできません。
まず、$HOME
ディレクトリにアプリケーション用の新しいフォルダを作成します。
mkdir ~/helloworld cd ~/helloworld
main.py
という名前のファイルを作成します。
touch main.py
お好みのコマンドライン エディタ(nano、vim、emacs)を使用するか、Cloud Shell エディタ ボタンをクリックして、ファイルを編集します。
Cloud Shell エディタでファイルを直接編集するには、次のコマンドを使用します。
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
return "Hello World!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
4. 依存関係を定義する
ウェブアプリの依存関係を指定するには、ターミナルに戻り、使用する Flask の正確なバージョンを使用して、プロジェクトのルート ディレクトリに requirements.txt
ファイルを作成します。
touch requirements.txt
Cloud Shell エディタでファイルを編集するには、次のコマンドを使用します。
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/Flask
Flask==3.0.2
5. デプロイを構成する
ウェブアプリを App Engine にデプロイするには、app.yaml
ファイルが必要です。この構成ファイルでは、App Engine 用のウェブアプリの設定を定義します。
ターミナルで、プロジェクトのルート ディレクトリに app.yaml
ファイルを作成して編集します。
touch app.yaml
Cloud Shell エディタでファイルを編集するには、次のコマンドを使用します。
cloudshell edit app.yaml
app.yaml
runtime: python312
6. ウェブアプリをデプロイする
ターミナルで、ディレクトリの内容を確認します。
ls
次の 3 つのファイルが必要です。
app.yaml main.py requirements.txt
次のコマンドを使用してウェブアプリをデプロイします。
gcloud app deploy
初回は、デプロイ リージョンを選択する必要があります。
Please choose the region where you want your App Engine application located: [1] asia-east2 ... [7] australia-southeast1 [8] europe-west [9] europe-west2 ... [12] northamerica-northeast1 [13] southamerica-east1 ... [19] us-west4 ... Please enter your numeric choice:
Deployment を起動することを確認します。
Creating App Engine application in project [PROJECT_ID] and region [REGION]....done. Services to deploy: descriptor: [~/helloworld/app.yaml] source: [~/helloworld] target project: [PROJECT_ID] target service: [default] target version: [YYYYMMDDtHHMMSS] target url: [https://PROJECT_ID.REGION_ID.r.appspot.com] Do you want to continue (Y/n)?
アプリがデプロイされます。
Beginning deployment of service [default]... Created .gcloudignore file. See `gcloud topic gcloudignore` for details. Uploading 3 files to Google Cloud Storage 100% File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
これで、ウェブアプリが https://PROJECT_ID.REGION_ID.r.appspot.com
の HTTP リクエストに応答できるようになりました。
7. ウェブアプリをテストする
ウェブアプリは、https://PROJECT_ID.REGION_ID.r.appspot.com
の HTTP リクエストに応答する準備が整いました。
まず、gcloud app describe
コマンドを使用してウェブアプリのホスト名を取得します。
APPENGINE_HOSTNAME=$(gcloud app describe --format "value(defaultHostname)")
次のシンプルな HTTP GET リクエストを使用してウェブアプリをテストします。
curl https://$APPENGINE_HOSTNAME
次の結果が表示されます。
Hello World!
概要
これまでのステップでは、シンプルな Python ウェブアプリを設定し、そのアプリケーションを App Engine で実行してデプロイしました。
8. ウェブアプリを更新する
main.py
ファイルの hello()
関数本文を変更して、ウェブアプリを変更します。
Cloud Shell エディタでファイルを編集するには、次のコマンドを使用します。
cloudshell edit main.py
main.py
import flask
# If `entrypoint` is not defined in app.yaml, App Engine will look for an app
# called `app` in `main.py`.
app = flask.Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
# return "Hello World!\n" # ← Replace this line
who = flask.request.args.get("who", "World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Used when running locally only. When deploying to Google App
# Engine, a webserver process such as Gunicorn will serve the app. This
# can be configured by adding an `entrypoint` to app.yaml.
app.run(host="localhost", port=8080, debug=True)
ターミナルから再デプロイしてウェブアプリを更新します。
gcloud app deploy --quiet
アプリの新しいバージョンがデプロイされます。
Beginning deployment of service [default]... Uploading 1 file to Google Cloud Storage ... Deployed service [default] to [https://PROJECT_ID.REGION_ID.r.appspot.com]
前回とまったく同じように、新しいバージョンのウェブアプリをテストします。
curl https://$APPENGINE_HOSTNAME
同じ結果になるはずです。
Hello World!
省略可能なパラメータを使用してテストします。
curl https://$APPENGINE_HOSTNAME?who=Universe
次の結果が表示されます。
Hello Universe!
概要
このステップでは、サービスを中断することなくウェブアプリを更新して再デプロイしました。
9. 完了
Python で最初の App Engine ウェブ アプリケーションを記述する方法を学びました。
詳細
- App Engine ドキュメント: https://cloud.google.com/appengine
- App Engine で本格的な Python アプリを作成するには、https://cloud.google.com/appengine/docs/standard/python3/building-app のチュートリアルをご覧ください。
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。