インフラエンジニアやクラウドエンジニアの間で広く利用されているのが Terraform です。TerraformはHashiCorp社が開発したInfrastructure as Code(IaC)ツールであり、クラウドリソースの構築や管理をコード化して、自動化・再現性を高めることができます。
従来はAWSコンソールやCLIを使って手作業で設定していたサーバーやネットワークを、Terraformでは宣言的に定義ファイルへ書き込むことで、同じ構成を何度でも再現可能にします。
Table of Contents
基本的なファイル構成
Terraformプロジェクトは、通常以下のようなファイル構成を持ちます。GitHubの terraform
レポジトリにも main.tf
などが含まれていると思います。
- main.tf
メインの定義ファイル。AWS EC2やVPC、GCPのStorageなど具体的なリソースを記述します。 - variables.tf
パラメータ(リージョンやインスタンスタイプなど)を変数として定義。環境ごとに柔軟に切り替え可能にします。 - outputs.tf
Terraform実行後に出力したい値を定義。例えば作成したEC2インスタンスのパブリックIPや、GCPのプロジェクトIDなど。 - terraform.tfstate
実際のクラウド環境とコードの状態を保持するファイル。バージョン管理には含めず、S3やGCSなどリモートで管理するのが一般的です。 - provider.tf(main.tfに含める場合もあり)
使用するクラウドプロバイダ(AWS、GCP、Azureなど)を指定します。
Terraformの基本処理の流れ
Terraformの実行は大きく以下のステップで進みます。
- init(初期化)
terraform init
を実行し、使用するプロバイダやモジュールをダウンロードして環境を初期化します。 - plan(実行計画の確認)
terraform plan
を実行すると、コードと現在のクラウド環境との差分が表示されます。- 新規作成されるリソース
- 更新されるリソース
- 削除されるリソース
これを確認して、意図しない変更がないかチェックします。
- apply(リソースの適用)
terraform apply
を実行すると、実際にクラウドにリソースが構築されます。 - destroy(リソースの削除)
terraform destroy
を実行すれば、作成したリソースを一括削除可能です。検証環境をすぐに片付けたいときに便利です。
AWSとGCPでの利用例
Terraformはマルチクラウドに対応しているため、同じ構成管理方法でAWSやGCPを扱えます。
- AWSの場合
- providerで
aws
を指定 aws_instance
やaws_vpc
などのリソースを定義- 例:EC2インスタンスを構築し、そのパブリックIPを
outputs.tf
に出力する
- providerで
- GCPの場合
- providerで
google
を指定 google_storage_bucket
やgoogle_compute_instance
を記述- 例:GCSバケットを作成し、オブジェクトアップロード権限をIAMで付与する
- providerで
いずれも、記述方法は宣言的でシンプルなので、クラウドごとに異なる操作感を抽象化して統一的に管理できます。
まとめ
Terraformはインフラをコード化し、クラウドリソースの管理を効率化する強力なツールです。
- IaCで再現性と自動化を実現
- main.tf / variables.tf / outputs.tf などの基本ファイル構成
- init → plan → apply → destroy の流れ
- AWSやGCPを問わず利用可能
GitHubリポジトリにコードを置いておけば、チーム開発やCI/CDとも連携しやすくなります。特に、金融や大規模インフラ案件では変更管理の透明性が重要になるため、Terraformの導入は今後も拡大していくでしょう。