App Engine フレキシブル環境における Python のクイックスタート

このクイックスタートでは、短いメッセージを表示する小さな App Engine アプリケーションを作成する方法について説明します。

始める前に

このサンプルを実行してデプロイする前に、次の手順を行います。

  1. GCP Console を使用して新しい GCP プロジェクトを作成し、App Engine アプリケーションを作成して課金を有効にします。
    App Engine に移動

    プロンプトが表示されたら、App Engine アプリケーションを配置するリージョンを選択し、課金を有効にします。

  2. 次の前提条件をローカルにインストールします。
    1. git をダウンロードしてインストールします
    2. Python 開発用に環境を準備します
    3. Google Cloud SDK をダウンロードし、インストールしてから、gcloud ツールを初期化します。
      SDK をダウンロード
  3. 別の方法: git と Cloud SDK がインストールされていれば Google Cloud Shell もインストールされており、これを言語サポートやコードエディタなどの他の多くの機能と組み合わせて使用することができます。

    Google Cloud Shell が起動されたら、このチュートリアルの残りの部分に進んで、Cloud Shell 内でコマンドを実行することができます。

App Engine のロケーション

App Engine はリージョナルです。つまり、アプリを実行するインフラストラクチャは特定のリージョンに配置され、そのリージョン内のすべてのゾーンで冗長的に利用できるように Google によって管理されます。

レイテンシ、可用性、耐久性の要件を満たすことが、アプリを実行するリージョンを選択する際の主な要素になります。一般に、アプリのユーザーに最も近いリージョンを選択できますが、アプリで使用されている他の GCP プロダクトやサービスのロケーションを考慮する必要があります。使用するサービスが複数のロケーションにまたがっていると、アプリのレイテンシだけでなく、料金にも影響します。

App Engine は次のリージョンで利用できます。

  • northamerica-northeast1(モントリオール)
  • us-central(アイオワ)
  • us-east1(サウスカロライナ)
  • us-east4(バージニア北部)
  • southamerica-east1(サンパウロ)*
  • europe-west(ベルギー)
  • europe-west2(ロンドン)
  • europe-west3(フランクフルト)
  • asia-northeast1(東京)
  • asia-south1(ムンバイ)
  • australia-southeast1(シドニー)

* サンパウロ リージョンをご利用のお客様には、すべてのリージョナル プロダクト SLA が引き続き有効です。ただし、北米と南米を対象とするマルチリージョン機能およびクロスリージョン機能は、可用性またはパフォーマンスが一時的に低下する可能性があります。

アプリのリージョンを設定した後で変更することはできません。

App Engine アプリケーションをすでに作成している場合は、gcloud app describe コマンドを実行するか、GCP Console の App Engine ダッシュボードを開くことで、リージョンを表示できます。App Engine アプリケーションのリージョンは http://[YOUR_PROJECT_ID].appspot.com に表示されます。

このクイックスタートでは、Flask フレームワークで書かれ、App Engine にデプロイ可能なシンプルな Python アプリケーションのデモを行います。このサンプルでは Flask を使用しますが、上記の要件を満たす他のフレームワークも使用可能です。代わりに使用できる他のフレームワークとして、DjangoPyramidBottleweb.pyTornado などがあります。Django を使用するサンプルの詳細については、App Engine フレキシブル環境での Django の実行を参照してください。

Hello World アプリをダウンロードする

Python 用のシンプルな Hello World アプリが用意されています。これを使用することで、App Engine フレキシブル環境へのアプリのデプロイをすぐに試すことができます。次の手順で、コマンドラインから Hello World アプリをローカルマシンにダウンロードします。

サンプルアプリをダウンロードし、アプリのディレクトリに移動するには:

  1. 次のように、Hello World サンプルアプリ レポジトリのクローンをローカルマシンに作成します。

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples
    

    あるいは、zip 形式のサンプルをダウンロードして、ファイルを抽出することもできます。

  2. サンプルコードが入っているディレクトリに移動します。

    cd python-docs-samples/appengine/flexible/hello_world
    

ローカルマシン上で Hello World を実行する

Mac OS / Linux

ローカルのパソコン上で Hello World アプリを実行するには:

  1. virtualenv がない場合は、pip を使ってインストールします。

    sudo pip install virtualenv
    
  2. 孤立した Python 環境を作成し、依存関係をインストールします。

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    
  3. アプリケーションを実行します。

    python main.py
    
  4. ウェブブラウザに次のアドレスを入力します。

    http://localhost:8080
    

Windows

Google Cloud SDK がインストール済みであれば、通常、C:\python27_x64\(64 ビットシステムの場合)に Python 2.7 がすでにインストールされているはずです。ここでは、Powershell を使用して Python パッケージのインストールを呼び出します。

  1. まだインストールされていなければ、Powershell 3.0 以降をインストールします。

  2. Powershell へのショートカットを右クリックし、管理者として Powershell を起動します。

  3. python コマンドを実行してみます。見つからない場合は、環境の PATH に Python を追加します。

    $env:Path += ";C:\python27_x64\"
    
  4. Python 用の pip パッケージ マネージャをインストールし、次のステップで Hello World の依存関係がシステム全体にインストールされないように、virtualenv を使って切り離された Python 環境を作成します。

    iwr https://bootstrap.pypa.io/get-pip.py -OutFile get-pip.py
    python get-pip.py
    python -m pip install virtualenv
    python -m virtualenv env
    
  5. ダウンロードされた署名付きスクリプトに実行権限を付与することによって切り離された Python 環境を有効にし、Hello World の要件をインストールします。

    Set-ExecutionPolicy RemoteSigned
    .\env\Scripts\activate
    python -m pip install -r requirements.txt
    
  6. 最後に、http://localhost:8080 でアプリケーションを実行し、Hello World を表示します。

    python main.py
    

