Terraform とは? Infrastructure as Code の解説
Terraform は、宣言的な設定ファイルからクラウドリソースをプロビジョニングおよび管理し、存在するものを state ファイルで追跡する infrastructure-as-code ツールです。
Terraform を使うと、インフラ(サーバー、データベース、ネットワーク)をコードで記述し、それを自動的に作成・更新できます。クラウドコンソールをクリックして操作する代わりに、設定を記述し、変更の plan をレビューして apply します。結果は追跡されるため、以降の変更は差分のみになります。
Terraform とは
Terraform は HashiCorp によるオープンソースの infrastructure-as-code ツールです。インフラの望ましい状態を HCL 設定で宣言すると、Terraform は provider plugin(AWS、GCP、Azure、その他数百種類)を使って、それに一致するようリソースを作成・更新・削除します。実世界の状態は state ファイルに記録されます。
plan と apply
Terraform は設定を、記録された state と実際のクラウドと比較し、"terraform plan" が追加・変更・破棄される内容を正確に表示します。"terraform apply" はその plan を実行します。この plan-then-apply のフローにより変更が予測可能かつレビュー可能になり、state ファイルによって Terraform はリソースを差分的に管理できます。
設定例
短い設定で 1 つのリソースを宣言します。
resource "aws_s3_bucket" "logs" {
bucket = "my-app-logs"
tags = { Environment = "prod" }
}CI/CD における役割
CI/CD では、Terraform の変更は通常ゲートで制御されます。pipeline は pull request 上で "terraform validate" と "terraform plan" を実行してレビュアーが差分を確認できるようにし、merge で "terraform apply" が実行されます。リモート state と state locking によって 2 つの実行が衝突するのを防ぎます。CI で plan と apply を実行すると監査証跡が得られ、インフラの変更が一貫性を保ちレビュー可能になります。
代替手段
Pulumi では汎用言語でインフラを記述できます。OpenTofu は Terraform のコミュニティ fork です。AWS CloudFormation や CDK のような cloud-native な選択肢は単一の provider を対象とします。Terraform は依然として最も広く使われている multi-cloud の IaC ツールです。
重要なポイント
- Terraform は宣言的な HCL 設定からインフラをプロビジョニングします。
- plan は差分を表示し、apply はそれを実行し、state は存在するものを追跡します。
- CI では、PR で plan を実行し、merge で apply を実行します。リモート state と locking を併用します。