Terraformとは
IBMのTerraformソリューションはこちら 登録してクラウドの最新情報を受け取る
コンピューターのモニター、サーバー、雲、ドットのピクトグラムをコラージュしたイラスト
Terraformとは

HashiCorpが開発したオープンソースの「Infrastructure as Code(コードとしてのインフラストラクチャー、IaC)」ツールであるTerraformを使えば、プログラマーがインフラストラクチャーを安全かつ効率的に構築、変更、バージョン管理することができます。

Terraformとは、開発者がHCL(HashiCorp Configuration Language)と呼ばれる高水準の構成言語を使用して、アプリケーションを実行するためのクラウドまたはオンプレミスのインフラストラクチャーの望ましい「最終状態」を記述できる宣言型コーディング・ツールです。次に、その最終状態に到達するための計画を生成し、その計画を実行してインフラストラクチャーをプロビジョニングします。

Terraformはシンプルな構文を使用し、複数のクラウドとオンプレミスのデータセンターにわたってインフラストラクチャーをプロビジョニングし、構成の変更に応じてインフラストラクチャーを安全かつ効率的に再プロビジョニングします。これが現在最も人気のあるインフラ自動化ツールの1つとなっている理由です。組織でハイブリッドクラウド環境またはマルチクラウド環境の導入を計画している場合は、Terraformについて知りたい、または知る必要があるとお考えのことでしょう。

DaaSで柔軟な職場を実現

Desktop as a Service(DaaS)を利用して、企業がオンプレミスでアプリケーションを展開するのと同等のパフォーマンスとセキュリティーの達成を可能にする方法をご覧ください。

関連コンテンツ 登録してアプリのモダナイゼーションに関するガイドを受け取る
コードとしてのインフラストラクチャー(IaC)を選択する理由

Terraformのメリットをよりよく理解するには、まずコードとしてのインフラストラクチャー(IaC)のメリットを理解するといいでしょう。IaCを使用すると、開発者はインフラストラクチャーをコード化することで、プロビジョニングを自動化、高速化し、再現可能にできます。IaCは、バージョン管理や継続的インテグレーション継続的デプロイメントといったアジャイルおよびDevOps手法の重要な要素です。

コードとしてのインフラストラクチャーは、次のことに活用できます。

  • 速度の改善:リソースの導入や接続が必要な場合、インターフェースを手動でナビゲートするよりもオートメーションの方が高速です。

  • 信頼性の向上:インフラストラクチャーが大規模になると、リソースの設定を間違えたり、サービスのプロビジョニングの順番を間違えたりしやすくなります。IaCでは、リソースは常に宣言どおりにプロビジョニングされ、設定されます。

  • 構成ドリフトを防ぐ:構成ドリフトは、環境をプロビジョニングした設定が実際の環境と一致しなくなった場合に発生します。(「不変のインフラストラクチャー」を参照してください)

  • 実験・テスト・最適化をサポート:コードとしてのインフラストラクチャーは、新しいインフラストラクチャーのプロビジョニングをはるかに迅速かつ容易にするため、多くの時間とリソースを投資することなく、実験的な変更を行い、テストを実施できます。結果が問題なければ、新しいインフラストラクチャーを本番用にすぐにスケールアップできます。
Terraformを選ぶ理由

開発者が他のコード型インフラストラクチャー・ツールではなく、Terraformを選ぶ主な理由は次のとおりです。

  • オープンソース:Terraformは、プラットフォームへのプラグインを構築する貢献者の大規模なコミュニティーに支えられています。使用しているクラウド・プロバイダーに関係なく、プラグインや拡張機能および専門的なサポートを簡単に見つけられます。このことは、Terraformが急速に進化し、常に新しいメリットが加わり、改善されていることも意味します。

  • プラットフォームにとらわれない:これは、任意のクラウド・サービス・プロバイダーで利用可能であることを意味します。他のほとんどのIaCツールは、単一のクラウド・プロバイダーで動作するように設計されています。

  • 不変のインフラストラクチャー:ほとんどのコードとしてのインフラストラクチャー・ツールでは、変更可能なインフラストラクチャーを構築できるため、インフラストラクチャーに変更を加えてミドルウェアのアップグレードや新しいストレージ・サーバーなどの変化に対応できます。変更可能なインフラストラクチャーの危険性は構成ドリフトにあります。つまり、変更が積み重なると、さまざまなサーバーやその他のインフラストラクチャー要素の実際のプロビジョニングが元の構成からさらに「ずれ(ドリフト)」、バグやパフォーマンスの問題の診断と修正が困難になってくるということです。Terraformは不変のインフラストラクチャーを実現します。つまり、環境を変更するたびに、現在の構成は変更を考慮した新しい構成に置き換えられ、インフラストラクチャーが再プロビジョニングされるのです。さらによいことに、以前の構成をバージョンとして保持して、必要あるいは要望に応じてロールバックを可能にします。
