インフラのデプロイ

このステップでは、AWS バーチャル・プライベート・クラウド (VPC) 上にアプリケーション・スタックを走らせます。このまま進める前に、 アプリケーション・アーキテクチャを学ぶ 必要があります。

このサンプルではアプリケーションを Amazon Web Services (AWS) 上の Swarm クラスタにデプロイします。AWS を使うのは単なる例です。このアプリケーションやデプロイに必要なだけです。皆さん自身で、任意のプラットフォーム上で環境設計を再現可能です。例えば、 Digital Ocean のような別のパブリック・クラウド・プラットフォームや、データセンタ内のオンプレミス上や、ノート PC 上のテスト環境にもアプリケーションをデプロイできます。

注釈

AWS にデプロイしないか、以降の手順で CloudFormation テンプレートを使わない場合は、Docker ホストを実行するカーネルを 3.16 以上にしてください。Docker コンテナのネットワーク機能を使うためには、このバージョンのカーネルが必要です。

デプロイ手順の概要

AWS 基盤にデプロイする時に必要なのは、まず VPC を準備し、それから CloudFormation 用テンプレートを適用します。テンプレートにはサンプル・スタックで使うホストの詳細が記述されています。VPC を作成したあとは、CloudFormation テンプレートを通して全てのインスタンスを VPC 上に構築するように、デプロイを2つの手順に分けています。

以下の図は CloudFormation テンプレートを実行するために必要となる VPC インフラです。

../../_images/cloud-formation-tmp.png

AWS の設定は1つの VPC 上で1つのパブリック・サブネットを使います。 CloudFormation テンプレート を動作させるために、VPC は us-west-1 リージョン(N.California)か us-west-2 (Oregon) にする必要があります。この CloudFormation テンプレートを動かすためには、これらのリージョンが 必要 です。別のリージョンを使いたい場合は、テンプレートをインポートする前にテンプレートのリージョン情報を変更してください。

VPC ネットワーク・アドレス空間は 192.168.0.0/16 であり、1つの 24 ビットのパブリック・サブセットが 192.168.33.0/24 として切り出されています。このサブセットからインターネットへのデフォルト経路は、VPC の内部ゲートウェイを経由する必要があります。6つの EC2 インスタンスの全てを、このバブリック・サブセットにデプロイします。

VPC を作成した後は、 docker/swarm-microservice-demo-v1 リポジトリ にある CloudFormation テンプレートを使って EC2 インスタンスをデプロイします。

動作条件

Amazon AWS アカウントを持っている必要があります。このアカウントとは、個人のものでも会社のものでも構いません。アカウントは EC2 インスタンスを us-west-1 リージョン(N.california)にデプロイできる必要があります。

以下の手順を進める前に、 us-west-1 リージョンに EC2 キーペアが存在しているかどうかを確認し、 .pem ファイルをダウンロードします。もしまだであれば AWS にログインし、 キーペアの作成手順 を読み、キーペアを作成してから、 .pem ファイルをダウンロードします。

自分のローカルマシン上に サンプル・アプリケーションの GitHub リポジトリ を git clone (コピー作成)します。あるいは、ローカル環境に zip ファイルを ダウンロード し、展開する方法もあります。

ステップ1:VPC の構築と設定

このステップでは Amazon 上の VPC ウィザードを使います。VPC を手動で構築したい場合は、以下の値で VPC を設定します。

フィールド
VPC Network (CIDR) 192.168.0.0/16
VPC Name swarm-scale
Subnet network (CIDR) 192.168.33.0/24
Availability Zone
  1. California (us-west-1a or b)
Subnet name publicSwarm
DNS resolution Yes
Subnet type Public (with route to the internet)
Availability Zone Any
Auto-assign public IP Yes
Router A single router with a route for local traffic and default route for traffic to the internet
internet gateway A single internet gateway used as default route for the subnet’s routing table

To build the VPC, with the wizard.

VPC の作成にはウィザードを使います。

  1. VPC ダッシュボードに移動します。
  1. Start VPC Wizard を選びます。
  1. VPC with a Single Public Subnet を選びます。
  1. Select をクリックします。

ブラウザは Step 2: VPC with a Single Public Subnet ダイアログを表示します。

  1. ダイアログを埋めます。
  1. Create VPC をクリックします。

AWS が VPC を構築すると VPC Successfully Created ページが表示されます。

  1. OK をクリックします。
  1. VPC ダッシュボード メニューから Subnets を選択します。
  1. publicSwarm サブネットを探します。
  1. Subnet Actions > Modify Auto-Assign Public IP を選びます。
  1. Enable auto-assign Public IP**を選び、 **Save をクリックします。

次のステップでは CloudFormation テンプレートを使って残りの AWS 設定を進めていきます。

ステップ2:ネットワーク・スタックの構築

このステップは CloudFormation テンプレートを使い AWS 上にスタックを構築します。始める前に、動作条件を確認します。

  • 自分の AWS アカウントに個人のキー・ペアを関連づけていること
  • ローカルマシン上に サンプル・コード <https://github.com/docker/swarm-microservice-demo-v1> をダウンロードするか複製する

それから、以下の手順に進みます。

  1. AWS コンソールの CloudFormation ページから Create Stack (スタックの作成)を選びます。
  1. Create Stack をクリックします。
  1. Choose a template (テンプレートの選択)セクションにある 選択 ボタンを押します。
  1. ダウンロードしたサンプル・コードを探したし、CloudFormation テンプレートにある swarm-microservice-demo-v1/AWS/cloudformation.json を指定します。
  1. Next をクリックします。

テンプレートの Specify Details ダイアログの詳細から対象システムを指定します。

  1. スタックの名前は VotingAppStack です。

この名前を使っても構いませんし、他にも意味のある名前を指定できます。

  1. KeyName ドロップダウンからキーペアを選びます。
  1. Subnetid ドロップダウン・メニューから publicSwarm を選びます。
  1. Vpcid ドロップダウン・メニューから swarm-scale を選びます。
  1. Next を2回押し、 Review ページを表示します。
  1. 値を確認します。

Template URLSubnetIdVpcId は常にユニークであり、毎回違いますが、以下のように表示されます。

(ToDo: 図)

  1. Create を押します。

スタックの作成が開始され、進行状況が表示されます。

ステップ3:デプロイの確認

処理が終わると、CloudFormation は VPC と6つの EC2 インスタンスを投入しています。

インスタンス名 サイズ プライベート IP アドレス
frontend01 t2.micro 192.168.33.20
frontend02 t2.micro 192.168.33.21
interlock t2.micro 192.168.33.12
manager t2.micro 192.168.33.11
store m3.medium 192.168.33.250
worker01 t2.micro 192.168.33.200

EC2 ダッシュボードに移動すると、各マシンが動いているのが分かります。

AWS のインフラは次のような状態です。

../../_images/aws-infrastructure.png

インスタンスは ami-56f59e36 AMI をベースにしています。これは カーネル 3.16 の Ubuntu 14.04 イメージであり、Docker Engine 1.10.2 がインストールされています。また、 /etc/default/dockerDOCKER_OPTS 行に、次のパラメータを追加しています。

--cluster-store=consul://192.168.33.11:8500 --cluster-advertise=eth0:2375 -H=tcp://0.0.0.0:2375 -H=unix:///var/run/docker.sock

次のステップ

これでインフラのスタックを作成完了しました。次のステップ Swarm クラスタの構築 に進む準備が整いました。