概要
前回の続きです。ここまで来たら小規模ながらきちんとした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のページが表示されました。