Terraformとは?IaCツールの特徴・Ansible/CloudFormationとの違いを解説

Terraformとは?

Terraform(テラフォーム)とは、HashiCorp社が開発するクラウドインフラをコードで定義・構築・管理するためのオープンソースツールです。Infrastructure as Code(IaC)の代表格であり、AWS、Google Cloud、Azureなど複数のクラウドプロバイダーに対応しています。

「terraform」は英語で「惑星を人が住めるように改造する」という意味のSF用語。その名の通り、クラウドという広大な空間を、コードの力でビジネスに必要なインフラに「改造」するツールです。

Terraformの基本的な動作 ― Write・Plan・Apply

Terraformの操作は3つのステップで進みます。

Write(書く)

HCL(HashiCorp Configuration Language)という独自の設定言語で、「どんなインフラが欲しいか」を宣言的に記述します。たとえば「EC2インスタンスを2台、t3.mediumで起動し、VPC内のサブネットに配置する」といった内容です。

Plan(計画する)

terraform planコマンドを実行すると、現在のインフラの状態と、コードに記述した理想の状態の差分を表示します。「何が作成され、何が変更され、何が削除されるか」が事前に確認できるため、意図しない変更を防げます。

Apply(適用する)

terraform applyコマンドで、Planで確認した内容を実際にクラウド上に適用します。APIを通じてリソースが自動作成・変更・削除されます。

Terraformの核心 ― State(状態管理)

Terraformが他のIaCツールと一線を画す重要な概念がState(ステートファイル)です。

Terraformは、自分が管理しているインフラの「現在の状態」をterraform.tfstateというJSONファイルに記録します。terraform planはこのStateファイルと実際のクラウドリソースを比較して差分を計算します。

チーム開発では、このStateファイルをローカルに置くのではなく、リモートバックエンド(S3 + DynamoDB、Terraform Cloud、GCS等)に保存して共有することが必須です。複数人が同時にapplyして競合することを防ぐためのロック機能も備わっています。

他のIaCツールとの比較

ツール 対象 Terraformとの違い
AWS CloudFormation AWSのみ AWS公式で統合が深いが、AWS以外では使えない。Terraformはマルチクラウド対応
Ansible サーバー内部の設定 Ansibleは「サーバーの中身」を設定。Terraformは「サーバー自体」を作る。併用が一般的
Pulumi マルチクラウド Python/TypeScriptなどの汎用言語で記述可能。Terraformの独自言語HCLに抵抗がある場合の選択肢
CDK for Terraform(CDKTF) マルチクラウド Terraformの上にCDKの開発体験を乗せたもの。TypeScriptでTerraformリソースを定義

Terraformのエコシステム

Provider(プロバイダー):クラウドサービスとの接続を担当するプラグインです。AWS Provider、Google Cloud Provider、Azure Providerなど、主要クラウドはもちろん、Datadog、PagerDuty、GitHub Actionsなど3,000以上のサービスに対応しています。

Module(モジュール):よく使うインフラ構成をパッケージ化した再利用可能なコンポーネントです。Terraform Registryで公開されており、「VPCの構築」「EKSクラスタの構築」などを数行で呼び出せます。

Terraform Cloud / Enterprise:HashiCorp社が提供するマネージドサービスです。State管理、チーム権限、ポリシー適用(Sentinel)、コスト見積もりなどの機能を提供します。

Terraform導入の注意点

Stateファイルの取り扱い:Stateファイルにはインフラの全情報(パスワードやIPアドレスを含む場合あり)が記録されるため、暗号化とアクセス制限が必須です。ローカルに置いたままGitにコミットすることは絶対に避けてください。

大規模環境でのState分割:1つのStateファイルですべてのインフラを管理すると、planやapplyの実行時間が長くなり、影響範囲も広がります。ネットワーク層、アプリケーション層、データベース層などで分割するのがベストプラクティスです。

ライセンス変更の影響:2023年にTerraformのライセンスがMPL2.0からBSL(Business Source License)に変更されました。これを受けてオープンソースコミュニティはフォーク版の「OpenTofu」を立ち上げています。導入時はライセンスの影響を確認しましょう。

よくある質問(FAQ)

Q. Terraformの学習にはどれくらい時間がかかりますか?

A. HCLの基本文法とAWSの基礎知識があれば、1〜2週間で基本的なインフラ構築ができるようになります。モジュール設計やState管理の設計など、チームでの本格運用には1〜2ヶ月の経験が必要です。

Q. 既存のクラウドリソースをTerraform管理下に置けますか?

A. terraform importコマンドで既存リソースをStateに取り込むことは可能ですが、対応するHCLコードは手動で書く必要があります。大規模な移行にはterraformerなどのサードパーティツールが便利です。

Q. TerraformとOpenTofuのどちらを選ぶべきですか?

A. 2024年時点では機能的にほぼ同等です。HashiCorp社のサポートやTerraform Cloudを利用するならTerraform、ライセンスの自由度を重視するならOpenTofuが選択肢です。

まとめ

Terraformは、マルチクラウドに対応したIaCツールの代表格です。Write→Plan→Applyの3ステップとState管理という仕組みにより、クラウドインフラを安全かつ再現可能に構築・管理できます。AnsibleやCI/CDとの組み合わせでインフラ運用を完全に自動化でき、DevOpsの基盤として欠かせないツールとなっています。

コメント