Skip to content

Latest commit

 

History

History
259 lines (193 loc) · 10.6 KB

File metadata and controls

259 lines (193 loc) · 10.6 KB

環境構築用Terraform

概要

本ガイドではTerraformを使用して演習環境をAWS上に構築する手順を解説します。 環境のイメージは次の通りです。

AWS環境図

AWS環境図

バージョン

本レポジトリのモジュール群は以下のバージョンを前提とします。

Name Version
terraform >= 0.15.4
aws >= 3.53.0, < 4.0.0

使用方法

本節で具体的な使用方法を説明します。

事前準備

本ガイドではAWS Marketplaceで提供されているCentOS 8 (x86_64) - with Updates HVMを使用します。 そのため、事前にこのOSイメージを環境構築で使用するAWSアカウントにSubscribeする必要があります。 次の手順を実施してください。

  1. 使用するAWSアカウントのマネージメントコンソールにログインする
  2. AWS Marketplaceにアクセスする。
  3. 画面右上のContunue to Subscribeを選択する。

You're subscribed to this software. Please see the terms and pricing details below or click the button above to configure your software. と表示されていれば作業完了です。

Docker Swarm

まず本レポジトリを任意の場所でクローンします。 なお、以降の手順では任意のディレクトリのパスを環境変数$CLONEDIRとして進めます。

export CLONEDIR=`pwd`
git clone https://github.com/cnc4e/docker-practice.git

docker-swarmモジュールのディレクトリへ移動します。

cd $CLONEDIR/docker-practice/terraform/environment/docker-swarm

環境構築に使用する各種パラメータをdocker-swarm.tfに指定します。 ファイルのコメントを参考に各パラメータを指定してください。 以下に例を記載します。


⚠️ 次のパラメータについては必ずパラメータの修正を実施してください。

  • region
  • pj
  • env
  • owner
  • key_name

provider "aws" {
  # 環境を構築するリージョンを指定します。
  region = "us-west-1"
}

locals {
  # common parameter
  ## 各リソースの名称やタグ情報に使用するパラメータを指定します。
  pj    = "docker-practice"
  env   = "develop"
  owner = "user01"

  tags = {
    pj    = local.pj
    env   = local.env
    owner = local.owner
  }

  # Network
  ## VPCに割り当てるCIDRを指定します。
  vpc_cidr = "10.0.0.0/16"
  ## subnetに割り当てるCIDRを指定します。
  subnet_cidr = "10.0.0.0/24"

  # EC2
  ## 作成するノードの一覧です。リストした名前のEC2を作成します。
  nodes         = ["manager0", "manager1", "manager2", "worker0", "worker1"]
  ## 作成するEC2のインスタンスタイプを指定します。
  instance_type = "t2.medium"
  ## EC2に割り当てるキーペアを指定します。あらかじめ作成が必要です。
  key_name      = "ec2_key_pair"

  # SecurityGroup
  ## 各ノードにインターネット経由でSSH接続する場合に送信元グローバルIPを指定します。
  ## どこからも許可しない場合は空配列を指定する。
  allow_ssh_cidrs        = ["119.110.104.16/28"] 
  ## 各ノードにインターネット経由でdocker APIを利用する場合に送信元グローバルIPを指定します。
  ## どこからも許可しない場合は空配列を指定する。
  allow_docker_api_cidrs = ["119.110.104.16/28"] 

  # ClowdWatch
  ## 作成するEC2に自動起動/自動停止のスケジュールを設定します。
  auto_start          = true                        # trueにするとEC2の自動起動をスケジュール設定します。
  auto_start_schedule = "cron(00 0 ? * MON-FRI *)"  # 日本時間で平日09:00の指定
  auto_stop           = true                        # trueにするとEC2の自動停止をスケジュール設定します。
  auto_stop_schedule  = "cron(00 10 ? * MON-FRI *)" # 日本時間で平日19:00の指定
}

以下のコマンドでリソースを作成します。

terraform init
terraform apply
> yes

