APC Automation blog

ネットワーク自動化支援のAutomation Coordinatorを提供する、エーピーコミュニケーションズ ACTの自動化ブログ

Terraformとは

Terraformとは

はじめに

こんにちは、エーピーコミュニケーションズ iTOC事業部ACTの相場です。
今回はTerraformについて紹介します。
Terraformとは何なのか?どんなことが出来るのか?特徴は?といった疑問や、クラウド自動化やIaC、構成管理について情報収集をしている方は、是非本記事を読んでいただけると嬉しいです。

Terraformとは

まず、Terraformとは何なのかについて説明します。
TerraformはHashiCorp社が提供するプロビジョニングソフトウェアです。

Terraform公式ページのリンク

プロビジョニングソフトウェアとは、インフラを構成するサーバーなどを作成する役割を持ったソフトウェアです。
コードによってインフラを構築するInfrastructure as Code(IaC)ツールの一つです。

Terraformでは、主にクラウド上でのインフラ構築を自動的に行うソフトウェアとなっています。
AWS CLIなどのCLIクラウドを管理する場合とTerraformでクラウドを管理する場合では、以下のような違いがあります。

CLIとTerraformの比較表

項目 CLI Terraform
設定方法 命令型
具体的な手順をコマンドで明示的に定義する。
宣言型
インフラの状態をコードで明示的に定義する。
冪等性 コマンドごとに異なる。
同じコマンドを再実行しても、異なるインフラ状態になる可能性がある。
殆どのリソースで冪等性を確保。
同じコードを再実行しても、同じインフラ状態になる。
再現性 スクリプトの再実行で可能。
結果は実行の順序やタイミングに依存する。
コードにより再現性を保証。
同じコードから常に同じインフラ状態が生成される。
状態管理 無し。
リソースの状態を追跡する方法を開発する必要がある。
状態ファイルによりインフラの状態を自動的に管理する。
コードの再利用 スクリプトとして実装することで再利用可能。 モジュールとしてコードを再利用可能。コードの集合体として再利用可能なコンポーネント

CLIの場合は管理をする必要がない簡単なタスクを手早く実行する点において便利です。
Terraformは大規模なインフラストラクチャの管理や、コードによる厳密なインフラ状態の制御を必要とする場合に適しています。

Terraformが提供しているクラウドリソースを管理するためのプラグインとTerraformを組み合わせると、サーバー、データベース、ロードバランサーなどインフラの構築に欠かせないパーツを作成できます。
対応しているクラウドサービスは、AWS、Azure、Google Cloudなどの主要なクラウドサービスを含めた複数のクラウドサービスです。

他のクラウドリソース管理ツールとの比較表

管理ツール 対応クラウド 記法 公式サポート コミュニティサポート
Terraform 複数 HCL Official Tireの範囲内 広範囲
CloudFormation AWS JSON/YAML 対応しているAWSリソース 限定的
Bicep Azure Bicep DSL 対応しているAzureリソース 限定的
Resource Manager Google Cloud JSON/YAML 対応しているGoogle Cloudリソース 限定的

Official Tireについては後ほど説明します。

また、クラウド以外でもTerraformを利用することができます。
例えばVMwareKubernetesなど、様々なプラットフォームにもTerraformは対応しています。

なぜTerraformで管理が実現できるのか

Terraformでの管理は、プロバイダーによって実現しています。
プロバイダーとは、Terraformが様々なサービスや製品とやり取りするためのプラグインです。
管理したいサービスが提供しているAPIを介してTerraformで操作を行います。

Terraform Providerの一覧ページのリンク

Terraform公式やTerraformのパートナー企業、コミュニティも合わせるとおよそ、4000を超えるプロバイダーが存在します。(2024年8月時点)

Terraformで利用可能なプロバイダーには3つのTierがあります。
Official』、『Partner』、『Community』です。

OfficialはHashiCorpが所有、維持管理を行っているプロバイダーです。
主要なプラットフォームを対象としており、それぞれのプロバイダーが独自のリリースサイクルを持っています。
公式からリリースされているため、他Tierのプロバイダーと比べて安定性、信頼性が高いです。
また、継続的なサポートやアップデートも行われています。
その他にも、Officialのプロバイダーはドキュメント類が豊富にそろっています。
管理したい対象サービスや製品がOfficialのプロバイダーであれば安心して利用できます。

Partnerはパートナー企業が所有、維持管理を行っているプロバイダーです。
HashiCorpとパートナー導入プロセスを経て、認定された企業が提供を行っています。
パートナー企業が提供するプロバイダーは、それぞれのパートナーが所有するサービスや製品をTerraformで扱うためのものです。
パートナー企業が提供するプロバイダーは、機能追加・改善、バグ修正などのサポートが積極的に行われます。
そのため、Officialと同様にPartnerのプロバイダーで管理可能なサービスや製品の管理から始めてみるのも良いです。
また、PartnerのプロバイダーもOfficialほどではありませんがドキュメントが整っています。

