Silent error when Terraform deploys to ECS

0

I’m new to Terraform and having problems setting up a very basic configuration. I want something that brings up my “docker-whale” image. From looking at Hashicorp and AWS docs, it seems I need an “aws_ecs_service” that uses a “aws_ecs_task_definition”.

Using this example, I’ve created the below config.

variable "access_key" {}
variable "secret_key" {}

provider "aws" {
  alias = "west"
  region = "us-west-1"
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
}

resource "aws_ecs_cluster" "default" {
  name = "whale"
}

resource "aws_ecs_service" "whale-service" {
  name            = "whale-service"
  cluster         = "${aws_ecs_cluster.default.id}"
  task_definition = "${aws_ecs_task_definition.whale-task.arn}"
  desired_count   = 1
}

resource "aws_ecs_task_definition" "whale-task" {
  family = "whale"
  container_definitions = "${file("task-definitions/whale.json")}"
  volume {
    name = "whale-home"
    host_path = "/ecs/whale-home"
  }
}

Now, when I run terraform apply (access_key & secret_key redacted), everything seems to work fine. But I don’t see a corresponding ECS cluster or task definition in my AWS web console. Am I missing anything?

$ terraform apply 
provider.aws.region
  The region where AWS operations will take place. Examples
  are us-east-1, us-west-2, etc.

  Default: us-east-1
  Enter a value: 

aws_ecs_task_definition.whale-task: Refreshing state... (ID: whale)
aws_ecs_cluster.default: Creating...
  name: "" => "whale"
aws_ecs_cluster.default: Creation complete
aws_ecs_service.whale-service: Creating...
  cluster:                            "" => "arn:aws:ecs:us-east-1:186598327969:cluster/whale"
  deployment_maximum_percent:         "" => "200"
  deployment_minimum_healthy_percent: "" => "100"
  desired_count:                      "" => "1"
  name:                               "" => "whale-service"
  task_definition:                    "" => "arn:aws:ecs:us-east-1:186598327969:task-definition/whale:1"
aws_ecs_service.whale-service: Creation complete

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

The state of your infrastructure has been saved to the path
below. This state is required to modify and destroy your
infrastructure, so keep it safe. To inspect the complete state
use the `terraform show` command.

State path: terraform.tfstate

Nutritioustim

Posted 2016-04-10T19:40:07.110

Reputation: 131

Answers

0

You haven't launched any instances to be in your cluster, but I think you'd still be able to see the cluster in the ECS manager.

I started working from this file: https://github.com/Capgemini/terraform-amazon-ecs/blob/master/ecs.tf

Where there is an Autoscaling group that launches instances for the cluster, and uses user_data to mark the machine as part of the cluster

/* SSH key pair */
resource "aws_key_pair" "ecs" {
  key_name   = "${var.key_name}"
  public_key = "${file(var.key_file)}"
}

/**
 * Launch configuration used by autoscaling group
 */
resource "aws_launch_configuration" "ecs" {
  name                 = "ecs"
  image_id             = "${lookup(var.amis, var.region)}"
  /* @todo - split out to a variable */
  instance_type        = "${var.instance_type}"
  key_name             = "${aws_key_pair.ecs.key_name}"
  iam_instance_profile = "${aws_iam_instance_profile.ecs.id}"
  security_groups      = ["${aws_security_group.ecs.id}"]
  iam_instance_profile = "${aws_iam_instance_profile.ecs.name}"
  user_data            = "#!/bin/bash\necho ECS_CLUSTER=${aws_ecs_cluster.default.name} > /etc/ecs/ecs.config"
}

/**
 * Autoscaling group.
 */
resource "aws_autoscaling_group" "ecs" {
  name                 = "ecs-asg"
  availability_zones   = ["${split(",", var.availability_zones)}"]
  launch_configuration = "${aws_launch_configuration.ecs.name}"
  /* @todo - variablize */
  min_size             = 1
  max_size             = 10
  desired_capacity     = 1
}

/* ecs service cluster */
resource "aws_ecs_cluster" "default" {
  name = "${var.ecs_cluster_name}"
}

Aaron McMillin

Posted 2016-04-10T19:40:07.110

Reputation: 141