Ansible と Terraform

URL をコピー

Ansible® と HashiCorp Terraform はどちらも、IaC (Infrastructure as Code) アプローチを採用した、IT 環境を自動化するためのオープンソースツールです。両方とも IT インフラストラクチャの管理には欠かせないツールですが、それぞれが専門化された役割を持ち、自動化ライフサイクルにおいて異なる働きをします。 

Terraform は、安全かつ繰り返し可能な方法でインフラストラクチャを構築、変更、管理できるよう設計された専用の IaC ツールです。Ansible は、サーバー間、ネットワークデバイス間、セキュリティツール間、およびハイブリッド環境全体でシステムの構成、ソフトウェアのデプロイ、および複雑なタスクのオーケストレーションを行うために構築された、多目的の IT 自動化エンジンです。効果的かつ先進的な自動化戦略では、包括的なライフサイクル管理を行うのに Terraform と Ansible が組み合わせて使用されます。

大規模な組織が自動化の取り組みを管理および拡張するためにオープンソースのコア Ansible から Red Hat® Ansible Automation Platform に移行することは少なくありません。Ansible Automation Platform は、コア Ansible の機能に追加して、一元化されたガバナンス、Automation Analytics、公式サポートなどのエンタープライズ機能を提供します。インフラストラクチャのプロビジョニングにおける Terraform の役割と Ansible の構成機能、さらに Ansible Automation Platform の自動化スケーリング機能を理解すれば、エンドツーエンドの自動化戦略を策定できます。

Red Hat と Terraform がどのように連携するかを見る

以前は、新しい IT 環境のプロビジョニングは時間とコストがかかる手動の作業でした。しかし、仮想化、コンテナ、クラウドコンピューティングによってインフラストラクチャの変更が大量かつ頻繁に行われるようになったため、手動プロセスに依存していては立ち行かなくなりました。

そこで登場したのが IaC です。 

IaC は、手動による構成やハードウェアの操作ではなく、機械が読み取り可能なコードを通じて IT インフラストラクチャを管理およびプロビジョニングするプロセスです。 

IaC を導入すると、開発者と運用チームの関係が根本的に変化します。IaC では、クラウドコンソールのボタンをクリックしたり、アドホックなスクリプトを実行したりするのではなく、完全なインフラストラクチャ仕様を含む設定ファイルを作成します。これにより、開発、ステージング、プロダクションのいずれの環境にデプロイする場合でも、常に一貫して同じ環境をプロビジョニングできるようになります。コード化および文書化してファイルに記述することで、インフラストラクチャは編集、配布、バージョン管理が可能になります。これにより IaC は、エラーをなくし、デプロイを高速化し、文書化されない変更 (構成ドリフトの原因となる) を阻止するのに役立ちます。  

IaC は、先進的な DevOps とクラウド戦略の基盤となります。この手法では、インストラクチャはコードを通じて定義され、自動的に実行されます。そのため、それらのファイルを、機能するインフラストラクチャに変換するための専用ツールが必要となります。Ansible、Red Hat Ansible Automation Platform、および Terraform は、IaC の迅速化とさらなる活用に役立ちます。Terraform はインフラストラクチャの作成、Ansible はインフラストラクチャ内で実行されるものの構成に特化したツールです。 

IaC の詳細を見る

Red Hat のリソース

Terraform と Ansible は自動化ライフサイクルのそれぞれ異なる部分を得意分野としていますが、これらのツールの有用性を形作っている重要な類似点があります。

エージェントレス設計

Ansible と Terraform はどちらも、旧式の自動化システムよりも実行しやすい、先進的な単純化されたアーキテクチャを備えています。両方ともエージェントレスであるため、管理対象のサーバーやリソースに特別なソフトウェアや永続的なエージェントをインストールする必要がなく、セットアップが大幅に単純化されます。Terraform は主にクラウドプロバイダーのアプリケーション・プログラミング・インタフェース (API) を介して通信します。Ansible は SSH (Secure Shell) や API などの標準プロトコルを使用して管理対象ノードと通信し、タスクを実行します。 

オープンソースとコミュニティ・エコシステム

Ansible と Terraform は、大規模でアクティブなユーザーベースを持つ基礎的なオープンソース・プロジェクトです。このコミュニティ・エコシステムによって、すぐに使用できるコンテンツの膨大なライブラリが提供されています。何千ものプロバイダーが存在するため、Terraform はほぼすべてのパブリッククラウドおよびプラットフォームと連携できます。同様に、Ansible ではほぼすべての構成タスク用のモジュールと Playbook が提供されています。これにより、どちらのツールを使用する場合でも、迅速に解決策とピアサポートを見つけることができます。  

補完的な自動化哲学

