なぜこの疑問が生まれたのか
現在私が働いている現場では、構成管理ツールとしてterraformとansibleを利用しています。
ですが私の中でこの二つの技術がごっちゃになってしまい、お互いどの様な部分で強みを持っているのかを知る必要があると考えまとめてみました。
terraformについて
主な特徴と自分なりの理解:
- 宣言型:インフラの状態をコードで記述。terraformがその状態になるよう自動で構築
- 不変インフラ:変更時は新しいリソースをデプロイし置き換え。環境の差異を防ぎやすい
- 状態管理: .tfstateファイルでインフラの現在の状態を把握。コードとの差分を検知できる
- プロバイダーエコシステム: AWS, Azure, GCPなど多様なクラウドサービスを一元管理できる
- 実行計画(terraform plan): 適用前に変更内容を詳細に確認でき、意図しないミスを防ぐことができる
ansibleについて
主な特徴と自分なりの理解:
- エージェントレス: 管理対象サーバーにSSHで直接操作できる
- 冪等性: 何度実行しても常に同じ結果。二重実行による問題を防ぐ
- YAMLベース: Playbookは読みやすく書きやすいYAML形式で記述する
terraformとasnibleの違い
terraformとansibleは、どちらもIaCのツールですが、その役割と得意とする領域に違いがあります。
terraformは主にインフラの環境構築(プロビジョニング)と管理に特化しています。ざっくりいうとシステムを動かすために必要な「土台」を「準備して使えるようにすること」に特化しているということです。
クラウドやオンプレ、ネットワーク、データベース、ストレージといった基盤となるリソースの新規構築、変更、削除を得意としています。
インフラの「こういう形にしたい!」ということをコードで書くと、Terraformがその通りに環境を作ってくれるというがメインの役割になります。
一方、AnsibleはOSやミドルウェアの構成管理、およびアプリケーションのデプロイに特化しています。trraformで作成した仮想マシンやサーバーに対して、OSの初期設定、必要なソフトウェアパッケージのインストール、サービスの起動・停止、ユーザー管理、アプリケーションのデプロイといった、より細かい粒度での設定や操作を行います。
大まかに、terraformはインフラの構成管理、ansibleはOS・ミドルウェアの構成管理に利用される、と言うことです。
参考文献