Terraform 中的 ECS 服务如何连接到 AWS 自动缩放组

Posted

技术标签:

【中文标题】Terraform 中的 ECS 服务如何连接到 AWS 自动缩放组【英文标题】:How is an ECS service in Terraform connected to an AWS autoscaling group 【发布时间】:2020-04-22 01:05:12 【问题描述】:

我是 Terraform 和 ECS 的新手,我正在使用 this example 创建一个 ECS EC2 类型的集群,该集群将自动扩展并使用应用程序负载均衡器。

我的问题是:main.tf 中的这段代码如何 sn-p

resource "aws_ecs_service" "test" 
  name            = "tf-example-ecs-ghost"
  cluster         = "$aws_ecs_cluster.main.id"
  task_definition = "$aws_ecs_task_definition.ghost.arn"
  desired_count   = "$var.service_desired"   
  iam_role        = "$aws_iam_role.ecs_service.name"

  load_balancer 
    target_group_arn = "$aws_alb_target_group.test.id"
    container_name   = "ghost"
    container_port   = "2368"
  

  depends_on = [
    "aws_iam_role_policy.ecs_service",
    "aws_alb_listener.front_end",
  ]

连接到资源aws_autoscaling_group.app

resource "aws_autoscaling_group" "app" 
  name                 = "tf-test-asg"
  vpc_zone_identifier  = ["$aws_subnet.main.*.id"]
  min_size             = "$var.asg_min"
  max_size             = "$var.asg_max"
  desired_capacity     = "$var.asg_desired"
  launch_configuration = "$aws_launch_configuration.app.name"

由于aws_ecs_service 资源定义中没有指向aws_autoscaling_group 资源的插值变量,ECS 服务定义如何知道在哪里可以找到此自动缩放组?它引用了一个目标组,但目标组不引用自动缩放组。这就是为什么我很困惑,因为资源“ecs-service”和资源“aws-autoscaling”之间没有明显的参考。或者代码可能丢失了?请尽可能提供详尽的解释。

【问题讨论】:

【参考方案1】:

没有。

ECS 服务安排在 ECS 集群上,该集群是实例的逻辑分组,可以是 EC2 或 Fargate(甚至不在 AWS 上,ECS Anywhere!)或混合。

如果您想将 EC2 实例加入 ECS 集群,那么您需要安装 ECS 代理,将其配置为加入正确的集群,并为实例提供必要的 IAM 权限以便能够与 ECS 交互。您可以使用独立的 EC2 实例或自动扩展组来执行此操作。

对于目标组,负载均衡器就是这样知道将流量发送到哪些对象。在直接 EC2 实例的情况下,您可以通过某种方式向目标组注册 EC2 实例。使用 ECS 服务,可以将这些配置为向目标组注册服务中的所有任务。然后,当应该发送到目标组的流量到达负载均衡器时,该流量将发送到相关的 ECS 任务。请注意,一个负载均衡器可以有多个目标组,其中配置了不同的负载均衡器侦听器规则,以将流量发送到不同的目标组(或执行固定响应或重定向等),以便负载均衡器可以支持多个 ECS 服务。

【讨论】:

事实上,我正在使用已安装 ECS 代理的 ECS 优化 AWS 实例,但这是否意味着我应该手动创建 EC2 实例并将它们添加到目标组以使集群自动扩展? 如果您的 ASG 中的实例已经在 ECS 集群中,那么 ASG 已经在处理将它们添加到 ECS 集群中。 您的意思是,如果 ASG 启动配置包含安装了 ecs 代理的实例,它们会自动加入集群,对吗? 他们将加入default ECS 集群或ECS_CLUSTER/etc/ecs/ecs.config 中设置的任何内容 非常感谢。我想我明白了。

以上是关于Terraform 中的 ECS 服务如何连接到 AWS 自动缩放组的主要内容,如果未能解决你的问题,请参考以下文章

阿里云ECS无法连接到服务器怎么解决?

从 ECS 集群中的 docker nodejs EC2 容器连接到 Redis Elasticache 集群

Terraform:ECS 服务 - InvalidParameterException

如何将我的自动缩放组连接到我的 ecs 集群?

如何使用 boto3 从连接到 ECS 任务的网络接口获取公共 IP

无法连接到 ECS 中链接的 docker 容器