これでSwarmクラスタの構築に必要なMnagerノード、Workerノードが作成されます。 演習に必要なコンポーネント(docker、docker-composeなど)のインストールは完了していますが、 Swarmクラスタ自体はまだ構築されていません。 Swarm初級-Swarmクラスタの構築へ移動し、Swarmクラスタを実際に作成してみましょう。

EFS

Swarm中級-ボリュームで使用する Amazon EFSおよび周辺設定を作成します。 こちらの章を実施しない場合、efsモジュールの実行は不要です。

まずefsモジュールのディレクトリへ移動します。

cd $CLONEDIR/docker-practice/terraform/environment/efs

環境構築に使用する各種パラメータをefs.tfに指定します。 コメントを参考に各パラメータを指定してください。 以下に例を記載します。

provider "aws" {
  # 環境を構築するリージョンを指定します。
  region = "us-west-1"
}

 <中略>

locals {
  # common parameter
  ## 各リソースの名称やタグ情報に使用するパラメータを指定します。
  pj    = "docker-practice"
  env   = "develop"
  owner = "user01"

  tags = {
    pj    = local.pj
    env   = local.env
    owner = local.owner
  }
}

⚠️ 次のパラメータについては必ずパラメータの修正を実施してください。

  • region
  • pj
  • env
  • owner

以下のコマンドでリソースを作成します。

terraform init
terraform apply
> yes

これでEFSボリュームが作成されます。 Swarm中級-ボリュームへ移動し、 コンテナへのボリュームマウントを実際に試してみましょう。

(補足) 作成した各ノードに対する接続・操作について

この環境構築用Terraformで作成した各ノードへの操作方法は次の3つがあります。 それぞれの操作方法について本節で補足します。

  1. インターネット経由でSSH接続し、各ノード上で操作する
  2. AWS Session Managerを使用してコンソール接続し、WEBブラウザやAWS CLIなどで操作する
  3. インターネット経由でdocker APIを使用し、各ノードをリモートで操作する

インターネット経由でSSH接続し、各ノード上で操作する

docker-swarm.tfにおいて次のパラメータを指定することで、 指定した送信元グローバルIPから各ノードにSSH接続することが可能です。 ログインIDはcentosです。認証は公開鍵暗号方式となりますので、 key_nameに指定したキーペアの秘密鍵を使用してください。

(該当箇所抜粋)
  ## EC2に割り当てるキーペアを指定します。あらかじめ作成が必要です。
  key_name      = "key_pair_name"

  # SecurityGroup
  ## 各ノードにインターネット経由でSSH接続する場合に送信元グローバルIPを指定します。
  ## どこからも許可しない場合は空配列を指定する。
  allow_ssh_cidrs        = ["119.110.104.16/28"] 

AWS Session Managerを使用してコンソール接続し、WEBブラウザやAWS CLIなどで操作する

各ノードにはAWS Session Managerを使用してコンソール接続することが可能です。

Session Managerを使用するために必要なssm agentのインストールにはuser dataを使用しています。 そのためEC2の作成・起動が完了してから、Session Managerが利用可能になるまで、 10~15分程度の時間が必要なりますのでご注意ください。

Session Managerでの操作方法にはいくつか種類があります。 各々の具体的な使用方法は以下のAWS公式ドキュメントを参照してください。

インターネット経由でdocker APIを使用し、各ノードをリモートで操作する

dockerではAPIを外部に公開することでリモートからdockerを操作することが可能です。 API接続にはtcp 2375(暗号化なし)、もしくはtcp 2376(暗号化あり)を使用します。

docker-swarm.tfにおいて次のパラメータを指定することで、 指定した送信元グローバルIPからインターネット経由でdocker APIを使用することが可能になります。 インターネット経由での操作となりますので、tcp 2376のみ許可されます。

  ## 各ノードにインターネット経由でdocker APIを利用する場合に送信元グローバルIPを指定します。
  ## どこからも許可しない場合は空配列を指定する。
  allow_docker_api_cidrs = ["119.110.104.16/28"]

docke APIの具体的な使用方法はこちらを参照してください。