在 Terraform 中,如何将支持 ec2 实例附加到 ecs 服务

在 Terraform 中,如何将支持 ec2 实例附加到 ecs 服务

我正在使用 Terraform 将网站上传到 AWS。此 ECS 带有 Docker 映像,当我尝试转到其分配的 A 记录 DNS 名称时,会出现 500 错误。对于此服务,我分配了一些 AWS 资源:

  • AWS 角色
  • AWS 策略
  • AWS 弹性负载均衡器 (elb)
  • AWS ecs 集群
  • AWS ecs 服务
  • AWS ecs 任务定义

Docker 映像:

<some-image>

对应的配置是:

"portMappings": [
  {
    "containerPort": 80,
    "hostPort": 80
  }
]

在本地运行 Docker 容器,我得到了成功的响应。显然我缺少一些资源。

我四处打听,似乎 elb 没有支持容器主机。这是否意味着我需要一个 ec2阿米实例? 以下是我的 aws terraform 配置好像(我尝试 ami 和实例配置但失败了)。

我没有在 Terraform 中看到将这些资源指向 secs 集群或服务的方法。反之亦然,ECS 中无处可寻服务或者任务定义,我是否看到了定义 AWS ami 或实例的方法。如何在 terraform 中配置它?

答案1

简而言之,您不应将 ALB/ELB 直接与 ECS 集群内的实例关联。这是可以做到的,但与该工具的愿景不一致。如果您想要这样做,您可以创建运行 docker 的 EC2 实例,并自行管理容器的启动/停止。

如果您希望使用 ECS 服务和集群来管理容器放置,您可以这样做。通过 terraform、cli、cloudformation、ansible 等完成。

  1. 创建ECS Cluster,建立name和arn

  2. 为 ECS 服务和 ECS 集群实例创建 IAM 角色。这些角色在文档中指定,并在您启动演示集群时创建。

  3. 创建 EC2 启动配置,在用户数据脚本中指定正确的集群名称

  4. 如有必要,请根据所需设置创建 EC2 安全组、VPC、子网

  5. 创建一个自动缩放组,其中包含步骤 2、3 和 4 中的项目。这将用于控制 ECS 集群的大小

  6. 创建用于存储 Docker 镜像的 ECR 存储库。您也可以从私有 Docker 注册表中提取,但步骤 #3 中还需要执行其他步骤。

  7. 创建任务定义,用于描述 ECS 应如何运行您的 docker 容器。任务定义模仿了 docker-compose 的精神,但它们是自己的内容,因此您必须仔细阅读。

  8. 创建 ALB 作为 Web 服务的 LB。它将接受来自客户端的流量并路由到正在运行的 Docker 容器。

  9. 创建一个 ECS 服务,将你的 ALB 链接到在 docker 上运行的 Web 服务

将您的 Docker 映像上传到步骤#6 中创建的 ECR 存储库。

ECS 服务将管理集群内运行的 Web 服务数量,并确保它们加入正确的 ALB。

相关内容