arrow_back

アプリ開発 - App Engine フレキシブル環境へのアプリケーションのデプロイ: Python

ログイン 参加
700 以上のラボとコースにアクセス

アプリ開発 - App Engine フレキシブル環境へのアプリケーションのデプロイ: Python

ラボ 2時間 universal_currency_alt クレジット: 5 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

概要

App Engine アプリケーションは、1 つ以上のサービスを持つ単一のアプリケーション リソースです。各サービスは、それぞれ異なるランタイムを使用したり、異なるパフォーマンス設定で動作したりするように構成できます。各サービスでは、そのサービスの複数のバージョンをデプロイし、構成したトラフィック処理量に応じて 1 つ以上のインスタンスでサービスを実行できます。詳しくは、App Engine の概要をご覧ください。

App Engine では、スタンダード環境またはフレキシブル環境を使用します。スタンダード環境ではサンドボックスでインスタンスが実行され、利用可能な CPU のオプションやディスクへのアクセスに制限があります。

一方、フレキシブル環境では、Google Compute Engine 仮想マシン(VM)上の Docker コンテナでアプリケーションが実行されるため、制限は少なくなります。たとえば、任意のプログラミング言語やライブラリを使用したり、ディスクに書き込んだりできるほか、複数のプロセスを実行することも可能です。また、インスタンスに使用する Compute Engine のマシンタイプを選択することもできます。 App Engine 環境について詳しくは、App Engine スタンダード環境App Engine フレキシブル環境をご覧ください。

このラボでは、App Engine フレキシブル環境にクイズ アプリケーションをデプロイし、バージョンやトラフィック分割などの App Engine の機能を使用します。

目標

このラボでは、次のタスクの実行方法について学びます。

  • app.yaml ファイルを作成して、アプリケーション用の App Engine フレキシブル環境の要件を記述する。

  • App Engine フレキシブル環境にクイズ アプリケーションをデプロイする。

  • バージョンとトラフィック分割を使用して、アプリケーションの機能の A/B テストを行う。

設定と要件

各ラボでは、新しい Google Cloud プロジェクトとリソースセットを一定時間無料で利用できます。

  1. Qwiklabs にシークレット ウィンドウでログインします。

  2. ラボのアクセス時間(例: 1:15:00)に注意し、時間内に完了できるようにしてください。
    一時停止機能はありません。必要な場合はやり直せますが、最初からになります。

  3. 準備ができたら、[ラボを開始] をクリックします。

  4. ラボの認証情報(ユーザー名パスワード)をメモしておきます。この情報は、Google Cloud Console にログインする際に使用します。

  5. [Google Console を開く] をクリックします。

  6. [別のアカウントを使用] をクリックし、このラボの認証情報をコピーしてプロンプトに貼り付けます。
    他の認証情報を使用すると、エラーが発生したり、料金の請求が発生したりします。

  7. 利用規約に同意し、再設定用のリソースページをスキップします。

Google Cloud Shell の有効化

Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。 Google Cloud Shell は、GCP リソースへのコマンドライン アクセスを提供します。

  1. GCP Console の右上のツールバーにある、「Cloud Shell をアクティブにする」ボタンをクリックします。

    Cloud Shell アイコン

  2. Continue をクリックします。

    cloudshell_continue

環境がプロビジョニングされ、接続されるまでしばらく待ちます。接続した時点で認証が完了しており、プロジェクトに各自のプロジェクト ID が設定されます。以下に例を示します。

Cloud Shell ターミナル

gcloud は Google Cloud Platform のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

次のコマンドを使用すると、有効なアカウント名を一覧表示できます。

gcloud auth list

出力:

Credentialed accounts:
 - <アカウント名>@<ドメイン名>.com(有効)

出力例:

Credentialed accounts:
 - google1623327_student@qwiklabs.net

次のコマンドを使用すると、プロジェクト ID を一覧表示できます。

gcloud config list project

出力:

[core]
project = <プロジェクト ID>

出力例:

[core]
project = qwiklabs-gcp-44776a13dea667a6

ケーススタディ用アプリケーションを準備する

このセクションでは、Cloud Shell にアクセスしてクイズ アプリケーションを含む Git リポジトリのクローンを作成してから、環境変数を設定してアプリケーションを実行します。

Cloud Shell でソースコードのクローンを作成する

  1. クラス用にリポジトリのクローンを作成します。

