TL;DR
我使用开源服务器应用程序在 Docker Compose 上运行。它有一些服务,包括 PostgreSQL DB 和 Redis。
如何使用 Terraform 以完整的 IaC 方式最好地将此应用程序部署到 AWS?
到目前为止的解决方案
1. AWS ecs-cli
ecs-cli https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_CLI.html now supports https://aws.amazon.com/about-aws/whats-new/2018/06/amazon-ecs-cli-supports-docker-compose-version-3/发送docker compose
Amazon ECS 中的配置。
然而,我不认为它可以与 Terraform 工作流程集成(这可能不是什么大惊小怪的事情)。我确定的是ecs-cli
is CloudFormation 不支持, 按照这个问题 https://github.com/aws-samples/ecs-refarch-cloudformation/issues/17,此时仍然开放。所以我认为它也不能轻易添加到 Terraform 中。
2. 硬 EKS 方式
- 带上你的
docker-compose.yml
文件,将其翻译为kubectl
YAML.
- (准备好每次软件包升级时都这样做)。
- 使用 Terraform 的 + EKS API 进行部署(最少example https://github.com/foxutech/nodejs-k8s-aws).
但这还不是完全的 IaC。每次 docker-compose 在源存储库中发生更改时,您都必须重新翻译您的配置。听起来工作量很大。
3. 使用 Helm 图表
- 为应用程序编写 Helm 图表。
- 运行 Terraform 以启动集群。
- 仍然运行 Terraform
helm
provider https://www.terraform.io/docs/providers/helm/index.html使用 Helm 在集群上安装应用程序。
4. [不行] k8s Kompose
I read Kompose https://kompose.io/可以自动将 Docker Compose 配置转换为 k8s 配置,但它们似乎没有移植到 AWS 上,更不用说 Terraform 了。
5. [不好] 肮脏的 AMI 解决方案
- 使用 Packer 构建自定义 EC2 AMI。
- 使用 Terraform,设置 DB、Redis 和所有权限/网络/等。
- 使用自定义 AMI 启动 EC2 实例。
- AMI 包含(定制的)应用程序代码,尤其是
docker-compose.yml
。还有 Docker 镜像。
- AMI 启动 Docker Compose
systemctl
服务。
这会有点伤害:构建时间长、监控困难、无法扩展。
旁注
- I mentioned I need full IaC. What I mean by it is:
- 书面配置(仅此)
master
告诉您部署了什么。
- 部署将完成,我的团队无需运行任何其他命令。它基本上可以在 CI/CD 或单推即用上工作。
- 监控和警报可在 IaC 中轻松配置。
- 我希望用AWS组件替换一些服务(即用RDS替换PostgreSQL服务,用ElastiCache替换Redis服务)。
- 应用程序happens to be 阿帕奇超级集 https://github.com/apache/superset。然而,我也想知道解决这个 Docker Compose 问题的最佳通用方法是什么。
1. 观望
谁知道,ecs-cli-v2 https://github.com/aws/amazon-ecs-cli-v2可能会更好地与 CloudFormation 和/或 Terraform 集成。
2. 使用 Helm 图表
正如问题中提到的。可能是最好的解决方案,尽管需要(一点)努力来参数化 Helm。
也可以看看:头盔入门 https://helm.sh/docs/chart_template_guide/getting_started/.
3.Docker Swarm + CloudFormation + Terraform
现在 Docker Swarmaccepts https://docs.docker.com/engine/swarm/stack-deploy/输入来自docker-compose.yml
文件。可以找到并配置模板here https://hub.docker.com/editions/community/docker-ce-aws?tab=resources。配置完成后,它可以集成到 Terraform 基础设施中。
这个(3岁)tutorial https://stelligent.com/2017/02/21/docker-swarm-mode-on-aws/解释如何在 AWS 上使用 Docker Swarm 模式。
要启动容器,如有必要(未充分调查,欢迎反馈),您可以使用 Terraformlocal-exec https://www.terraform.io/docs/provisioners/local-exec.html。这样你就可以通过 SSH 连接到主节点并运行docker stack deploy
和其他类似的命令,同时仍然以 IaC 风格编写。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)