このチュートリアルでは、Node.js をフロントエンドとして使用し、バックエンドで MySQL を使用するサンプル Logbook アプリをデプロイします。チュートリアルの最後には、次のリソースがデプロイされています。
Deployment Manager を初めて使用する方は、クイックスタートまたはステップバイステップ ガイドのチュートリアルをご覧ください。
始める前に
- このガイドのコマンドラインの例を使用する場合、gcloud コマンドライン ツールをインストールします。
- このガイドの API の例を使用する場合は、API アクセスを設定します。
- Compute Engine ネットワーク負荷分散の概要を確認してください。
- Docker コンテナの概要を確認してください。
リソース テンプレートの作成
このサンプルでは、さまざまな Google Cloud リソースを含むデプロイを作成します。はじめに、各リソースを個別に定義するテンプレートを作成します。その後、最終設定において各テンプレートを呼び出します。デプロイには次のリソースが含まれています。
- アプリの MySQL データベースをホストする Compute Engine インスタンス。
- フロントエンド インスタンスのインスタンス テンプレート。Node.js アプリ用の Docker イメージを使用します。
- マネージド インスタンス グループ。インスタンス テンプレートを使用して 2 つのフロントエンド インスタンスを作成します。
- オートスケーラー。受信トラフィックに基づいて追加のフロントエンド インスタンスを開始または停止します。
- フロントエンド インスタンスが使用可能かどうかを確認するヘルスチェック。
- 転送ルールが設定されているネットワーク ロードバランサ。
- マネージド インスタンス グループのターゲット プール。
MySQL バックエンドのテンプレートの作成
このアプリのバックエンドは、単一の Compute Engine インスタンスで、MySQL Docker コンテナを実行します。container_vm.py
テンプレートは、Docker コンテナを実行できる Compute Engine インスタンスを定義します。テンプレートの形式が正しく、必要なプロパティがすべて設定されているかどうか確認するには、スキーマ ファイルも必要です。
次のテンプレートをコピーするか、GitHub リポジトリからダウンロードします。
テンプレートには containerImage
などの未定義のプロパティが含まれています。このようなプロパティは後のテンプレートで定義されます。
Compute Engine インスタンスでコンテナ イメージを使用する場合は、使用するコンテナ イメージを記述したマニフェスト ファイルも用意する必要があります。container_helper.py
というヘルパー メソッドを作成して、コンテナ マニフェストを動的に定義します。
Node.js フロントエンドのテンプレートの作成
アプリのフロントエンドで Node.js を実行し、ユーザーがウェブページにメッセージを投稿できるようにします。フロントエンドは仮想マシン インスタンス グループ上で稼働し、オートスケーラーとロードバランサによってサポートされます。次の手順でフロントエンド テンプレートを作成します。
インスタンス テンプレート リソースを作成します。
マネージド インスタンス グループを作成するには、インスタンス テンプレートが必要です。マネージド インスタンス グループとは、単一のエンティティとして制御する同一の仮想マシン(VM)インスタンスのグループです。
container_instance_template.py
という名前のファイルを作成し、テンプレートのスキーマをダウンロードします。オートスケーラー、マネージド インスタンス グループ、ロードバランサを作成します。
次に、
container_instance_template.py
テンプレートを使用する別のテンプレートを作成し、オートスケーラーやロードバランサ、マネージド インスタンス グループなど、残りのフロントエンド リソースを作成します。
このテンプレートには次のリソースが含まれています。
container_instance_template.py
を使用するインスタンス テンプレート。インスタンス テンプレートを使用するマネージド インスタンス グループ。マネージド インスタンス グループを参照するオートスケーラー。参照を使用することで、Deployment Manager が特定の順序でリソースを作成するように設定できます。この場合、マネージド インスタンス グループはオートスケーラーの前に作成されます。
次のリソースを含むネットワーク ロードバランサ。
- インターネットにエクスポーズされた単一の外部 IP アドレスによる転送ルール。
- 作成済みのマネージド インスタンス グループを格納するターゲット プール。
- ターゲット プールに関連するヘルスチェック
frontend.py
という名前のファイルを作成し、テンプレートのスキーマをダウンロードします。
統合テンプレートの作成
最後に、バックエンド テンプレートとフロントエンド テンプレートを統合するテンプレートを作成します。次の内容のファイルを nodejs.py
という名前で作成します。
アプリのフロントエンドには env["deployment"]-frontend
という名前が設定されます。バックエンドにも同様の名前が設定されます。アプリをデプロイすると、env["deployment"]
は Deployment Manager によって自動的にデプロイ名に置換されます。
構成の作成
すべてのテンプレートが用意できたら、リソースのデプロイに使用する構成を作成します。次の内容の構成ファイルを nodejs.yaml
という名前で作成します。
ZONE_TO_RUN
は、リソースのゾーン(us-central1-a
など)で置き換えます。
リソースのデプロイ
では、リソースをデプロイしましょう。Google Cloud CLI を使用して、次を実行します:
gcloud deployment-manager deployments create advanced-configuration --config nodejs.yaml
デプロイが完了すると、Deployment Manager は次のようなメッセージを表示し、作成されたリソースの要約を示します。
Waiting for create operation-1468522101491-5379cf2344539-5961abe8-a500190c...done.
Create operation operation-1468522101491-5379cf2344539-5961abe8-a500190c completed successfully.
NAME TYPE STATE ERRORS
advanced-configuration-application-fw compute.v1.firewall COMPLETED []
advanced-configuration-backend compute.v1.instance COMPLETED []
advanced-configuration-frontend-as compute.v1.autoscaler COMPLETED []
advanced-configuration-frontend-hc compute.v1.httpHealthCheck COMPLETED []
advanced-configuration-frontend-igm compute.v1.instanceGroupManager COMPLETED []
advanced-configuration-frontend-it compute.v1.instanceTemplate COMPLETED []
advanced-configuration-frontend-lb compute.v1.forwardingRule COMPLETED []
advanced-configuration-frontend-tp compute.v1.targetPool COMPLETED []
アプリのテスト
アプリをテストするには、転送ルールのクエリを行い、トラフィックを処理している外部 IP アドレスを取得します。
$ gcloud compute forwarding-rules describe advanced-configuration-frontend-lb --region us-central1 IPAddress: 104.154.81.44 IPProtocol: TCP creationTimestamp: '2016-07-14T11:48:37.228-07:00' description: '' id: '9033201246750269546' kind: compute#forwardingRule name: advanced-configuration-frontend-lb portRange: 8080-8080 region: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1 selfLink: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules/advanced-configuration-frontend-lb target: https://www.googleapis.com/compute/v1/projects/myproject/regions/us-central1/targetPools/advanced-configuration-frontend-tp
この場合の外部 IP アドレスは 104.154.81.44
です。
次に、ブラウザで、ポート 8080 を使用して外部 IP アドレスにアクセスします。たとえば、外部 IP アドレスが 104.154.81.44
の場合、URL は次のようになります。
http://104.154.81.44:8080
空白のページが表示されるはずです。これは想定どおりです。次に、メッセージをページに投稿します。次の URL に移動します。
http://104.154.81.44:8080?msg=hellothere!
メッセージが追加されたことを確認するメッセージが表示されます。メイン URL に戻ると、ページにメッセージが表示されているはずです。
hellothere!
これで、受信したメッセージをログに記録できるアプリがデプロイされました。
次のステップ
このサンプルを完成させた後は、次のステップに進むことができます。
- このサンプルを使用して、独自の Docker コンテナにインスタンスをデプロイする。このチュートリアルで使用した Docker コンテナを変更する場合は、GitHub リポジトリ Docker ファイルを編集します。
- Deployment Manager GitHub リポジトリで別のサンプル デプロイを確認する。
- テンプレートとデプロイに関する詳細を確認する。