Terraform:在 EKS/ECS 上部署 Docker Compose 应用程序
Terraform: Deploying a Docker Compose app on EKS/ECS
TL;DR
我在 Docker Compose 上使用开源服务器应用程序 运行ning。它有一些服务,包括 PostgreSQL DB 和 Redis。
如何使用 Terraform 在完整的 IaC 中最好地将此应用程序部署到 AWS?
到目前为止的解决方案
1。 AWS ecs-cli
ecs-cli
now supports 在 Amazon ECS 中发送 docker compose
配置。
但是,我不认为它可以与 Terraform 工作流集成(这可能不是什么大惊小怪)。据我所知,ecs-cli
在 CloudFormation 中不受支持,根据 this issue,目前仍然开放。所以我认为它也不能轻易添加到 Terraform 中。
2。困难的 EKS 方式
- 获取您的
docker-compose.yml
文件,将其翻译成 kubectl
YAML。
- (准备每次包升级时都这样做)。
- 使用 Terraform 的 + EKS API 进行部署(最少 example)。
但这还不是完全的 IaC。每次 docker-compose 源存储库中的更改时,您都必须重新翻译您的配置。听起来工作量很大。
3。使用 Helm 图表
- 为应用程序编写 Helm 图表。
- 运行 Terraform 以启动集群。
- 仍然 运行 Terraform
helm
provider 在集群上使用 Helm 安装应用程序。
4。 [不正常] k8s Compose
我读到 Kompose 可以自动将 Docker Compose 配置转换为 k8s 配置,但它们似乎没有移植到 AWS 上,更不用说 Terraform 了。
5。 [不好] 肮脏的 AMI 解决方案
- 使用 Packer 构建自定义 EC2 AMI。
- 使用 Terraform,设置数据库、Redis 和所有权限/网络/等
- 使用自定义 AMI 启动 EC2 实例。
- AMI 包含(定制的)应用程序代码,尤其是
docker-compose.yml
。还有 Docker 张图片。
- AMI 启动 Docker Compose
systemctl
服务。
这会有点伤害:构建时间长、监控困难、无法缩放。
旁注
- 我提到我需要 完整的 IaC。我的意思是:
master
上的书面配置(而且只有它)告诉您部署了什么。
- 部署将完成,我的团队无需 运行 任何其他命令。它基本上适用于 CI/CD 或单推'n'go。
- 可以在 IaC 中轻松配置监控和警报。
- 我想用 AWS 组件替换一些服务(即 PostgreSQL 服务用 RDS,Redis 服务用 ElastiCache)。
- 申请恰好是Apache Superset。但是,我也想知道什么是解决此 Docker Compose 问题的最佳通用方法。
1。观望
谁知道,ecs-cli-v2
可能与 CloudFormation and/or Terraform 集成得更好。
2。使用 Helm 图表
如题中所述。可能是最好的解决方案,尽管需要(很少)努力来参数化 Helm。
另请参阅:Getting started with Helm。
3。 Docker Swarm + CloudFormation + Terraform
Docker 现在蜂拥而至 accepts inputs from a docker-compose.yml
file. The template can be found and configured here。配置完成后,它可能会集成到 Terraform 基础设施中。
这个(3 岁)tutorial 解释了如何在 AWS 上使用 Docker Swarm 模式。
要启动容器,如有必要(未完全调查,欢迎反馈),您可以使用 Terraform 的 local-exec
。通过这种方式,您可以通过 SSH 连接到主节点和 运行 docker stack deploy
以及其他类似的命令,同时仍然以 IaC 风格记录下来。
TL;DR
我在 Docker Compose 上使用开源服务器应用程序 运行ning。它有一些服务,包括 PostgreSQL DB 和 Redis。
如何使用 Terraform 在完整的 IaC 中最好地将此应用程序部署到 AWS?
到目前为止的解决方案
1。 AWS ecs-cli
ecs-cli
now supports 在 Amazon ECS 中发送 docker compose
配置。
但是,我不认为它可以与 Terraform 工作流集成(这可能不是什么大惊小怪)。据我所知,ecs-cli
在 CloudFormation 中不受支持,根据 this issue,目前仍然开放。所以我认为它也不能轻易添加到 Terraform 中。
2。困难的 EKS 方式
- 获取您的
docker-compose.yml
文件,将其翻译成kubectl
YAML。 - (准备每次包升级时都这样做)。
- 使用 Terraform 的 + EKS API 进行部署(最少 example)。
但这还不是完全的 IaC。每次 docker-compose 源存储库中的更改时,您都必须重新翻译您的配置。听起来工作量很大。
3。使用 Helm 图表
- 为应用程序编写 Helm 图表。
- 运行 Terraform 以启动集群。
- 仍然 运行 Terraform
helm
provider 在集群上使用 Helm 安装应用程序。
4。 [不正常] k8s Compose
我读到 Kompose 可以自动将 Docker Compose 配置转换为 k8s 配置,但它们似乎没有移植到 AWS 上,更不用说 Terraform 了。
5。 [不好] 肮脏的 AMI 解决方案
- 使用 Packer 构建自定义 EC2 AMI。
- 使用 Terraform,设置数据库、Redis 和所有权限/网络/等
- 使用自定义 AMI 启动 EC2 实例。
- AMI 包含(定制的)应用程序代码,尤其是
docker-compose.yml
。还有 Docker 张图片。 - AMI 启动 Docker Compose
systemctl
服务。
这会有点伤害:构建时间长、监控困难、无法缩放。
旁注
- 我提到我需要 完整的 IaC。我的意思是:
master
上的书面配置(而且只有它)告诉您部署了什么。- 部署将完成,我的团队无需 运行 任何其他命令。它基本上适用于 CI/CD 或单推'n'go。
- 可以在 IaC 中轻松配置监控和警报。
- 我想用 AWS 组件替换一些服务(即 PostgreSQL 服务用 RDS,Redis 服务用 ElastiCache)。
- 申请恰好是Apache Superset。但是,我也想知道什么是解决此 Docker Compose 问题的最佳通用方法。
1。观望
谁知道,ecs-cli-v2
可能与 CloudFormation and/or Terraform 集成得更好。
2。使用 Helm 图表
如题中所述。可能是最好的解决方案,尽管需要(很少)努力来参数化 Helm。
另请参阅:Getting started with Helm。
3。 Docker Swarm + CloudFormation + Terraform
Docker 现在蜂拥而至 accepts inputs from a docker-compose.yml
file. The template can be found and configured here。配置完成后,它可能会集成到 Terraform 基础设施中。
这个(3 岁)tutorial 解释了如何在 AWS 上使用 Docker Swarm 模式。
要启动容器,如有必要(未完全调查,欢迎反馈),您可以使用 Terraform 的 local-exec
。通过这种方式,您可以通过 SSH 连接到主节点和 运行 docker stack deploy
以及其他类似的命令,同时仍然以 IaC 风格记录下来。