Ansible vs Terraform: 構成管理 vs プロビジョニング
Terraform は state を伴って宣言的にインフラをプロビジョニングし追跡します。Ansible は冪等なタスクで既存のマシンを構成しオーケストレーションします。
Terraform は、追跡される state ファイルを用いてクラウドリソースを作成・管理する宣言的な IaC です。Ansible はエージェントレスな自動化ツールで、冪等な playbook を用いて SSH 経由でサーバーを構成しタスクをオーケストレーションします。両者は少し重なりますが、異なる主要な問題を解決します - プロビジョニング vs 構成。
| Ansible | Terraform | |
|---|---|---|
| 主な役割 | 構成 / オーケストレーション | インフラのプロビジョニング |
| モデル | やや命令的、冪等 | 宣言的 + state |
| state 追跡 | なし(タスクを push) | state ファイル |
| エージェント | エージェントレス(SSH) | API 駆動 |
| 最適な用途 | OS/app 構成、アドホックなタスク | クラウドリソースのライフサイクル |
CI で
Terraform を使ってクラウドリソースを立ち上げて追跡し、その後 Ansible でマシンを構成したりオーケストレーション手順を実行したりします - この 2 つはしばしば一緒に使われます。pipeline がクラウドインフラのプロビジョニングだけなら、Terraform 単体の方がクリーンです。主に既存サーバーを構成したり手続き的なタスクを実行したりするなら、Ansible の方が適します。どちらも自動化ステップとして CI でうまく動きます。
高速化する
Terraform の provider と Ansible の collection を cache し、両方を CI で実行します。plan/apply と playbook の実行は CI runner 上で起こります。より高速な managed runner はそれらを短縮します。
結論
クラウドリソースのプロビジョニングと追跡: Terraform。マシンの構成や手続き的なタスクのオーケストレーション: Ansible。多くのチームは両者を組み合わせます - Terraform が構築し、Ansible が構成します。