最後に、どちらのツールもインフラストラクチャを自動化するという目的は共通しています。それぞれの領域に特化してはいますが、機能的に重複する部分もあります。たとえば、Ansible はプロビジョニングを実行でき、Terraform は基本的な構成スクリプトを実行できます。これはつまり、どちらのツールも、手動でエラーが発生しやすい IT プロセスを繰り返し可能な一貫性のあるコードに変換するという同じ目的を持っているということです。このように目的が共通しているため、Ansible と Terraform を組み合わせることでワークフロー全体を自動化することが可能になります。

Ansible と Terraform によるアプリケーション・デプロイの自動化、インフラストラクチャの最適化、継続的な更新とトラブルシューティングのサポート。(動画の再生時間:2:46)

どちらのツールも IaC の一種ではありますが、主目的とするミッションを実行するための構築は異なります。この違いを理解すれば、タスクに適したツールを選択したり、統合する方法を決定したりするのに役立ちます。 

宣言型と手続き型

最も基本的な違いは、それぞれのツールに何を実行するかを指示する方法にあります。

  • Terraform は、宣言型構成言語である HCL (HashiCorp Configuration Language) を使用します。宣言型では、望ましい最終状態、つまりインフラストラクチャをどのようにしたいかを定義します。Terraform のエンジンは、その状態に到達するために必要な手順を自動的に決定し、すべての依存関係を管理します。
  • Ansible は自動化に対して主に手続き型 (または命令型) のアプローチを採用しており、人間が読める YAML で記述された Playbook を使用します。手続き型アプローチでは、手順 (望ましい結果を得るための方法) をステップバイステップで明確に定義します。このようにタスクベースの方法をとっているので実行順序が明確であり、精確な制御やトラブルシューティングの単純化に役立ちます。ただし、基盤となる Ansible モジュールの多くも宣言型で動作するので、変更はターゲットシステムがまだ目的の構成状態になっていない場合にのみ実行されます。 

ステートフルとステートレス

この違いは、各ツールが時間の経過によるインフラストラクチャの変化をどのように認識および追跡するかに影響します。

  • Terraform はステートフルです。信頼できる唯一の情報源として機能する状態ファイルを持ち、プロビジョニングしたすべてのインフラストラクチャ・リソースとその現在の構成を追跡します。Terraform はこのファイルによってリソースのライフサイクル全体を管理し、プロビジョニング、スケーリング、または不要になったリソースの廃止を確実に行えるため、この状態ファイルは重要です。
  • Ansible は基本的にステートレスです。インフラストラクチャ全体を追跡する永続的な状態ファイルは持ちません。代わりに、動作にべき等性 (同じタスクを何度実行しても、不必要な変更は行われず毎回同じ結果が得られるという性質) があります。Ansible は、変更を加える前にターゲットシステムに直接クエリを実行することで、必要な構成を実現します。

イミュータブル (不変) とミュータブル (可変)

インフラストラクチャの更新の処理については、これらのツールは異なる哲学に基づいて設計されています。

  • Terraform はイミュータブル、つまり変更不可能なインフラストラクチャを志向しています。大幅な変更や更新を行う必要がある場合、Terraform では古いリソースを削除し、正しく構成された新しいリソースに置き換える操作が必要になることが少なくありません。この戦略により、時間とともに複雑な構成ミスが積み重なるリスクが軽減されます。
  • Ansible はミュータブル、つまり変更可能なインフラストラクチャを志向して構築されており、既存の実行中のシステムにインプレースで変更を加えることに優れています。これは、Day 1 および Day 2 に発生する、セキュリティパッチの適用、オペレーティングシステムの更新、簡単には交換できないサーバー上のファイアウォール設定の調整などのタスクを実行するのに必要です。

構成ドリフト

構成ドリフトとは、プロダクション環境で実行されているインフラストラクチャがソースコードで定義されている内容から逸脱することを言います。どちらのツールでもこれに対処できますが、その方法は異なります。

  • Terraform は永続的な状態ファイルを使用して積極的にドリフトを検出します。現在実行中のインフラストラクチャを状態ファイルと比較し、齟齬があれば即座にフラグを立てることができます。
  • Ansible は通常、継続的な実行とタスクのべき等性によって常に望ましい構成を適用することでドリフトを軽減します。これにより、システムが想定された状態から大きく逸脱することを防止できます。

Terraform と Ansible の比較から得られる最も重要なポイントは、どちらか一方を選択するのではなく、両方を併用することが最適であるということです。それぞれのツールの長所を活用すれば、インフラストラクチャのプロビジョニングからアプリケーションの継続的なデプロイと構成まで、完全なエンドツーエンドの自動化を実現できます。

ライフサイクル管理

最も広く受け入れられている方法は、これらのツール間での直接的かつ連続的な引き継ぎです。Day 0 のプロビジョニングは Terraform で処理し、サーバーやネットワークなどのクラウド・インフラストラクチャを作成します。インフラストラクチャが正常にプロビジョニングされたら、Ansible で Day 1 の構成を引き継ぎ、セキュリティポリシーの適用、必要なソフトウェアのインストール、新しいリソースへのアプリケーションコードのデプロイを行います。さらに、パッチ適用、更新、構成の変更などの Day 2 操作も Ansible でカバーします。