Terraformモジュール

Terraformモジュールは、一緒に使用される複数のインフラストラクチャー・リソース用の再利用可能な小さいTerraform設定です。Terraformモジュールは、再利用・設定可能な構造により複雑なリソースを自動化できるため、便利です。非常に単純なTerraformファイルを記述するだけでも、モジュールが作成されます。モジュールは、子モジュールという他のモジュールを呼び出すことができ、これにより設定の組み立てをより迅速かつ簡潔にすることができます。モジュールは、同じ設定内または別の設定内で複数回呼び出すこともできます。

Terraformプロバイダー

Terraformプロバイダーとは、リソース・タイプを実装するプラグインです。プロバイダーには、ユーザーに代わって(通常はパブリッククラウド・プロバイダーからの)サービスを認証して接続するために必要なすべてのコードが含まれています。使用するクラウド・プラットフォームとサービスのプロバイダーを見つけて設定に追加し、そのリソースを使用してインフラストラクチャーをプロビジョニングできます。プロバイダーは、Terraformコミュニティーや個々の組織によって開発やサポートが行われているほぼすべての主要なクラウド・プロバイダーおよびSaaS製品などで利用できます。詳細なリストについては、Terraformのドキュメント(ibm.com外部へのリンク)を参照してください。

TerraformとKubernetesの比較

TerraformとKubernetesは、それぞれの機能が混同されることがあります。実際にはこの2つは二者択一ではなく、効果的に連携します。

Kubernetesはオープンソースのコンテナ・オーケストレーション・システムなので、開発者はコンピュート・クラスター内のノードへのデプロイメントをスケジュールし、コンテナ化されたワークロードを能動的に管理して、その状態をユーザーの意図に一致した状態にできるようになります。

一方、Terraformは、より広範囲に適用できるコード型インフラストラクチャー・ツールなので、開発者は複数のパブリッククラウドとプライベートクラウドにまたがる万全なインフラストラクチャーを自動化できるようになります。

Terraformは、サービスとしてのインフラストラクチャー(IaaS)サービスとしてのプラットフォーム(PaaS)、またはサービスとしてのソフトウェア(SaaS)レベルの機能を自動化して管理し、すべてのプロバイダーに対してこれらすべてのリソースを同時に構築できます。Terraformを使用すると、Kubernetes(特にクラウド・プラットフォーム上のマネージドKubernetesクラスター)のプロビジョニングの自動化やクラスターへのアプリケーションのデプロイメントの自動化が可能になります。

TerraformとAnsibleの比較

TerraformとAnsibleは両方ともコードとしてのインフラストラクチャー・ツールですが、この2つの間にはいくつかの大きな違いがあります。

  • Terraformは純粋に宣言型ツール(上記を参照)ですが、Ansibleは宣言型設定と手続き型設定の両方を組み合わせています。手続き型設定では、インフラストラクチャーを望ましい状態にプロビジョニングする手順または正確な方法を指定します。手続き型設定は手間がかかりますが、より多くの制御が可能になります。

  • Terraformはオープンソースですが、AnsibleはRed Hatによって開発・販売されています。
関連ソリューション
IBM Cloud Schematics

IBM Cloud Schematicsは、宣言型Terraformテンプレートを必要なクラウド・インフラストラクチャーに提供することでオートメーションを実現します。

IBM Cloud Schematicsの詳細はこちら
参考情報 コードとしてのインフラストラクチャー(IaC)とは

コードとしてのインフラストラクチャー(IaC)はインフラストラクチャーのプロビジョニングを自動化し、組織がより迅速に、リスクとコストを抑えながらクラウド・アプリケーションの開発・導入・拡張を可能にします。

Kubernetesとは

Kubernetes は、アプリケーションのデプロイ、管理、スケーリングを自動化するオープンソースのコンテナ・オーケストレーション・プラットフォームです。 Kubernetesで費用対効果の高いクラウドネイティブの開発を実現する方法をご紹介します。

サービスとしてのインフラストラクチャー(IaaS)とは

IaaSとそのコンポーネントや優位性、料金体系に関する基礎とIaaSとPaaS、SaaS、BMaaS、コンテナ、サーバーレスとの関連性に関する概要。

次のステップ

DevOpsの準備はできていますか。市場が要求する速度でソフトウェアとサービスを提供するには、チームはスピード感を持って繰り返し実験し、新しいバージョンを頻繁にデプロイし、フィードバックとデータに基づいて進めていく必要があります。最も成功しているクラウド開発チームは、最新のDevOps文化と手法を採用し、クラウドネイティブ・アーキテクチャーを使ってクラス最高のツールからツールチェーンを組み立て、生産性を最大限に引き出しています。

DevOps ソリューションの詳細はこちら 無料でお試しください