Terraform

menu icon

Terraform

このガイドでは、プログラマーがインフラストラクチャーを安全かつ効率的に構築、変更、バージョン管理できるようにするツールであるTerraformについて、知っておくべき情報をすべてご紹介します。

Terraformとは

Terraformは、HashiCorpによって作成されたオープンソースの「Infrastructure as Code」ツールです。

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

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

Infrastructure as Code(IaC)を選ぶ理由

Terraformのメリットをよりよく理解するためには、まずInfrastructure as Code(IaC)の利点を理解することが役立ちます。 IaCを使用すると、開発者はインフラストラクチャーをコード化でき、プロビジョニングの自動化、高速化、再現が可能となります。 これは、バージョン管理、継続的インテグレーション継続的デプロイなど、アジャイルとDevOpsの実践の重要なコンポーネントです。

Infrastructure as Codeは、以下を可能にします。

  • スピードの向上:リソースを導入したり接続したりする必要がある場合、自動化していればインターフェースを手動でナビゲートするよりも高速です。
  • 信頼性の向上:インフラストラクチャーが大きければ、リソースの構成を誤ったり、サービスを間違った順序でプロビジョニングしたりすることが容易に起こるようになります。 IaCでは、リソースは常に宣言されたとおりにプロビジョニングされ、構成されます。
  • 構成ドリフトの防止:構成のドリフトは、環境をプロビジョニングした構成が実際の環境と一致しなくなったときに発生します。(以下の「不変のインフラストラクチャー」を参照してください。)
  • 実験、テスト、最適化のサポート:Infrastructure as Codeを使用すると、新しいインフラストラクチャーのプロビジョニングが非常に高速かつ簡単になるため、多くの時間とリソースを投資することなく、実験的な変更を加えてテストできます。結果が好ましい場合は、新しいインフラストラクチャーを本番用にすばやくスケールアップできます。

詳しくは、「Infrastructure as Codeとは?」を参照してください。

Terraformを選ぶ理由

開発者が他のInfrastructure as CodeツールよりもTerraformを使用することを選ぶ主な理由はいくつかあります。

  • オープンソース:Terraformは、プラットフォームへのプラグインを構築する貢献者たちから成る大規模なコミュニティーによって支えられています。 使用しているクラウド・プロバイダーに関係なく、プラグイン、拡張機能、専門的なサポートは簡単に見つけることができます。 これはまた、常に新しいメリットや改善が追加され、Terraformが急速に進化することを意味します。
  • プラットフォーム非依存:どのクラウド・サービス・プロバイダーでも使用できることを意味します。他のほとんどのIaCツールは、単一のクラウド・プロバイダーで動作するように設計されています。
  • 不変のインフラストラクチャー:ほとんどのInfrastructure as Codeツールは変更可能なインフラストラクチャーを作成します。つまり、ミドルウェアのアップグレードや新しいストレージ・サーバーなどの変更に対応するためにインフラストラクチャーを変更できます。 変更可能なインフラストラクチャーによる危険性は、構成ドリフトです。変更が積み重なっていくと、さまざまなサーバーやその他のインフラストラクチャー要素の実際のプロビジョニングが元の構成からさらに「ドリフト」し、バグやパフォーマンスの問題の診断と修正が困難になるためです。Terraformは、不変インフラストラクチャーをプロビジョニングします。つまり、環境が変更されるたびに、その変更を反映する新しい構成に現在の構成が置き換えられ、インフラストラクチャーが再プロビジョニングされるということです。 さらに良いことには、以前の構成をバージョンとして保持して、必要に応じたロールバックを可能にすることができます。

Terraformモジュール

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

Terraformプロバイダー

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

Terraformと Kubernetes

時折、TerraformとKubernetesが混同され、それぞれの実際の役目について混乱が生じることがあります。 真実は、それらは互いの代替手段ではなく、実際、効果的に連携するということです。

Kubernetesは、オープンソースのコンテナ・オーケストレーション・システムで、開発者はこれによりコンピューティング・クラスター内のノードへのデプロイを設定し、コンテナ化されたワークロードをアクティブに管理して、それらのワークロードの状態がユーザーの意図と一致するようにします。

一方、Terraformは、はるかに範囲の広いInfrastructure as Codeツールであり、開発者は複数のパブリッククラウドとプライベートクラウドにまたがる完全なインフラストラクチャーを自動化できます。

Terraformは、Infrastructure as a Service(IaaS)Platform as a Service(PaaS)、またはSoftware as a Service(SaaS)レベルの機能を自動化して管理することができ、これらのすべてのプロバイダーに対してこれらのリソースをすべて並行して構築できます。 Terraformを使用して、Kubernetes(特に、クラウド・プラットフォーム上のマネージドKubernetesクラスター)のプロビジョニングを自動化し、クラスターへのアプリケーションの導入を自動化できます。

Terraformと Ansible

TerraformとAnsibleは、どちらもInfrastructure as Codeツールですが、2つの間にはいくつかの重要な違いがあります。

  • Terraformは純粋に宣言型ツールですが(上記を参照)、Ansibleは宣言型と手続き型の両方の構成を組み合わせています。 手続き型構成では、インフラストラクチャーを目的の状態にプロビジョニングする手順、つまり正確な方法を指定します。 手続き型の構成はより多くの手間がかかりますが、より柔軟な管理を可能にします。
  • Terraformはオープンソースです。Ansibleは、Red Hatによって開発および販売されています。

IBMとTerraform

IBM Cloud Schematicsは、Terraformに基づくIBMの無料のクラウド自動化ツールです。 IBM Cloud Schematicsを使用すると、Terraformベースのインフラストラクチャーの自動化を完全に管理できるため、アプリケーションの構築により多くの時間を費やし、環境の構築に費やす時間を短縮できます。

IBM Cloud Schematicsの使用方法の詳細をご覧ください。

Terraformの詳細については、IBMidにサインアップして、IBM Cloudアカウントを作成してください。