App Engine スタートガイド(Python 3)

1. 概要

befa7a877ccdd35d.png

Google App Engine アプリケーションは作成や管理が簡単で、トラフィックやデータ ストレージの需要の変動に合わせて容易にスケーリングできます。App Engine 環境では、サーバーを管理する手間がかかりません。必要な作業は、アプリケーションをアップロードすることだけです。

この Codelab では、Flask ウェブ フレームワークで作成されたシンプルな Python ウェブアプリをデプロイする方法を学びます。このサンプルでは Flask を使用していますが、DjangoPyramidBottleweb.py などの他のウェブ フレームワークも使用できます。

このチュートリアルは、https://cloud.google.com/appengine/docs/standard/python3/quickstart を基に作成されています。

学習内容

  • Google App Engine で簡単な Python サーバーを作成する方法。
  • サーバーをダウンさせずにコードを更新する。

必要なもの

  • Python の使用経験
  • Linux の標準的なテキスト エディタ(vim、emacs、nano など)を使い慣れていること

アンケート

このチュートリアルをどのように使用されますか?

通読のみ 通読して演習を行う

Python のご利用経験はどの程度ありますか?

初心者 中級者 上級者

Google Cloud サービスの使用経験はどの程度ありますか?

初心者 中級者 上級者

2. 設定と要件

セルフペース型の環境設定

  1. Google Cloud Console にログインして、プロジェクトを新規作成するか、既存のプロジェクトを再利用します。Gmail アカウントも Google Workspace アカウントもまだお持ちでない場合は、アカウントを作成してください。

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • プロジェクト名は、このプロジェクトの参加者に表示される名称です。Google API では使用されない文字列です。いつでも更新できます。
  • プロジェクト ID は、すべての Google Cloud プロジェクトにおいて一意でなければならず、不変です(設定後は変更できません)。Cloud コンソールでは一意の文字列が自動生成されます。通常は、この内容を意識する必要はありません。ほとんどの Codelab では、プロジェクト ID(通常は PROJECT_ID と識別されます)を参照する必要があります。生成された ID が好みではない場合は、ランダムに別の ID を生成できます。または、ご自身で試して、利用可能かどうかを確認することもできます。このステップ以降は変更できず、プロジェクトを通して同じ ID になります。
  • なお、3 つ目の値として、一部の API が使用するプロジェクト番号があります。これら 3 つの値について詳しくは、こちらのドキュメントをご覧ください。
  1. 次に、Cloud のリソースや API を使用するために、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。

Cloud Shell の起動

Google Cloud はノートパソコンからリモートで操作できますが、この Codelab では、Cloud Shell(Cloud 上で動作するコマンドライン環境)を使用します。

Cloud Shell をアクティブにする

  1. Cloud Console で、[Cloud Shell をアクティブにする] 853e55310c205094.png をクリックします。

3c1dabeca90e44e5.png

Cloud Shell を初めて起動する場合は、その内容を説明する中間画面が表示されます。中間画面が表示された場合は、[続行] をクリックします。

9c92662c6a846a5c.png

すぐにプロビジョニングが実行され、Cloud Shell に接続されます。

9f0e51b578fecce5.png

この仮想マシンには、必要な開発ツールがすべて用意されています。仮想マシンは Google Cloud で稼働し、永続的なホーム ディレクトリが 5 GB 用意されているため、ネットワークのパフォーマンスと認証が大幅に向上しています。このコードラボで行う作業のほとんどはブラウザから実行できます。

Cloud Shell に接続すると、認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されていることがわかります。

  1. 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`
  1. 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 エディタ ボタンをクリックしてファイルを編集します。

10af7b1a6240e9f4.gif

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:

デプロイを開始することを確認します。

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 ウェブ アプリケーションを作成する方法を学習しました。

詳細

ライセンス

この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。