Last active
August 29, 2015 14:16
-
-
Save ianblenke/fa4ba8bb86ecaf964521 to your computer and use it in GitHub Desktop.
An older translation of the Deis CloudFormation template into TerraForm syntax
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| variable "aws_access_key" { | |
| description = "The AWS_ACCESS_KEY_ID to use" | |
| } | |
| variable "aws_secret_key" { | |
| description = "The AWS_SECRET_ACCESS_KEY to use" | |
| } | |
| provider "aws" { | |
| access_key = "${var.aws_access_key}" | |
| secret_key = "${var.aws_secret_key}" | |
| region = "us-east-1" | |
| } | |
| resource "aws_vpc" "vpc_myapp_prod" { | |
| cidr_block = "10.1.0.0/16" | |
| enable_dns_support = true | |
| enable_dns_hostnames = true | |
| tags { | |
| Name = "vpc_myapp_prod" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| } | |
| resource "aws_subnet" "subnet_myapp_prod_10_1_0" { | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| availability_zone = "us-east-1a" | |
| cidr_block = "10.1.0.0/22" | |
| tags { | |
| Name = "subnet_myapp_prod_0" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ "aws_vpc.vpc_myapp_prod" ] | |
| } | |
| resource "aws_subnet" "subnet_myapp_prod_10_1_4" { | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| availability_zone = "us-east-1c" | |
| cidr_block = "10.1.4.0/22" | |
| tags { | |
| Name = "subnet_myapp_prod_4" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ "aws_vpc.vpc_myapp_prod" ] | |
| } | |
| resource "aws_subnet" "subnet_myapp_prod_10_1_8" { | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| availability_zone = "us-east-1d" | |
| cidr_block = "10.1.8.0/22" | |
| tags { | |
| Name = "subnet_myapp_prod_4" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ "aws_vpc.vpc_myapp_prod" ] | |
| } | |
| resource "aws_subnet" "subnet_myapp_prod_10_1_12" { | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| availability_zone = "us-east-1e" | |
| cidr_block = "10.1.12.0/22" | |
| tags { | |
| Name = "subnet_myapp_prod_12" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ "aws_vpc.vpc_myapp_prod" ] | |
| } | |
| resource "aws_internet_gateway" "igw_myapp_prod" { | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| tags { | |
| Name = "igw_myapp_prod" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ "aws_vpc.vpc_myapp_prod" ] | |
| } | |
| resource "aws_route_table" "rt_myapp_prod" { | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| route { | |
| cidr_block = "0.0.0.0/0" | |
| gateway_id = "${aws_internet_gateway.igw_myapp_prod.id}" | |
| } | |
| depends_on = [ | |
| "aws_internet_gateway.igw_myapp_prod", | |
| "aws_vpc.vpc_myapp_prod" | |
| ] | |
| } | |
| resource "aws_route_table_association" "rta_myapp_prod_10_1_0" { | |
| subnet_id = "${aws_subnet.subnet_myapp_prod_10_1_0.id}" | |
| route_table_id = "${aws_route_table.rt_myapp_prod.id}" | |
| depends_on = [ | |
| "aws_subnet.subnet_myapp_prod_10_1_0", | |
| "aws_route_table.rt_myapp_prod" | |
| ] | |
| } | |
| resource "aws_route_table_association" "rta_myapp_prod_10_1_4" { | |
| subnet_id = "${aws_subnet.subnet_myapp_prod_10_1_4.id}" | |
| route_table_id = "${aws_route_table.rt_myapp_prod.id}" | |
| depends_on = [ | |
| "aws_subnet.subnet_myapp_prod_10_1_4", | |
| "aws_route_table.rt_myapp_prod" | |
| ] | |
| } | |
| resource "aws_route_table_association" "rta_myapp_prod_10_1_8" { | |
| subnet_id = "${aws_subnet.subnet_myapp_prod_10_1_8.id}" | |
| route_table_id = "${aws_route_table.rt_myapp_prod.id}" | |
| depends_on = [ | |
| "aws_subnet.subnet_myapp_prod_10_1_8", | |
| "aws_route_table.rt_myapp_prod" | |
| ] | |
| } | |
| resource "aws_route_table_association" "rta_myapp_prod_10_1_12" { | |
| subnet_id = "${aws_subnet.subnet_myapp_prod_10_1_12.id}" | |
| route_table_id = "${aws_route_table.rt_myapp_prod.id}" | |
| depends_on = [ | |
| "aws_subnet.subnet_myapp_prod_10_1_12", | |
| "aws_route_table.rt_myapp_prod" | |
| ] | |
| } | |
| resource "aws_launch_configuration" "lc_myapp_prod" { | |
| name = "lc_myapp_prod" | |
| image_id = "ami-3e058d56" | |
| instance_type = "m3.xlarge" | |
| key_name = "myapp-prod" | |
| security_groups = [ | |
| "${aws_security_group.sg_myapp_prod_self.id}", | |
| "${aws_security_group.sg_myapp_prod_coreos.id}" | |
| ] | |
| user_data = "${file("user-data.base64")}" | |
| depends_on = [ "aws_security_group.sg_myapp_prod_coreos" ] | |
| } | |
| resource "aws_autoscaling_group" "asg_myapp_prod" { | |
| availability_zones = ["us-east-1a","us-east-1c","us-east-1d","us-east-1e"] | |
| name = "asg_myapp_prod" | |
| max_size = 9 | |
| min_size = 5 | |
| health_check_grace_period = 300 | |
| health_check_type = "ELB" | |
| desired_capacity = 5 | |
| force_delete = true | |
| launch_configuration = "${aws_launch_configuration.lc_myapp_prod.id}" | |
| health_check_grace_period = 60 | |
| load_balancers = [ "elb-myapp-prod" ] | |
| vpc_zone_identifier = [ | |
| "${aws_subnet.subnet_myapp_prod_10_1_0.id}", | |
| "${aws_subnet.subnet_myapp_prod_10_1_4.id}", | |
| "${aws_subnet.subnet_myapp_prod_10_1_8.id}", | |
| "${aws_subnet.subnet_myapp_prod_10_1_12.id}" | |
| ] | |
| depends_on = [ | |
| "aws_launch_configuration.lc_myapp_prod", | |
| "aws_subnet.subnet_myapp_prod_10_1_0", | |
| "aws_subnet.subnet_myapp_prod_10_1_4", | |
| "aws_subnet.subnet_myapp_prod_10_1_8", | |
| "aws_subnet.subnet_myapp_prod_10_1_12" | |
| ] | |
| } | |
| resource "aws_elb" "elb_myapp_prod" { | |
| name = "elb-myapp-prod" | |
| subnets = [ | |
| "${aws_subnet.subnet_myapp_prod_10_1_0.id}", | |
| "${aws_subnet.subnet_myapp_prod_10_1_4.id}", | |
| "${aws_subnet.subnet_myapp_prod_10_1_8.id}", | |
| "${aws_subnet.subnet_myapp_prod_10_1_12.id}" | |
| ] | |
| listener { | |
| instance_port = 80 | |
| instance_protocol = "http" | |
| lb_port = 80 | |
| lb_protocol = "http" | |
| } | |
| listener { | |
| instance_port = 80 | |
| instance_protocol = "http" | |
| lb_port = 443 | |
| lb_protocol = "https" | |
| ssl_certificate_id = "arn:aws:iam::MYAWSIDNUMBER:server-certificate/myapp" | |
| } | |
| listener { | |
| instance_port = 2222 | |
| instance_protocol = "TCP" | |
| lb_port = 2222 | |
| lb_protocol = "TCP" | |
| } | |
| health_check { | |
| healthy_threshold = 4 | |
| unhealthy_threshold = 2 | |
| timeout = 5 | |
| target = "HTTP:80/health-check" | |
| interval = 15 | |
| } | |
| security_groups = ["${aws_security_group.sg_myapp_prod_elb.id}"] | |
| depends_on = [ | |
| "aws_security_group.sg_myapp_prod_elb", | |
| "aws_subnet.subnet_myapp_prod_10_1_0", | |
| "aws_subnet.subnet_myapp_prod_10_1_4", | |
| "aws_subnet.subnet_myapp_prod_10_1_8", | |
| "aws_subnet.subnet_myapp_prod_10_1_12" | |
| ] | |
| } | |
| resource "aws_security_group" "sg_myapp_prod_elb" { | |
| name = "sg_myapp_prod_elb" | |
| description = "Allow inbound ELB traffic" | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| ingress { | |
| from_port = 80 | |
| to_port = 80 | |
| protocol = "tcp" | |
| cidr_blocks = ["0.0.0.0/0"] | |
| } | |
| ingress { | |
| from_port = 2222 | |
| to_port = 2222 | |
| protocol = "tcp" | |
| cidr_blocks = ["0.0.0.0/0"] | |
| } | |
| tags { | |
| Name = "sg_myapp_prod_elb" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ "aws_vpc.vpc_myapp_prod" ] | |
| } | |
| resource "aws_security_group" "sg_myapp_prod_coreos" { | |
| name = "sg_myapp_prod_coreos" | |
| description = "Allow inbound CoreOS traffic" | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| ingress { | |
| from_port = 22 | |
| to_port = 22 | |
| protocol = "tcp" | |
| cidr_blocks = ["0.0.0.0/0"] | |
| } | |
| ingress { | |
| from_port = 80 | |
| to_port = 80 | |
| protocol = "tcp" | |
| cidr_blocks = ["0.0.0.0/0"] | |
| security_groups = [ "${aws_security_group.sg_myapp_prod_elb.id}" ] | |
| } | |
| ingress { | |
| from_port = 2222 | |
| to_port = 2222 | |
| protocol = "tcp" | |
| cidr_blocks = ["0.0.0.0/0"] | |
| security_groups = [ "${aws_security_group.sg_myapp_prod_elb.id}" ] | |
| } | |
| tags { | |
| Name = "sg_myapp_prod_coreos" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ | |
| "aws_vpc.vpc_myapp_prod", | |
| "aws_security_group.sg_myapp_prod_elb" | |
| ] | |
| } | |
| resource "aws_security_group" "sg_myapp_prod_self" { | |
| name = "sg_myapp_prod_igress" | |
| description = "Allow unfettered node-to-node traffic" | |
| vpc_id = "${aws_vpc.vpc_myapp_prod.id}" | |
| ingress { | |
| from_port = 0 | |
| to_port = 65535 | |
| protocol = "-1" | |
| self = true | |
| security_groups = [ "${aws_security_group.sg_myapp_prod_coreos.id}" ] | |
| } | |
| tags { | |
| Name = "sg_myapp_prod_self" | |
| Environment = "myapp_prod" | |
| Application = "myapp" | |
| Lifecycle = "prod" | |
| } | |
| depends_on = [ | |
| "aws_vpc.vpc_myapp_prod", | |
| "aws_security_group.sg_myapp_prod_coreos" | |
| ] | |
| } | |
| resource "aws_route53_zone" "primary" { | |
| name = "mb-myapp.com" | |
| } | |
| resource "aws_route53_record" "deis" { | |
| zone_id = "${aws_route53_zone.primary.zone_id}" | |
| name = "deis.mb-myapp.com" | |
| type = "CNAME" | |
| ttl = "300" | |
| records = ["${aws_elb.elb_myapp_prod.dns_name}"] | |
| depends_on = [ | |
| "aws_route53_zone.primary", | |
| "aws_elb.elb_myapp_prod" | |
| ] | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I have vague memories of playing with https://github.com/ianblenke/docker-terraform and something like this: