このチュートリアルでは、Python Bookshelf サンプルアプリ を Cloud Deployment Manager を使用してデプロイする方法を説明します。
Deployment Manager を使用すると、宣言的で反復可能なプロセスを通して、デプロイに必要な Google Cloud リソース をワンステップで作成できます。 Deployment Manager では、デプロイの更新と時系列による変更の追跡が可能です。Jinja や Python を使用してテンプレートを作成し、パラメータ化できるため、類似のデプロイでテンプレートを共有できます。
目標
- Bookshelf サンプルアプリのクローンを作成し、構成する。
- Deployment Manager の構成とテンプレートを作成する。
- Deployment Manager のデプロイを作成する。
- Deployment Manager を使用して、Bookshelf サンプルアプリをデプロイする。
費用
このドキュメントでは、課金対象である次のコンポーネントを使用します。 Google Cloud
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- アカウントにログインします Google Cloud を初めて使用する場合は、 アカウントを作成して、実際のシナリオで Google プロダクトのパフォーマンスを評価してください。 Google Cloud新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Datastore API, Cloud Storage API, Pub/Sub API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
Python、
pip、virtualenvをシステムにインストールします。手順については、 用の Python 開発環境の設定 をご覧ください。 Google Cloud
Cloud Storage バケットを作成する
以下では、Cloud Storage バケットの作成方法を詳しく説明します。バケットとは、Cloud Storage 内でデータを保持する基本のコンテナです。
ターミナル ウィンドウで Cloud Storage バケットを作成します。ここで、 YOUR_BUCKET_NAME はバケットの名前を表します。
gcloud storage buckets create gs://YOUR_BUCKET_NAME
Bookshelf アプリでアップロードした画像を表示するには、バケットの Identity and Access Management ポリシーを設定して、
legacyObjectReaderロールをallUsersに付与します。gcloud storage buckets add-iam-policy-binding gs://YOUR_BUCKET_NAME --member=allUsers --role=roles/storage.legacyObjectReader
サンプルアプリのクローン作成
サンプルアプリは 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.txtWindows
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 を設定します。コンソールで、リポジトリを作成します。 Google Cloud
アプリのコードをプロジェクトのリポジトリに 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 アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトの削除
課金されないようにする最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- コンソールで [**リソースの管理**] ページに移動します。 Google Cloud
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、 [Shut down] をクリックしてプロジェクトを削除します。
デプロイを削除する
デプロイを削除するには、次のコマンドを入力します。このコマンドを実行すると、デプロイに関連付けられたロードバランサと Compute Engine インスタンスが削除されます。
gcloud deployment-manager deployments delete my-deployment
次のステップ
Deployment Manager テンプレートの定義の詳細を確認する。
Google Kubernetes Engine で Python Bookshelf サンプルアプリを実行する方法を学ぶ。
Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センター を確認します。
他のGoogle Cloud サービスを確認する。