概要
前回の続きです。ここまで来たら小規模ながらきちんとした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がきちんと出来ていて

インスタンスがちゃんとくっついていて

インスタンスも起動している状態になるはずです。

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