Terraform:无法提供aws-ecs自动缩放集群



我们使用Terraform来提供AWS自动缩放组和ECS集群。我们决定在ECS集群中添加一个容量提供商,并允许其管理我们的扩展,根据https://docs.aws.amazon.com/AmazonECS/latest/developerguide/cluster-auto-scaling.html

但是,当我们添加容量提供程序资源并通过集群资源上的capacity_providers属性将其连接到集群时,terraform plan开始抱怨"Cylce"。我不知道该如何配置它——看起来资源之间的每个"连接"都设置正确,但terraform似乎无法提供这一点:

resource "aws_ecs_cluster" "cluster" {
name               = "${var.environment}_cluster"
capacity_providers = [aws_ecs_capacity_provider.capacity_provider.name]
}
resource "aws_ecs_capacity_provider" "capacity_provider" {
name = "${var.environment}_capacity_provider"
auto_scaling_group_provider {
auto_scaling_group_arn = aws_autoscaling_group.autoscaling_group.arn
managed_termination_protection = "ENABLED"
managed_scaling {
maximum_scaling_step_size = 1
minimum_scaling_step_size = 1
status                    = "ENABLED"
target_capacity           = 100
}
}
}
resource "aws_launch_configuration" "launch_configuration" {
name_prefix                 = "${var.environment}_launch_configuration-"
image_id                    = data.aws_ami.ecs_os.id
instance_type               = var.cluster_instance_type
iam_instance_profile        = var.ecs_instance_profile
security_groups             = var.security_groups["ecs_tasks"]
associate_public_ip_address = true
key_name                    = aws_key_pair.ssh_access.key_name
user_data                   = data.template_file.launch_user_data.rendered
lifecycle {
create_before_destroy = true
}
}
data "template_file" "launch_user_data" {
template = "${file("${path.module}/taskdefs/user_data")}"
vars = {
ecs_cluster = aws_ecs_cluster.cluster.name
efs_id      = var.efs_id
aws_region  = data.aws_region.current.name
}
}
resource "aws_autoscaling_group" "autoscaling_group" {
name                  = "${var.environment}_asg"
max_size              = 4
min_size              = 1
vpc_zone_identifier   = [var.public_subnet_id]
launch_configuration  = aws_launch_configuration.launch_configuration.name
health_check_type     = "EC2"
protect_from_scale_in = true
}

terraform plan输出:

Error: Cycle: module.compute.aws_ecs_cluster.cluster, module.compute.data.template_file.launch_user_data, module.compute.aws_launch_configuration.launch_configuration, module.compute.aws_autoscaling_group.autoscaling_group, module.compute.aws_ecs_capacity_provider.capacity_provider

编辑:需要明确的是:我明白事实上存在一个循环。我的问题是,在没有自行车的情况下,如何可能提供地形?我看不出这怎么可能。

首先,您可以这样定义集群的名称。

locals {
cluster_name = "${var.environment}_cluster"
}              

然后

resource "aws_ecs_cluster" "cluster" {
name               = local.cluster_name
capacity_providers = [aws_ecs_capacity_provider.capacity_provider.name]
}
data "template_file" "launch_user_data" {
template = "${file("${path.module}/taskdefs/user_data")}"
vars = {
ecs_cluster = local.cluster_name
efs_id      = var.efs_id
aws_region  = data.aws_region.current.name
}
}

这将避免循环。

我希望这会有所帮助。

我以前也注意到了这一点,但最终没有使用容量提供程序。

如果您进入AWS ECS web控制台,那么手动创建容量提供程序的唯一位置似乎是INSIDE AN EXISTING CLUSTER。它似乎不是AWS内部的独立资源,而是集群的子资源。我认为这才是真正的鸡和蛋的问题。

我认为需要有一种方法让terraform创建集群(没有容量提供程序(,然后创建容量提供程序,最后将其分配给集群。闻起来像个错误报告。

相关内容

  • 没有找到相关文章