Ansible によるオーケストレーション

複雑なワークフローの場合は、Ansible Automation Platform を中央オーケストレーターとして使用し、Terraform の実行をより広範な自動化プロセス内に包含できます。Ansible Automation Platform は事前プロビジョニングのタスクを実行し、Terraform のデプロイをトリガーしてインフラストラクチャを構築できます。また、プロビジョニング後にアプリケーション構成などのタスクを実行したり、追跡のために ServiceNow などの IT サービス管理 (ITSM) ツールと統合したりすることもできます。

Terraform と Red Hat Ansible Automation の統合

Red Hat は、Ansible 向け Terraform コンテンツの認定コレクションを提供しています。これには、HashiCorp Terraform (HCP Terraform および Terraform Enterprise) を使用して IaC を管理およびプロビジョニングするのに役立つモジュールが含まれています。このコレクションは、AWS CloudFormation、Azure Resource Manager、Helm など、他のクラウド・プロビジョニング・ツールと Ansible を統合した場合と同様の自動化機能をサポートしています。

さらに、HashiCorp は Ansible を操作するための Terraform プロバイダーを提供しています。  Terraform プロバイダーとは、Terraform が管理できるリソースとデータソースを追加するプラグインです。これらのプロバイダーは、Terraform がインストールして使用できるように、Terraform 構成内で宣言する必要があります。Terraform 向け Ansible プロバイダーを使用すると、Terraform が Ansible インベントリーを直接管理できるようになります。プロバイダーによって引き継ぎが自動化されるので、新しくプロビジョニングされたインフラストラクチャに関する情報を手動で収集して Ansible に渡すための別のインベントリー・プラグインは必要ありません。Ansible インベントリーの使用を Terraform 構成内でユーザーが直接定義できるため、新しく作成されたホストに対してすぐに Ansible Playbook を実行し、構成タスクを実行できます。

Ansible 向け Terraformプロバイダーについて詳しく読む

Terraform と Ansible はどちらもオープンソースのツールであり、IaC の基盤を提供します。しかし、これらの統合ワークフローを大規模な組織全体で拡張および管理する場合、セキュリティと一貫性に関する重大な課題が生じます。 Red Hat Ansible Automation Platform は、この複雑さを軽減し、コミュニティが提供する自動化機能を戦略的なエンタープライズ・ソリューションへと変換します。これにより、Terraform によるプロビジョニングと Ansible による継続的な構成の両方にわたる複雑な自動化プロセスを管理するために必要な一元管理が実現します。  

オープンソースを中核とする Ansible Automation Platform は、組織にライフサイクル全体のサポートを提供する、信頼できるサブスクリプション製品であり、世界中の何千人ものコントリビューターの経験とインテリジェンスが活用されているコミュニティ版の Ansible を基盤として構築されています。Ansible Automation Platform は、組織による自動化ワークロードの作成、管理、スケーリングを支援します。ハイブリッドクラウド、エッジロケーション、ネットワーク、セキュリティ、インフラストラクチャ、およびその他の多くのユースケースを含む、エンドツーエンドの自動化をデプロイするための、柔軟で安定したセキュリティ重視の基盤を提供します。

Ansible Automation Platform についてさらに詳しく

リソース

Red Hat Ansible Automation Platform を使用して CI/CD を最適化する

Red Hat Ansible Automation Platform が、複雑な IT 環境の効率的な管理、セキュリティ運用の自動化、デプロイメント期間の短縮にどう役立つのかを解説します。

すべての Red Hat 製品のトライアル

Red Hat の無料トライアルは、Red Hat 製品をハンズオンでお試しいただける無料体験版です。認定の取得に向けた準備をしたり、製品が組織に適しているかどうかを評価したりするのに役立ちます。

関連情報

Podman とは?をわかりやすく解説

Podman は、Red Hat が開発したオープンソースのコンテナ管理ツール。Docker の代替手段として、Linux システムでのコンテナの開発、管理、実行用に推奨されるツールです。

InstructLab とは

InstructLab は、プライベートデータを使用して大規模言語モデルをカスタマイズするプロセスを単純化します。

OpenJDK と Oracle JDK の違いとは?をわかりやすく解説

両者は機能面でよく似ていますが、OpenJDK は Oracle、Red Hat、コミュニティが維持するオープンソース・プロジェクトですが、Oracle JDK では有料ライセンスが必要です。

オープンソースリソース

注目の製品

  • Red Hat Ansible Automation Platform

    エンタープライズ規模で自動化を実装するプラットフォーム。お客様が自動化導入のどの段階にいる​かは関係ありません。

関連記事