Terraform:在EKS/ECS上部署Docker Compose应用程序



TL;DR

我使用一个在Docker Compose上运行的开源服务器应用程序。它有一些服务,包括PostgreSQL数据库和Redis。

如何使用Terraform在完整的IaC中将此应用程序最好地部署到AWS


迄今为止的解决方案

1.AWSecs-cli

ecs-cli现在支持在亚马逊ECS中发送docker compose配置。

然而,我不认为它可以与Terraform工作流集成(这可能不是一件大事(。我可以肯定的是,ecs-cli在CloudFormation中不受支持,根据这个问题,目前仍然打开。所以我认为它也不能很容易地添加到Terraform中。

2.心电图的硬方法

  • 把你的docker-compose.yml文件翻译成kubectlYAML
  • (准备在每次升级软件包时执行此操作(
  • 使用Terraform的+EKS API进行部署(最小示例(

但这还不完全是IaC。每次docker在源存储库中撰写更改时,您都必须重新翻译您的配置。听起来工作量很大。

3.使用Helm图

  • 为应用程序编写Helm图
  • 运行Terraform启动集群
  • 仍然使用helm提供程序运行Terraform,以便在集群上安装带有Helm的应用程序

4.[不确定]k8s组合

我读到Kompose可以自动将Docker Compose配置转换为k8s配置,但它们似乎没有在AWS上移植,更不用说Terraform了。

5.[不好]脏的AMI解决方案

  • 使用Packer构建自定义EC2 AMI
  • 使用Terraform,设置DB、Redis和所有权限/网络等
  • 使用自定义AMI启动EC2实例
  • AMI包含(自定义的(应用程序代码,尤其是docker-compose.yml。还有Docker图像
  • AMI启动Docker Composesystemctl服务

这会有点伤人:构建时间长,监控困难,无法扩展。

旁注

  • 我提到我需要完整的IaC。我的意思是:
    1. master上的书面配置(仅此配置(告诉您部署了什么
    2. 部署将在我的团队无需运行任何其他命令的情况下完成。它基本上可以在CI/CD或单推'n'go上工作
    3. 监控和警报可以在IaC中轻松配置
  • 我希望用AWS组件替换一些服务(即用RDS替换PostgreSQL服务,用ElastiCache替换Redis服务(
  • 应用程序恰好是Apache Superset。然而,我也在想,对于这个Docker Compose问题,什么是最好的通用方法

1。观望

谁知道呢,ecs-cli-v2可能会更好地与CloudFormation和/或Terraform集成。

2.使用Helm图表

正如问题中提到的。可能是最好的解决方案,尽管需要(少量(努力来参数化Helm。

另请参阅:Helm入门。

3.Docker Swarm+CloudFormation+Terraform

Docker Swarm现在接受来自docker-compose.yml文件的输入。可以在此处找到并配置模板。一旦配置好,它就可以集成到Terraform基础设施中。

本(3年前(教程介绍了如何在AWS上使用Docker Swarm模式。

要启动容器,如果需要(未完全调查,欢迎反馈(,可以使用Terraform的local-exec。通过这种方式,您可以将SSH连接到主节点并运行docker stack deploy和其他类似的命令,同时仍然以IaC风格编写所有命令。

相关内容

  • 没有找到相关文章