web-dev-qa-db-ja.com

Terraform:EKS / ECSでのDocker Composeアプリのデプロイ

TL; DR

私はオープンソースのサーバーアプリケーションDocker Composeで実行を使用しています。 PostgreSQL DBやRedisなど、いくつかのサービスがあります。

Terraformを使用してこのアプリケーションをAWSに完全なIaCで最適にデプロイするにはどうすればよいですか?


これまでの解決策

1. AWS ecs-cli

ecs-cli 現在 supports Amazon ECSでdocker compose構成を送信します。

ただし、Terraformワークフローと統合できるとは思いません(大したことではないかもしれません)。私が確信しているのは、ecs-cliCloudFormationではサポートされていないであることです この問題 のとおり、現時点ではまだ開いています。したがって、Terraformにも簡単に追加できないと思います。

2.ハードEKSの方法

  • docker-compose.ymlファイルを取得して、kubectl YAMLに変換します。
  • (パッケージをアップグレードするたびにそうする準備をしてください)。
  • Terraformの+ EKS APIを使用してデプロイします(最小限 )。

しかし、それはまだ完全にIaCではありません。そして、ソースリポジトリでdocker-composeが変更するたびに設定を再変換する必要があります。そして、それは多くの仕事のように聞こえます。

3. Helmチャートの使用

  • アプリケーションのHelmチャートを作成します。
  • Terraformを実行してクラスターを起動します。
  • helmprovider を指定してTerraformを実行し、Helmを使用してアプリケーションをクラスターにインストールします。

4. [OK] k8s Kompose

私が読んだ Kompose は、Docker Compose構成をk8s構成に自動的に変換できますが、それらはAWSに移植されていないようであり、Terraformについて話していないようです。

5. [OK]ダーティAMIソリューション

  • Packerを使用してカスタムEC2 AMIを構築します。
  • Terraformを使用して、DB、Redis、およびすべての権限/ネットワークなどを設定します。
  • カスタムAMIでEC2インスタンスを開始します。
  • AMIには、(カスタマイズされた)アプリケーションコード、特にdocker-compose.ymlが含まれています。そしてDockerイメージ。
  • AMIはDocker Compose systemctlサービスを開始します。

それは一種の害になるでしょう:長いビルド、難しいモニタリング、スケーリングなし。

サイドノート

  • 私はfull IaCが必要だと述べました。それが私が意味することは:
    1. masterに書き込まれた構成(およびそれのみ)は、何がデプロイされているかを示します。
    2. 私のチームが他のコマンドを実行する必要なく、デプロイは完了します。基本的に、CI/CDまたはシングルプッシュアンドゴーのいずれかで機能します。
    3. IaCで監視とアラートを簡単に構成できます。
  • 一部のサービスをAWSコンポーネント(つまり、RDSによるPostgreSQLサービス、およびElastiCacheによるRedisサービス)に置き換えたいと思います。
  • アプリケーションhappensApache Superset になります。ただし、このDocker Composeの問題に対する最も一般的なアプローチとして何が考えられているかも疑問です。
5
Pinimo

1.待って見て

ecs-cli-v2 はCloudFormationやTerraformとの統合が適切になる可能性があります。

2. Helmチャートを使用する

質問で述べたように。 Helmをパラメーター化するための(少しの)努力が必要ですが、おそらく最良のソリューションです。

参照: Helmの概要

3. Docker Swarm + CloudFormation + Terraform

Docker Swarm now acceptsdocker-compose.ymlファイルからの入力。テンプレートを見つけて設定できます ここ 。構成したら、Terraformインフラストラクチャに統合できます。

これ(3歳) チュートリアル AWSでDocker Swarmモードを使用する方法を説明します。

コンテナを起動するには、必要に応じて(完全に調査されていません。フィードバックを歓迎します)、Terraformの local-exec を使用できます。このようにして、マスターノードにSSHで接続し、docker stack deployおよびその他の同様のコマンドを実行しながら、すべてIaCスタイルで書き留めることができます。

2
Pinimo