git clone https://github.com/GoogleCloudPlatform/training-data-analyst
  1. 作業ディレクトリへのショートカットとしてソフトリンクを作成します。

ln -s ~/training-data-analyst/courses/developingapps/v1.3/python/appengine ~/appengine

クイズ アプリケーションを構成する

  1. このラボのサンプル ファイルが含まれているディレクトリに移動します。

cd ~/appengine/start
  1. 次のコマンドで実行可能ファイルを実行します。

. prepare_environment.sh 注: OperationError が表示された場合は、警告を無視してコマンドを再実行してください。一部のリソースはすでに存在しているため、ラボを先に進めます。

このスクリプト ファイルを実行すると、以下の処理が行われます。

  • App Engine アプリケーションを作成する。

  • Cloud Storage バケットを作成する。

  • 環境変数 GCLOUD_PROJECT と GCLOUD_BUCKET をエクスポートする。

  • Python 3 対応の隔離された virtualenv Python 環境を作成して有効にする。

  • pip を更新し、pip install -r requirements.txt を実行する。

  • Datastore にエンティティを作成する。

  • IAM ロールとサービス アカウントを作成する。

  • Pub/Sub トピックを作成する。

  • Spanner のインスタンス、データベース、テーブルを作成する。

  • Cloud Functions の関数を作成する。

  • プロジェクト ID を出力する。

コードを確認する

このラボでは、ファイルの閲覧と編集を行います。Cloud Shell にインストールされている shell エディタ(nano や vim)または統合コードエディタ(gcloud)を使用できます。

このセクションでは、Cloud Shell テキスト エディタを使用して、クイズ アプリケーションのコードを確認します。

Cloud Shell エディタを起動する

Cloud Shell で [エディタを開く] をクリックします。

open-editor.png

ブラウザの別のタブで、Cloud Shell と統合コードエディタが起動します。

コードを調べる

/appengine/start に移動します。

クイズ アプリケーションのフォルダ構造には、アプリケーションが App Engine でデプロイされるときの状態が反映されています。たとえば、ウェブ アプリケーションは frontend フォルダにあるため、App Engine の構成ファイルである app.yaml ファイルも frontend フォルダにあります。

App Engine フレキシブル環境でデプロイするためのアプリケーション コードを用意する

フロントエンド用の app.yaml ファイルを作成する

このセクションでは、クイズ アプリケーションのフロントエンドを App Engine フレキシブル環境にデプロイするための構成ファイルを変更します。

  1. Cloud Shell コードエディタで、frontend/app.yaml を開きます。

  2. 2 つの key: value ペアを追加し、スケーリングを手動に設定します。

    runtime: python env: flex manual_scaling: instances: 1
    • 1 つ目のペアで、python ランタイムを使用することを指定します。

    • 2 つ目のペアで、フレキシブル環境を使用することを指定します。

    • インスタンスの数は 1 に設定されます。通常、本番サービスはより多くのインスタンスに拡張できるようにする必要があります。

  3. 3 つ目の構成エントリを追加し、app.yaml ファイルのエントリポイントを指定します。

    entrypoint: "gunicorn -b 0.0.0.0:8080 quiz:app"

この値は、gunicorn HTTP サーバーを使用して Flask アプリケーションを実行するコマンドラインです。

  1. runtime_config を追加します。

runtime_config: python_version: 3
  1. 最後の構成エントリ env_variablesapp.yaml ファイルに追加します。GCLOUD_BUCKET キーを含めます。値として、プロジェクトの -media バケットを指定します。[GCLOUD_PROJECT] の部分は、ラボの左側のペインに表示されている GCP プロジェクト ID に置き換えてください。

env_variables: GCLOUD_BUCKET: "[GCLOUD_PROJECT]-media"
  1. ファイルを保存します。

app.yaml

runtime: python env: flex manual_scaling: instances: 1 entrypoint: gunicorn -b 0.0.0.0:8080 quiz:app runtime_config: python_version: 3 env_variables: GCLOUD_BUCKET: "[GCLOUD_PROJECT]-media"

App Engine フレキシブル環境にフロントエンドをデプロイする

  1. Cloud Shell で、Cloud Build のリクエスト タイムアウトを設定します。