Communityはコミュニティが所有、維持管理を行っているプロバイダーです。
OfficialやPartnerで提供されていない技術やサービスをTerraformで管理できるように、プロバイダーの提供が行われています。
これらのプロバイダーの所有者は世界中の開発者、エンジニア、Terraformユーザーです。
Communityのプロバイダーは所有者によってドキュメントの充実度はまちまちです。
ですが、人気の高いプロバイダーや技術やサービスのコミュニティはドキュメントが充実しています。

Terraformの特徴

Terraformの特徴として、HCLという独自の言語を使用します。
独自の言語と書かれると取っつきにくいように感じますが、人間が比較的簡単に読み書きできるように設計された非常にシンプルな記法です。表現がやや複雑になりますが、JSONで記述することもできます。

シンプルな記法ですのでプログラミングを熟知していなくても、コードを見ればどのようなインフラが構築されたのか分かりやすいです。
これがTerraformの特徴であり、シンプルなコードをインフラ構成のドキュメントとすることで、厳密に定義されたネットワークの状態を確認することができます。これによって、特定の個人へのインフラの管理や構築を依存させません。(=属人化の解消)

また、十分な検証が行われた既存の手順をTerraformに落とし込むことで、インフラ構築作業における人為的なミスを減らすことができます。(=インフラ品質の向上)

Terraform単体では上記のようなメリットがありますが、Gitなどのバージョン管理システムを組み合わせることで、更なるメリットを生み出すことができます。
例えば、コードの変更履歴を確認することで過去にどのようなインフラが構築されたのか追跡することができます。
その他には、コードの変更により問題が発生した場合でも、変更履歴を確認して正常に動作していたコードに切り戻すことが可能になります。

このようにTerraformを他のシステムと組み合わせることで、更なるインフラの運用、構築の効率化を実現できます。

Terraformで出来ること

Terraformのコード

Terraformのコードを使うことで簡単にクラウド上にリソースを作成することができます。
以下のようなシンプルな記法を使い、リージョンやリソースのタイプを指定します。

EC2インスタンスを作成するサンプルコード

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_instance" "tf_blog_ec2" {
  ami           = "ami-0b9593848b0f1934e" 
  instance_type = "t2.micro" 
}

さらにコードを拡張することで、以下の構成図の各種インフラリソースを作成することが出来ます。

今回は作成するリソースにtf_blogのプレフィックスをつけています。
tf_blogでリソースの検索を行い、作成されていることを確認します。

コード実行後の各種リソースの状態

Terraformのコミュニティ

コミュニティの比較は同一条件下での比較が難しいです。
ですが、大まかにコミュニティの規模を把握することで、その技術を採用すべきかの判断基準を一つ設けることができます。
以下の表から、Terraformのコミュニティ規模は他のIaCツールと比較して大きいことが分かります。

ツール ソース クラウド コントリビューター スター ライブラリ Stack Overflow
Terraform オープン 複数 1,621 33,019 9,641 13,370
Pulumi オープン 複数 1,402 12,723 15 327
CloudFormation クローズ AWS ? ? 369 7,252
Heat オープン 複数 395 379 0 103

詳解Terraform 第3版』の『IaCのコミュニティの比較』から引用。

コミュニティの規模が大きいことで以下のような利点があります。
コミュニティ製のプラグイン拡張機能が利用可能。
オンラインで情報を得る機会が増える。(ブログやStack Overflowなど)
Terraformを扱う協力者の確保がしやすい。(従業員、コンサルタントSIerなど)

Terraformはコミュニティ活動により、ツールセットやベストプラクティス、学習のためのリソースなどが整っている状態です。
様々なナレッジが集まることで、より使いやすいソフトウェアとして成熟していきます。

まとめ

TerraformはITインフラにおける自動化を実現するためのソフトウェアです。
公式やパートナー企業、コミュニティから提供されるプロバイダーによって、サービスや技術の管理を実現しています。 コードによってインフラの状態を定義することで、特定の個人に依存しないインフラ構築・管理が可能になります。また、シンプルな記法のHCLにより可読性の高いコードを書くことが可能です。 人気のツールであるTerraformは公式からの情報以外に、コミュニティから提供される情報も豊富です。
公式がサポートしているサービス以外にも、様々なサービスに関する情報が集まります。 複数のサービスや技術を組み合わせたインフラ環境において、Terraformは他の管理ツールにはない独自の強みを持っています。
複雑なインフラ環境でなかなか業務の効率化を進められない、という方がいらっしゃいましたら是非一度Terraformの導入を検討してみてください。

私たちエーピーコミュニケーションズではITインフラ自動化推進をご検討の方に向けて、オンラインでの無料相談を随時実施しています。(30分~1時間程)
Terraformについてのご相談に限らず、自動化推進の為の情報収集としてもご活用いただけますので、よろしければお気軽にご利用ください。

【無料相談・お問合せフォーム】 https://www.ap-com.co.jp/contact/act.html