mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	* Add Terraform grammar, and change .tf and .hcl files from using Ruby to Terraform sublime syntax * Expand Terraform sample to demonstrate more language features * Revert terraform sample change * Add terraform sample - Dokku AWS deploy * Updated to latest Terraform * Update terraform string interpolation * Update terraform to latest
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			HCL
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			HCL
		
	
	
	
	
	
resource "aws_security_group" "elb_sec_group" {
 | 
						|
  description = "Allow traffic from the internet to ELB port 80"
 | 
						|
  vpc_id = "${var.vpc_id}"
 | 
						|
 | 
						|
  ingress {
 | 
						|
      from_port = 80
 | 
						|
      to_port = 80
 | 
						|
      protocol = "tcp"
 | 
						|
      cidr_blocks = ["${split(",", var.allowed_cidr_blocks)}"]
 | 
						|
  }
 | 
						|
 | 
						|
  egress {
 | 
						|
      from_port = 0
 | 
						|
      to_port = 0
 | 
						|
      protocol = "-1"
 | 
						|
      cidr_blocks = ["0.0.0.0/0"]
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
resource "aws_security_group" "dokku_allow_ssh_from_internal" {
 | 
						|
  description = "Allow git access over ssh from the private subnet"
 | 
						|
  vpc_id = "${var.vpc_id}"
 | 
						|
 | 
						|
  ingress {
 | 
						|
      from_port = 22
 | 
						|
      to_port = 22
 | 
						|
      protocol = "tcp"
 | 
						|
      cidr_blocks = ["${var.private_subnet_cidr}"]
 | 
						|
  }
 | 
						|
 | 
						|
  egress {
 | 
						|
      from_port = 0
 | 
						|
      to_port = 0
 | 
						|
      protocol = "-1"
 | 
						|
      cidr_blocks = ["0.0.0.0/0"]
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
resource "aws_security_group" "allow_from_elb_to_instance" {
 | 
						|
  description = "Allow traffic from the ELB to the private instance"
 | 
						|
  vpc_id = "${var.vpc_id}"
 | 
						|
 | 
						|
  ingress {
 | 
						|
      security_groups = ["${aws_security_group.elb_sec_group.id}"]
 | 
						|
      from_port = 80
 | 
						|
      to_port = 80
 | 
						|
      protocol = "tcp"
 | 
						|
  }
 | 
						|
 | 
						|
  egress {
 | 
						|
      from_port = 0
 | 
						|
      to_port = 0
 | 
						|
      protocol = "-1"
 | 
						|
      cidr_blocks = ["0.0.0.0/0"]
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
resource "aws_instance" "dokku" {
 | 
						|
  ami = "ami-47a23a30"
 | 
						|
  instance_type = "${var.instance_type}"
 | 
						|
  associate_public_ip_address = false
 | 
						|
  key_name = "${var.key_name}"
 | 
						|
  subnet_id = "${var.private_subnet_id}"
 | 
						|
  vpc_security_group_ids = [
 | 
						|
    "${var.bastion_sec_group_id}",
 | 
						|
    "${aws_security_group.allow_from_elb_to_instance.id}",
 | 
						|
    "${aws_security_group.dokku_allow_ssh_from_internal.id}"
 | 
						|
  ]
 | 
						|
  tags {
 | 
						|
    Name = "${var.name}"
 | 
						|
  }
 | 
						|
  connection {
 | 
						|
    user = "ubuntu"
 | 
						|
    private_key = "${var.private_key}"
 | 
						|
    bastion_host = "${var.bastion_host}"
 | 
						|
    bastion_port = "${var.bastion_port}"
 | 
						|
    bastion_user = "${var.bastion_user}"
 | 
						|
    bastion_private_key = "${var.bastion_private_key}"
 | 
						|
  }
 | 
						|
  provisioner "file" {
 | 
						|
    source = "${path.module}/../scripts/install-dokku.sh"
 | 
						|
    destination = "/home/ubuntu/install-dokku.sh"
 | 
						|
  }
 | 
						|
  provisioner "remote-exec" {
 | 
						|
    inline = [
 | 
						|
      "chmod +x /home/ubuntu/install-dokku.sh",
 | 
						|
      "HOSTNAME=${var.hostname} /home/ubuntu/install-dokku.sh"
 | 
						|
    ]
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
resource "aws_elb" "elb_dokku" {
 | 
						|
  name = "elb-dokku-${var.name}"
 | 
						|
  subnets = ["${var.public_subnet_id}"]
 | 
						|
  security_groups = ["${aws_security_group.elb_sec_group.id}"]
 | 
						|
 | 
						|
  listener {
 | 
						|
    instance_port = 80
 | 
						|
    instance_protocol = "http"
 | 
						|
    lb_port = 80
 | 
						|
    lb_protocol = "http"
 | 
						|
  }
 | 
						|
 | 
						|
  health_check {
 | 
						|
    healthy_threshold = 2
 | 
						|
    unhealthy_threshold = 2
 | 
						|
    timeout = 3
 | 
						|
    target = "HTTP:80/"
 | 
						|
    interval = 30
 | 
						|
  }
 | 
						|
 | 
						|
  instances = ["${aws_instance.dokku.id}"]
 | 
						|
  cross_zone_load_balancing = false
 | 
						|
  idle_timeout = 400
 | 
						|
 | 
						|
  tags {
 | 
						|
    Name = "elb-dokku-${var.name}"
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
resource "aws_route53_record" "dokku-deploy" {
 | 
						|
   zone_id = "${var.zone_id}"
 | 
						|
   name = "deploy.${var.hostname}"
 | 
						|
   type = "A"
 | 
						|
   ttl = "300"
 | 
						|
   records = ["${aws_instance.dokku.private_ip}"]
 | 
						|
}
 | 
						|
 | 
						|
resource "aws_route53_record" "dokku-wildcard" {
 | 
						|
   zone_id = "${var.zone_id}"
 | 
						|
   name = "*.${var.hostname}"
 | 
						|
   type = "CNAME"
 | 
						|
   ttl = "300"
 | 
						|
   records = ["${aws_elb.elb_dokku.dns_name}"]
 | 
						|
} |