このチュートリアルでは、Cloud Deployment Manager を使用して Python Bookshelf サンプルアプリをデプロイする方法を説明します。
Deployment Manager を使用することで、宣言的で反復可能なプロセスを通して、デプロイに必要な Google Cloud のリソースをワンステップで作成できます。Deployment Manager では、デプロイの更新と時系列による変更の追跡が可能です。Jinja や Python を使用してテンプレートを作成し、パラメータ化できるため、類似のデプロイでテンプレートを共有できます。
目標
- Bookshelf サンプルアプリのクローンを作成し、構成する。
- Deployment Manager の構成とテンプレートを作成する。
- Deployment Manager のデプロイを作成する。
- Deployment Manager を使用して、Bookshelf サンプルアプリをデプロイする。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Python、
pip
、virtualenv
をシステムにインストールします。手順については、Google Cloud 用の Python 開発環境の設定をご覧ください。
Cloud Storage バケットの作成
以下では、Cloud Storage バケットの作成方法を詳しく説明します。バケットとは、Cloud Storage 内でデータを保持する基本のコンテナです。
ターミナル ウィンドウで Cloud Storage バケットを作成します。ここで、YOUR_BUCKET_NAME はバケットの名前を表します。
gsutil mb gs://YOUR_BUCKET_NAME
Bookshelf アプリでアップロードした画像を表示するには、バケットのデフォルトのアクセス制御リスト(ACL)を
public-read
に設定します。gsutil defacl set public-read gs://YOUR_BUCKET_NAME
サンプルアプリのクローン作成
サンプルアプリは GitHub の GoogleCloudPlatform/getting-started-python
で入手できます。
リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/getting-started-python.git -b steps
サンプル ディレクトリに移動します。
cd getting-started-python/7-gce
アプリの構成
config.py
を編集用に開きます。PROJECT_ID
の値をプロジェクト ID に設定します。値
CLOUD_STORAGE_BUCKET
を Cloud Storage バケットの名前に設定します。
config.py
を保存して閉じます。
ローカル パソコン上でのアプリの実行
隔離された Python 環境を作成し、依存関係をインストールします。
Linux / MacOS
virtualenv -p python3 env source env/bin/activate pip install -r requirements.txt
Windows
virtualenv -p python3 env env\scripts\activate pip install -r requirements.txt
アプリケーションを実行します。
python main.py
ブラウザに次のアドレスを入力します。
ローカル ウェブサーバーを停止するには、Ctrl+C キーを押します。 仮想環境を終了する場合は、「deactivate
」と入力します。
サンプルアプリのデプロイ
コードをリポジトリに push する
コードを実行中の Compute Engine インスタンスに取得するにはいくつかの方法があります。そのうちの 1 つは、Cloud Source Repositories を使用するという方法です。 Compute Engine インスタンスに使用可能なすべてのプロジェクトには、Git リポジトリが含まれています。インスタンスは、起動時に最新バージョンのアプリのコードを pull します。Git リポジトリを使用すると、アプリの更新時に新しいイメージやインスタンスを構成する必要がないため便利です。既存のインスタンスを再起動するか、インスタンスを作成するだけで済みます。
Git を初めて使用する場合は、
git config --global
を使用して自分の ID を設定します。Cloud Console でリポジトリを作成します。
アプリのコードをプロジェクトのリポジトリに push します。
[YOUR_PROJECT_ID]
はプロジェクト ID、[YOUR_REPO]
リポジトリの名前です。git commit -am "Updating configuration" git config credential.helper gcloud.sh git remote add cloud https://source.developers.google.com/p/[YOUR_PROJECT_ID]/r/[YOUR_REPO] git push cloud master
デプロイの作成
構成がコミットされ、コードが Cloud Source Repositories にアップロードされると、Deployment Manager を使用してデプロイを作成できます。
deployment_manager
ディレクトリに移動します。cd getting-started-python/7-gce/gce/deployment_manager
デプロイを作成します。
gcloud deployment-manager deployments create my-deployment --config config.yaml
すべてのデプロイのリストを表示します。
gcloud deployment-manager deployments list
デプロイと作成されたリソースの説明を取得します。
gcloud deployment-manager deployments describe my-deployment
アプリの表示
転送ルールを作成した後、構成が反映され、トラフィックがインスタンスにルーティングされるまでには数分かかる場合があります。
進行状況を確認するには、次のコマンドを実行します。
gcloud compute backend-services get-health bookshelf-my-deployment-frontend --global
少なくとも 1 つのインスタンスで
HEALTHY
が報告されたら、ロードバランサの転送 IP アドレスを取得します。gcloud compute forwarding-rules list --global
転送ルールの IP アドレスは
IP_ADDRESS
列に表示されます。ブラウザで、リストから取得した IP アドレスを入力します。
アプリが Google Cloud で実行されるようになりました。
コードについて
デプロイの構成
デプロイがどのように構成されているかは、config.yaml
で確認できます。
この構成ファイルでは、テンプレート ファイルをリソースとして読み込み、bookshelf
という名前のリソースの定義に使用します。テンプレートはパラメータとして複数のプロパティを持っています。Deployment Manager 構成ファイルの作成に関する詳細については、構成の作成をご覧ください。
デプロイ テンプレートのスキーマの構成
スキーマ ファイル bookshelf.jinja.schema
を確認します。これは、デプロイがその構成ファイルに提供するパラメータを定義し、ドキュメント化します。構成スキーマの詳細については、スキーマの使用をご覧ください。
デプロイ テンプレートの構成
テンプレートは複数のリソースを定義し、自動スケーリングされ、負荷分散されたマネージド インスタンス グループを作成します。作成されたリソースの完全な説明については、テンプレート内の Compute Engine の Bookshelf チュートリアルをご覧ください。
Deployment Manager ではクラウド リソースを宣言型の方法で定義できますが、リソースの構成の大部分はそのリソースの API によって定義されます。たとえば、インスタンス テンプレート リソースの構成オプションのほとんどは、Compute Engine API のリファレンス ドキュメント内にあるインスタンス テンプレートのリソース定義で確認できます。
テンプレートは、Jinja テンプレート言語を使用して作成します。Deployment Manager のテンプレート作成時には、Jinja または Python を使用できます。Jinja にはより宣言的であるという利点があるため、Python より読みやすく、理解しやすいとされています。一部の複雑なデプロイについては、Python の完全な表現力により簡略化できる場合があります。この場合、必要なリソースの作成には Jinja で十分です。
テンプレート内では、特定の環境変数が自動的に設定されます。これらには、env
ディクショナリを使用してアクセスできます。この場合、作成されたリソースに名前を割り当てるときに再利用する名前としてデプロイの名前が参照されます。使用可能な環境変数については、Deployment Manager のドキュメントの環境変数の使用をご覧ください。
テンプレートは、Compute Engine チュートリアルで使用されるのと同じ起動スクリプトを使用します。スクリプトのコンテンツがテンプレートに挿入され、Jinja インデント ディレクティブによりコンテンツが正しくインデントされます。
Deployment Manager Jinja テンプレートでは、テンプレートの他の場所で作成されたリソースを参照することもできます。次の例では、バックエンド サービスはマネージド インスタンス グループのリファレンスを使用して、参照先のインスタンス グループを取得します。
config.yaml
で指定されたプロパティはテンプレートで使用できます。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
デプロイを削除する
デプロイを削除するには、次のコマンドを入力します。このコマンドを実行すると、デプロイに関連付けられたロードバランサと Compute Engine インスタンスが削除されます。
gcloud deployment-manager deployments delete my-deployment
次のステップ
Deployment Manager テンプレートの定義の詳細を確認する。
Google Kubernetes Engine で Python Bookshelf サンプルアプリを実行する方法を学ぶ。
Google Cloud に関するリファレンス アーキテクチャ、図、チュートリアル、ベスト プラクティスを確認する。Cloud Architecture Center を確認する。
その他の Google Cloud サービスを検索します。