サンプルアプリから「Hello World」というメッセージがページに表示されます。

ターミナル ウィンドウで Ctrl+C キーを押してウェブサーバーを終了します。

Hello World を App Engine にデプロイして実行する

App Engine フレキシブル環境にアプリをデプロイするには:

  1. hello_world ディレクトリで次のコマンドを実行し、Hello World アプリをデプロイします。
    gcloud app deploy
    詳細については、オプションのフラグをご覧ください。

    一般的な gcloud コマンドフラグ

    • アプリのバージョンを一意に識別する ID を指定するには --version フラグを含めます。これを含めない場合、自動的に生成されます。例: --version [YOUR_VERSION_ID]
    • gcloud ツールでデフォルトとして初期設定したものに代わる GCP プロジェクト ID を指定するには、--project フラグを含めます。例: --project [YOUR_PROJECT_ID]

    例:

    gcloud app deploy --version pre-prod-5 --project my-sample-app

    コマンドラインからアプリをデプロイする方法については、アプリのテストとデプロイをご覧ください。すべてのコマンドフラグのリストについては、gcloud app deploy リファレンスをご覧ください。

  2. 次のコマンドを実行してブラウザを起動し、http://YOUR_PROJECT_ID.appspot.com でアプリを表示します。
    gcloud app browse
今回の Hello World メッセージが表示されるページは、App Engine インスタンスで実行されているウェブサーバーから配信されます。

これで完了です。 最初の Python アプリが App Engine フレキシブル環境にデプロイされました。

クリーンアップの詳細については、以下の説明をご覧ください。また、活用できる次のステップへのリンクも併せてご覧ください。

クリーンアップ

課金されないようにするには、GCP プロジェクトを削除してプロジェクト内のすべてのリソースへの課金を停止します。

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[プロジェクトの削除] をクリックします。 プロジェクト名の横にあるチェックボックスを選択し、[プロジェクトの削除] をクリックする
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ

プラットフォーム全体について学ぶ

App Engine アプリの開発とデプロイの概要を理解した後は、Google Cloud Platform の残りの部分についても学習しましょう。すでに Google Cloud SDK がインストールされているので、Google Cloud SQL、Google Cloud Storage、Google Cloud Datastore といったプロダクトを操作するツールを使用できます。App Engine だけでなくプラットフォーム全体を使用するアプリケーションの作成方法を学ぶチュートリアルについては、Bookshelf アプリの作成に関するクイックスタートをご覧ください。

App Engine フレキシブル環境について学習する

App Engine についてさらに理解を深めるためのトピックをご紹介します。

Hello World コードレビュー

Hello World は、1 つのサービスのみが含まれ、1 つのバージョンのみが存在し、すべてのコードがアプリのルート ディレクトリに存在する、最もシンプルな App Engine アプリです。このセクションでは、このアプリの各ファイルを詳細に説明します。

main.py

Hello World アプリは 1 つのファイルのみからなる基礎的な Flask アプリです。

import logging

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    return 'Hello World!'

@app.errorhandler(500)
def server_error(e):
    logging.exception('An error occurred during a request.')
    return """
    An internal error occurred: <pre>{}</pre>
    See logs for full stacktrace.
    """.format(e), 500

if __name__ == '__main__':
    # This is used when running locally. Gunicorn is used to run the
    # application on Google App Engine. See entrypoint in app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)

app.yaml

app.yaml ファイルでは、アプリケーションのデプロイ設定を記述しています。

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/python/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

app.yaml では、このアプリで使用するランタイムを指定します。また、env: flex を設定することで、このアプリがフレキシブル環境を使用することを指定します。

entrypoint は、App Engine にアプリの起動方法を指示します。このアプリは、gunicorn を使用して Python アプリケーションを実行します。$PORT 変数は、App Engine によりアプリの起動時に設定されます。entrypoint の詳細については、アプリケーションの起動をご覧ください。

さらに、オプションの runtime_config セクションで、Python 3 を使用するように python_version を設定します。python_version が指定されない場合、デフォルトで Python 2 が使用されます。また、python_version: 2 を明示的に指定することもできます。

requirements.txt

requirements.txt と Python パッケージ マネージャ pip を使用して、アプリケーションの依存関係を宣言し、インストールします。Hello World には、ウェブ フレームワークの Flask と WSGI サーバーの Gunicorn が必要です。

Flask==0.12.2
gunicorn==19.7.1

requirements.txt では、ローカルにインストールされ、App Engine へのデプロイ時にもインストールされるライブラリが定義されます。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python 用 App Engine フレキシブル環境に関するドキュメント