mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 01:30: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}"]
|
|
} |