From d1c1f6c3060989606bafd7142b822e402866c5cf Mon Sep 17 00:00:00 2001 From: Scott Lowe Date: Tue, 6 Jun 2017 06:06:11 -0600 Subject: [PATCH] First attempt at a "static" ASG-ELB config Add files for creating a "static" (not heavily parameterized) config with an Auto Scaling group and an Elastic Load Balancer. Functional, but doesn't work as expected. More testing needed. Signed-off-by: Scott Lowe --- terraform/aws/asg-elb/data.tf | 16 ++++++++++ terraform/aws/asg-elb/main.tf | 47 ++++++++++++++++++++++++++++++ terraform/aws/asg-elb/provider.tf | 3 ++ terraform/aws/asg-elb/variables.tf | 19 ++++++++++++ 4 files changed, 85 insertions(+) create mode 100644 terraform/aws/asg-elb/data.tf create mode 100644 terraform/aws/asg-elb/main.tf create mode 100644 terraform/aws/asg-elb/provider.tf create mode 100644 terraform/aws/asg-elb/variables.tf diff --git a/terraform/aws/asg-elb/data.tf b/terraform/aws/asg-elb/data.tf new file mode 100644 index 0000000..57bf5e5 --- /dev/null +++ b/terraform/aws/asg-elb/data.tf @@ -0,0 +1,16 @@ +data "aws_ami" "atomic_ami" { + most_recent = true + owners = ["410186602215"] + filter { + name = "name" + values = ["CentOS Atomic Host 7*"] + } + filter { + name = "virtualization-type" + values = ["hvm"] + } +} + +data "aws_vpc" "default_vpc" { + default = true +} diff --git a/terraform/aws/asg-elb/main.tf b/terraform/aws/asg-elb/main.tf new file mode 100644 index 0000000..0c650b2 --- /dev/null +++ b/terraform/aws/asg-elb/main.tf @@ -0,0 +1,47 @@ +# Create an ELB +resource "aws_elb" "elb" { + name = "elb-test" + subnets = ["subnet-69e39630","subnet-e0702d97","subnet-c4e9d6a1"] + cross_zone_load_balancing = true + connection_draining = true + security_groups = ["${var.secgrp}"] + + listener { + instance_port = "22" + instance_protocol = "tcp" + lb_port = "22" + lb_protocol = "tcp" + } + + tags { + Name = "elb-test" + } +} + +# Create a launch configuration +resource "aws_launch_configuration" "lc" { + name = "lc-test" + image_id = "${data.aws_ami.atomic_ami.id}" + instance_type = "${var.flavor}" + security_groups = ["${var.secgrp}"] + key_name = "${var.keypair}" + + lifecycle { + create_before_destroy = true + } +} + +# Create an Auto Scaling group +resource "aws_autoscaling_group" "asg" { + name = "asg-test" + availability_zones = ["us-west-2a","us-west-2b","us-west-2c"] + min_size = "2" + max_size = "2" + desired_capacity = "2" + launch_configuration = "${aws_launch_configuration.lc.name}" + load_balancers = ["elb-test"] + + lifecycle { + create_before_destroy = true + } +} diff --git a/terraform/aws/asg-elb/provider.tf b/terraform/aws/asg-elb/provider.tf new file mode 100644 index 0000000..d7c130e --- /dev/null +++ b/terraform/aws/asg-elb/provider.tf @@ -0,0 +1,3 @@ +provider "aws" { + region = "${var.user_region}" +} diff --git a/terraform/aws/asg-elb/variables.tf b/terraform/aws/asg-elb/variables.tf new file mode 100644 index 0000000..5108f1c --- /dev/null +++ b/terraform/aws/asg-elb/variables.tf @@ -0,0 +1,19 @@ +variable "user_region" { + type = "string" + description = "AWS region in which all resources will be created" +} + +variable "keypair" { + type = "string" + description = "AWS SSH keypair to use to connect to instances" +} + +variable "flavor" { + type = "string" + description = "AWS type to use when creating instances" +} + +variable "secgrp" { + type = "string" + description = "ID of VPC security group to use" +}