未使用terraform创建ecs实例

未使用terraform创建ecs实例,terraform,amazon-ecs,terraform-provider-aws,Terraform,Amazon Ecs,Terraform Provider Aws,所以我试图通过terraform将一个公共托管的docker容器启动到我的ECS中。计划完成无误,启动服务,但ECS实例为空,服务只抱怨没有分配给集群的ECS实例 作为我的基础设施的一部分,我定义了: 专有网络 安全小组 iam角色 ecs集群 使用ALB的ecs服务 考虑到其他一切都启动了,我可以通过ssh连接到ecs(甚至手动拉取并运行docker映像),我非常确定所有的网络都正常,这让我觉得可能是ecs服务和ALB之间的连接 ECS服务: locals { application_

所以我试图通过terraform将一个公共托管的docker容器启动到我的ECS中。计划完成无误,启动服务,但ECS实例为空,服务只抱怨没有分配给集群的ECS实例

作为我的基础设施的一部分,我定义了:

  • 专有网络
  • 安全小组
  • iam角色
  • ecs集群
  • 使用ALB的ecs服务
考虑到其他一切都启动了,我可以通过ssh连接到ecs(甚至手动拉取并运行docker映像),我非常确定所有的网络都正常,这让我觉得可能是ecs服务和ALB之间的连接

ECS服务:

locals {
  application_name = "${var.environment}-kafka"
}

resource "aws_ecs_service" "kafka" {
  name                                = "${local.application_name}"
  iam_role                            = "${var.iam-role_arn}"
  cluster                             = "${var.ecs-cluster_id}"
  task_definition                     = "${aws_ecs_task_definition.kafka_definition.arn}"
  desired_count                       = "${var.count_kafka}"
  deployment_minimum_healthy_percent  = "${var.deployment_min_healthy_percent}"
  deployment_maximum_percent          = "${var.deployment_max_percent}"
  depends_on  = ["aws_alb_listener.kafka-alb-listener"]

  load_balancer {
    target_group_arn  = "${aws_alb_target_group.kafka-alb-target-group.arn}"
    container_port    = 80
    container_name    = "kafka"
  }

  lifecycle {
    create_before_destroy = true
  }
}

resource "aws_ecs_task_definition" "kafka_definition" {
  family                = "${var.environment}_kafka"
  container_definitions = "${data.template_file.kafka_task.rendered}"

  lifecycle {
    create_before_destroy = true
  }
}

data "template_file" "kafka_task" {
  template= "${file("${path.module}/kafka_task_definition.tpl")}"

  vars {
    kafka_docker_image = "${var.kafka-docker-image_name}:${var.kafka-docker-image_tag}"
  }
}
ALB:


您可能还没有将实例添加到集群中

用户_data.sh:

#!/bin/bash

echo ECS_CLUSTER='${ecs_cluster_name}' > /etc/ecs/ecs.config
在地形配置中:

data "template_file" "user_data" {
  template = "${file("user_data.sh")}"

  vars {
    ecs_cluster_name = "${var.ecs_cluster_name}"
  }
}


resource "aws_launch_configuration" "current" {

  ...

  user_data = "${data.template_file.user_data.rendered}"

  ...

}

我花了两天的时间试图解决这个问题。令人烦恼的是,我已经拥有了所有这些,但是因为我已经硬编码了用户数据,所以我在ecs.config中的ecs\u cluster\u名称和资源上的实际ecs-cluster.name是不同的。非常感谢,我不会发现这个错误。谢谢你的回答,这也是我的解决方案:)请注意,对于TF0.12.0,它是
user\u data=templatefile(“user\u data.sh”,{ecs\u cluster\u name=var.ecs\u cluster\u name})
data "template_file" "user_data" {
  template = "${file("user_data.sh")}"

  vars {
    ecs_cluster_name = "${var.ecs_cluster_name}"
  }
}


resource "aws_launch_configuration" "current" {

  ...

  user_data = "${data.template_file.user_data.rendered}"

  ...

}