我正在使用 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 等完成。
创建ECS Cluster,建立name和arn
为 ECS 服务和 ECS 集群实例创建 IAM 角色。这些角色在文档中指定,并在您启动演示集群时创建。
创建 EC2 启动配置,在用户数据脚本中指定正确的集群名称
如有必要,请根据所需设置创建 EC2 安全组、VPC、子网
创建一个自动缩放组,其中包含步骤 2、3 和 4 中的项目。这将用于控制 ECS 集群的大小
创建用于存储 Docker 镜像的 ECR 存储库。您也可以从私有 Docker 注册表中提取,但步骤 #3 中还需要执行其他步骤。
创建任务定义,用于描述 ECS 应如何运行您的 docker 容器。任务定义模仿了 docker-compose 的精神,但它们是自己的内容,因此您必须仔细阅读。
创建 ALB 作为 Web 服务的 LB。它将接受来自客户端的流量并路由到正在运行的 Docker 容器。
创建一个 ECS 服务,将你的 ALB 链接到在 docker 上运行的 Web 服务
将您的 Docker 映像上传到步骤#6 中创建的 ECR 存储库。
ECS 服务将管理集群内运行的 Web 服务数量,并确保它们加入正确的 ALB。