文化としてのDevOpsが勢いを増している方法で、AnsibleやTerraformなどのツールは大きな需要と人気を目撃しています。
どちらのツールもInfrastructureas Code(IaC)と見なされます コードとインフラストラクチャの展開に役立つソリューション。 Ansibleは一般に「CM」と略される構成管理ソリューションとして機能しますが、Terraformはサービスオーケストレーションまたはプロビジョニングツールです。
重複があり、これらの用語は必ずしも相互に排他的ではないことに注意してください。これが人々を混乱させるものであり、これが私がAnsibleとTerraformを比較する理由です。
これらのツールの用途、長所と短所について説明します。これは、プロジェクトでAnsibleとTerraformのどちらを使用するかを決定するのに役立ちます。
AnsibleとTerraform:これらのツールとは何ですか?
まず、これらの人気のあるDevOpsツールとは何かを簡単に見てみましょう。
AnsibleはIT自動化ツールです。システムの構成、ソフトウェアの導入、継続的な導入やダウンタイムゼロのローリングアップデートなどのより高度なITタスクの実行が可能です。
Terraformとは何ですか?
Terraformは、インフラストラクチャを安全かつ効率的に構築、変更、およびバージョン管理するためのツールです。 Terraformは、既存の人気のあるサービスプロバイダーだけでなく、カスタムの社内ソリューションも管理できます。
これら2つのツールの違いを強調する前に、まず構成管理とオーケストレーションとは何かを理解しましょう。
構成管理とオーケストレーション
構成管理は、サーバーとソフトウェアを含むインフラストラクチャの望ましい一貫した状態が常に満たされることを保証する一連のプロセスと手順です。つまり、時間の経過とともに変更が加えられたときに、システムが期待どおりに機能することを確認する方法です。
CMツールは、IT展開がより速く、段階的で、反復可能で、スケーラブルで、予測可能であり、管理された資産を期待される状態に戻す望ましい状態を維持することを保証します。
Ansibleなどのツールは、構成管理を行うために使用されます。
オーケストレーションに関しては、オーケストレーションツールを使用して、サーバーだけでなく、データベース、キャッシュ、ロードバランサー、キュー、監視、サブネット構成、ファイアウォール設定、ルーティングルール、SSL証明書、およびインフラストラクチャの他のほとんどすべての側面をプロビジョニングできます。 、主にパブリッククラウドインフラストラクチャ。
Terraformはオーケストレーションツールです。サーバーインスタンス自体をプロビジョニングするように設計されており、それらのサーバーを構成する作業は他のツールに任せています。
手続き型言語と宣言型言語
DevOpsツールは、適用時にアクションを実行する方法に基づいて、手続き型または宣言型に分類できます。
手順 宣言型であるのに対し、コードに正確な手順を配置する必要があるアプリケーションについて説明します。 結果が達成されるプロセスではなく、必要なものを正確に「宣言」します。
Ansibleは、目的の最終状態を達成するために、段階的なタスクを指定するコードを記述する手続き型スタイルを使用します。
TerraformやAWSCloudFormationなどのツールはすべて、目的の最終状態を指定するコードを記述するプロセスを定義する際に宣言型です。たとえば、5つのEC2インスタンスが必要な場合、それはコードが実行された後の正確な数です。
AnsibleとTerraform:比較
Terraformを使用することの長所と短所を見てみましょう:
- Terraformは、クラウドインフラストラクチャ全体を維持し、それらのリソースをコードとして利用できるようにします。これにより、増分変更プロセスが非常に簡単になります。
- モジュラーデザイン。
- シンプルで習得しやすい
- 作成されたリソースの状態を維持します。 Terraformによって作成されたすべてのオブジェクトは、他のプロセスによって削除された場合に再作成されます。
- CI/CDパイプラインとのシームレスな統合。
- 既存のリソースをインポートして、Terraform状態にすることができます。
-
terraform plan
を実行する場合 、既存のリソースに適用されようとしている変更が表示されます。これにより、DevOpsエンジニアは、特に変更が期待どおりでない場合に、これから行う変更についての洞察を得ることができます。
- ロールバックはありません。すべてを破棄する必要があり、tfスクリプトを再実行する必要があります。
- エラー処理は成熟していません。 Terraform
v.12.20
現在 コンシューマーが利用できる2つの新しい関数がありますtry()
およびcan()
。 - Terraformスクリプトを状態ファイルから直接作成することは許可されていません。
- Terraformツールはまだ開発中であり、毎月多くのベータリリースが行われています。
- すべてのアイテムをインポートできるわけではありません。
terrafom import
コマンドは、一度に1つのリソースのみをインポートできます。つまり、TerraformのインポートをAWS VPCなどのリソースのコレクション全体にポイントして、すべてをインポートすることはまだできません。
Ansibleを使用することの長所と短所
それでは、Ansibleの良い点と悪い点を見てみましょう。
- シンプルで習得しやすい
- エージェントレス
- 導入プロセス全体を自動化して開発者に優しいものにする
- YAMLベースのシンプルで読みやすいスクリプト(Ansible Playbooks)
- 巨大なモジュールのサポート
- Ansible銀河と呼ばれる中央リポジトリを利用して、Ansibleコンテンツを検索して再利用できます。
- UIサービスの欠如。最終的にAnsibleタワーに進化したAWXには、まだ大きな改善の余地があります。
- 状態のメンテナンスはありません。 Ansibleは依存関係を追跡しません。一連の一連のタスクを実行し、終了、失敗、またはエラーが発生すると停止します。
- Windows OSのサポートに関しては、目標に達していません。 Ansibleは、Windowsのサポートを拡張するための初期段階にあります。
- プレイブックに広範なロジックを備えた複雑なスクリプトを作成する必要がある場合は、それほど簡単ではありません。
- エンタープライズサポートはまだ成熟しておらず、信頼性もありません。
- 複雑なプレイブックのデバッグに関しては、説明的なエラーメッセージがありません。
TerraformまたはAnsible?どちらがあなたに適していますか?
私を信じてください、答えるのは簡単な質問ではありません。要件に大きく依存するためです。
現実の世界では、IT組織内では、1つのツールに依存することはなく、さまざまなツールを組み合わせて使用して、目的の結果を達成します。
AnsibleツールとTerraformツールはどちらも、多くのことを非常にうまく実行します。そして、私の個人的な好みは、オーケストレーション/プロビジョニングにTerraformを使用し、構成管理にAnsibleを使用することです。
Terraformは、インフラストラクチャのオーケストレーション(クラウドリソースの管理)に使用すると、最高の機能を発揮します。これが、Terraformの目的であるためです。
一方、Ansibleは、構成管理タスク(ソフトウェアとマシンのプロビジョニング)に最適で最適化されています。オーケストレーションタスクもそれを使用して実行できますが、それはそれが行うことの一部にすぎません。
私の提案-実行したいタスクに最適で元々作成されたものを使用してください。
しかし、それは経験則でもありません。すべてに1つのツールを使用することを好む人がいて、それが機能するからです。
どちらのツールにも、自動化のためのコード環境としてインフラストラクチャを設計する際の独自の利点と制限があります。そして、はい、成功は完全にどのツールをどのジョブに使用するかを知ることにかかっています。
AnsibleとTerraformに関するいくつかのことをより明確にしたことを願っています。それでも質問や提案がある場合は、コメントセクションでお知らせください。