gcloud config set app/cloud_build_timeout 1800
  1. App Engine フレキシブル環境にクイズ アプリケーションをデプロイします。

    gcloud app deploy ./frontend/app.yaml

    Y」と入力して確定します。

    App Engine によってコードが自動的にパッケージ化、コンテナ化され、デプロイされます。

    デプロイが完了するまでに 20 分ほどかかります。

  2. Cloud Platform Console で、ナビゲーション メニュー > [App Engine] をクリックします。

  3. App Engine ダッシュボードの右上で、アプリケーションのリンクをクリックします。

    リンクは https://<プロジェクト ID>.appspot.com のような形式です。

    アプリケーションが表示されます。

    [進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

App Engine フレキシブル環境にフロントエンドをデプロイする

App Engine フレキシブル環境のアプリケーションを更新する

このセクションでは、アプリケーション コードを変更し、アプリケーションを再デプロイします。

クイズ アプリケーションを更新する

  1. Cloud Shell コードエディタで、frontend/quiz/webapp/templates/home.html を開きます。

  2. 最上位の見出しに感嘆符をいくつか追加します。

{% extends 'master.html' %} {% block head %} <title>Quiz - Python</title> {% endblock %} {% block content %} <h1>Welcome to the Quite Interesting Quiz!!!!!!</h1> <div class="jumbotron"> <p>Welcome to the Quite Interesting Quiz where you can create a question, take a test or review feedback</p> </div> <h3 class="col-md-4"> <a href="/questions/add">Create Question</a></h3> <h3 class="col-md-4"> <a href="/client/">Take Test</a></h3> <h3 class="col-md-4"><a href="/leaderboard">Leaderboard</a></h3> {% endblock %}

ここでは、アプリケーション更新の際に行う変更の例として、ごく簡単な変更を加えました。

  1. ファイルを保存します。

更新したアプリケーションをデプロイする

  1. Cloud Shell で、App Engine アプリケーションを再デプロイします。

    gcloud app deploy ./frontend/app.yaml --no-promote \ --no-stop-previous-version

    Y」と入力して確定します。

    コマンドにフラグが 2 つ追加されている点に注意してください。これは、前のバージョンが引き続きトラフィックを受信することを示しています。

    更新したアプリケーションのデプロイが完了するまでに、20 分ほどかかる場合があります。

    [進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。

    更新したアプリケーションをデプロイする

    Console で、ナビゲーション メニュー > [App Engine] > [ダッシュボード] をクリックします。

  2. ウィンドウの右上にあるアプリケーションの URL をクリックします。アプリケーションが古いタイトルのままで表示されます。

  3. [App Engine] ウィンドウで [バージョン] をクリックします。アプリケーションの 2 つのバージョンが表示されない場合は、ページを更新してみてください。

    ce3f927d2d2ab6ed.png

    両方のバージョンのリンクをクリックして、新しいバージョンと古いバージョンのクイズ アプリケーションを表示します。

    新しいバージョン(追加した感嘆符が表示されます):

    5d4414237d6a2193.png

    古いバージョン:

    737770c3d5014496.png

  4. アプリケーションの両方のバージョンのチェックボックスをオンにし、[トラフィックを分割] をクリックします。

    5e05eafcdad27aec.png

    ラジオボタンを選択して、トラフィックが各バージョンにランダムに送られるようにします。

    トラフィックの 50% が古いバージョンに、50% が新しいバージョンに送られるように分割を構成します。

    b479ab269633c349.png

    [保存] をクリックします。

  5. ダッシュボードに戻り、[バージョン] を [すべてのバージョン] に設定し、アプリケーションのリンクをクリックします。

    d197378ef07b5623.png

    アプリケーションの 1 つのバージョンが表示されます。

  6. ホームページを何度か更新します。

古いバージョンと新しいバージョンのホームページが約半々の割合で表示されます。

実際の環境では、まずカナリア リリースで少量のトラフィックを新しいバージョンに送ります。そして、Cookie または IP アドレスを使用して、どちらか一方のバージョンのアプリケーションが一貫してクライアントに表示されるようにするとよいでしょう。

ラボを終了する

ラボが完了したら、[ラボを終了] をクリックします。ラボで使用したリソースが Google Cloud Skills Boost から削除され、アカウントの情報も消去されます。

ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。

星の数は、それぞれ次の評価を表します。

  • 星 1 つ = 非常に不満
  • 星 2 つ = 不満
  • 星 3 つ = どちらともいえない
  • 星 4 つ = 満足
  • 星 5 つ = 非常に満足

フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。

フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。