Files
terraform-ecs/ecs.tf
Tommy Parnell 77e1e104c0 init
2017-02-07 07:15:34 -05:00

97 lines
3.0 KiB
HCL

resource "aws_ecr_repository" "registry" {
name = "${var.container_name}"
}
resource "aws_ecs_cluster" "cluster" {
name = "${var.container_name}"
}
resource "aws_launch_configuration" "ecs" {
name = "ecs-${aws_ecr_repository.registry.name}"
/*this is the ami for aws irl, we should probably take this as a var or have a map of all the images*/
image_id = "ami-48f9a52e"
instance_type = "m3.medium"
iam_instance_profile = "${aws_iam_instance_profile.ecs.id}"
security_groups = ["${aws_security_group.allow_all.id}"]
iam_instance_profile = "${aws_iam_instance_profile.ecs.name}"
user_data = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecr_repository.cluster.name} > /etc/ecs/ecs.config"
}
/**
* Autoscaling group.
*/
resource "aws_autoscaling_group" "ecs" {
name = "ecs-asg"
/* @todo take subnets as either 1 list arg or maybe some other way?*/
vpc_zone_identifier = ["${var.SubnetPrivate1a}", "${var.SubnetPrivate1b}", "${var.SubnetPrivate1c}"]
launch_configuration = "${aws_launch_configuration.ecs.name}"
/* @todo - variablize */
min_size = 1
max_size = 10
desired_capacity = 3
}
data "template_file" "task-definitions" {
template = "${file("task-definitions/tasks.json")}"
vars {
registry = "${var.account_id}.dkr.ecr.eu-west-1.amazonaws.com/${aws_ecr_repository.registry.name}"
container_name = "${var.container_name}"
container_port = "${var.container_port}"
host_port = "${var.host_port}"
}
}
output "rendered" {
value = "${data.template_file.task-definitions.rendered}"
}
resource "aws_ecs_task_definition" "main_task_definition" {
family = "${var.container_name}"
container_definitions = "${data.template_file.task-definitions.rendered}"
}
resource "aws_ecs_service" "main-service" {
name = "${var.container_name}-service"
cluster = "${aws_ecr_repository.cluster.id}"
iam_role = "${aws_iam_role.ecs_service_role.arn}"
depends_on = ["aws_iam_role_policy.ecs_service_role_policy"]
task_definition = "${aws_ecs_task_definition.main_task_definition.arn}"
desired_count = 1
load_balancer {
elb_name = "${aws_elb.elb-http.id}"
container_name = "${var.container_name}"
container_port = "${var.host_port}"
}
}
resource "aws_elb" "elb-http" {
name = "${var.container_name}-elb"
security_groups = ["${aws_security_group.allow_all.id}"]
subnets = ["${var.SubnetPublic1a}","${var.SubnetPublic1b}","${var.SubnetPublic1c}"]
listener {
lb_protocol = "http"
lb_port = "${var.lb_port}"
instance_protocol = "http"
instance_port = "${var.host_port}"
}
/* uncomment for livecheck, todo variable-ize */
/*
health_check {
healthy_threshold = 3
unhealthy_threshold = 2
timeout = 3
target = "HTTP:${var.lb_port}/livecheck"
interval = 5
}
*/
cross_zone_load_balancing = true
}