Carpe Diem

備忘録。https://github.com/jun06t

Terraform で ELB の設定とインスタンス作成

概要

前回の続きです。ここまで来たら小規模ながらきちんとしたAWS構成を作れます。

環境

  • Ubuntu 14.04
  • Terraform 0.6.2

前提

Terraform でセキュリティグループを管理VPC、サブネット、セキュリティグループの設定が済んでいる状態。

フォルダ構成

├── config.tf
├── elb.tf
├── instances.tf
├── security_group.tf
├── terraform.tfvars
├── variables.tf
└── vpc.tf

前回で説明したファイルは省略します。

ファイル名 役割
elb.tf ELBの設定
instances.tf EC2インスタンスの設定

設定

elb.tf

resource "aws_elb" "test_elb" {
  name = "test-elb"
  subnets = [
    "${aws_subnet.vpc-1-subnet-1a.id}",
    "${aws_subnet.vpc-1-subnet-1c.id}",
  ]
  security_groups = [
    "${aws_security_group.allow_ssh_http.id}",
  ]
  listener {
    instance_port = 80
    instance_protocol = "http"
    lb_port = 80
    lb_protocol = "http"
  }
  health_check {
    healthy_threshold = 2
    unhealthy_threshold = 2
    timeout = 5
    target = "HTTP:80/"
    interval = 30
  }
  instances = ["${aws_instance.nginx.id}"]
  cross_zone_load_balancing = true
  connection_draining = true
  connection_draining_timeout = 400
  tags {
    Name = "test-elb"
  }
}

詳細は以下。

プロパティ 役割
name 名前
subnets サブネット。今回は1a, 1cの複数AZにしてます
security_groups セキュリティグループ。前回作成したものを使用
listener 接続リクエストのリスナー設定
instance_port インスタンス側ポート
instance_protocol インスタンスプロトコル
lb_port インターネット側ポート
lb_protocol インターネット側プロトコル
health_check インスタンスのヘルスチェック設定
healthy_threshold 正常かどうかのチェック回数。今回は2回成功したら正常
unhealthy_threshold 異常かどうかのチェック回数。今回は2回失敗したら異常
timeout タイムアウト
target チェックのリクエストを投げる先。200が返れば成功
interval チェック感覚
instances 付けるインスタンス
cross_zone_load_balancing 複数AZまたいでバランシングするか
connection_draining 切り離すとき、リクエスト途中であればレスポンスを完全に返してから外す
connection_draining_timeout 上記のタイムアウト上限

instances.tf

resource "aws_instance" "nginx" {
  ami = "ami-f6cf77f6"
  instance_type = "t2.micro"
  key_name = "elb-test"
  vpc_security_group_ids = ["${aws_security_group.allow_ssh_http.id}"]
  subnet_id = "${aws_subnet.vpc-1-subnet-1a.id}"
  tags {
    Name = "Nginx"
  }
}

以下詳細。

プロパティ 役割
ami AMIのID。今回は自作AMIのIDを使ってます
instance_type インスタンスタイプ
key_name 登録済のSSHキーの名前。
security_groups セキュリティグループ
subnet_id サブネット

実行&動作確認

プラン

$ terraform plan
+ aws_elb.test_elb
+ aws_instance.nginx

実行

$ terraform apply

ELBがきちんと出来ていて f:id:quoll00:20150811215032p:plain

インスタンスがちゃんとくっついていて f:id:quoll00:20150811215052p:plain

インスタンスも起動している状態になるはずです。 f:id:quoll00:20150811215109p:plain

ELBのDNS NameでHTTPアクセスすると、きちんとNginxのページが表示されました。 f:id:quoll00:20150811215221p:plain

ソース