Terraformとは

Terraformとは、HashiCorp社が提供するIaC(Infrastructure as Code)ツールです。IaCとは、インフラをコードで管理する考え方のことを指します。Terraformを使えば、事前に記述したコードに沿って効率的にインフラの管理・構築が可能です。
Terraformはオープンソースのため、基本的に無料で利用できます。ただし、オープンソース版には専用の画面がなく、コマンドを用いた操作が中心です。なお、クラウドサービス版の「Terraform Cloud」であれば、ブラウザを用いて操作できます。
Terraformは主にクラウド環境向けですが、オンプレミス(自社運用)にも対応可能です。幅広いインフラ環境に対応できるため、さまざまな企業のインフラ管理・構築に活用されています。
Terraformを使うメリット

Terraformを使うメリットは、主に次の3つです。
- インフラ構築を効率化できる
- インフラ構成を可視化できる
- マルチクラウドに対応できる
それぞれ詳しく見ていきましょう。
インフラ構築を効率化できる
Terraformを使えば、面倒なインフラ構築を大幅に効率化できます。従来の手動構築では細かな設定作業が多く、時間がかかるうえにミスも起こりやすいのが課題でした。
その点、Terraformでは事前に記述したコードを実行するだけで、コードの設定通りにインフラ環境を構築できます。また、1つのコードを複数環境に適用することも可能なため、同じ設定のインフラ環境が複数必要となった場合にも便利です。
このように、Terraformを使えば手作業の負担を減らせるうえに、人的ミスも抑制できます。結果として、エンジニアはインフラ構築の煩わしさから解放されるでしょう。
インフラ構成を可視化できる
Terraformを使えば、インフラ構成を可視化できます。Terraformで構築したインフラ環境は、コードの設定にもとづいて作られたものです。つまり、インフラ環境がどのような構成・設定なのか知りたい場合、コードを見れば容易に把握できます。
手動で構築したインフラだと、担当者以外の人がすぐに構成を把握できないことが課題でした。その点、インフラ構成がコードとして可視化されるTerraformであれば、関係者全員が設定内容を容易に把握できます。
また、コードはインフラ構成のドキュメント代わりとして活用することも可能です。引き継ぎやトラブル対応の負担も軽減でき、属人化の防止にもつながるでしょう。
マルチクラウドに対応できる
Terraformは、複数のクラウドプラットフォームを併用する「マルチクラウド」にも対応できます。クラウド環境に強いTerraformは、「AWS」「Azure」「GCP」をはじめとする、主要なクラウドプラットフォームに幅広く対応しているためです。
マルチクラウド環境を構築する場合、従来はクラウドプラットフォームごとに独立的な管理が必要でした。その点、Terraformを使えば一貫したコードで複数クラウド環境の構成や設定を一元的に管理できるため、運用の手間を大幅に削減できます。
また、同じTerraformコードを複数のクラウド環境で流用することも可能です。そのため、環境の移行やオンプレミス環境との統合などを含めた柔軟な運用が行えます。
Terraformの始め方・使い方

ここからは、Terraformの始め方・使い方を5ステップで簡単に紹介します。
- Terraformのセットアップ
- プロバイダーの設定
- 認証情報の設定
- インフラ構成の設定
- Terraformの実行と適用
以下では、それぞれについて詳しく見ていきましょう。
1. Terraformのセットアップ
まずは、Terraformのソフトウェアをセットアップしましょう。オープンソース版のTerraformであれば、アカウント作成は不要です。また、Terraformは実行ファイルとして提供されているため、インストールする必要がありません。
Terraform公式サイトにあるこちらのページにアクセスすると、主要なOS別のバイナリ(Terraformのソフトウェア)が公開されています。お使いのOSに合わせたバイナリをダウンロードしましょう。
ダウンロードしたバイナリは、圧縮ファイルとなっているため解凍しましょう。解凍したフォルダに含まれる「terraform.exe(Windowsの場合)」または「terraform(macOS・Linuxの場合)」が実行ファイルです。これをローカル環境の任意パスに配置します。下の画像は、Windowsで「C:\Terraform」に配置した例です。
このままでもコマンドでTerraformを実行できますが、実行ファイルの場所を毎回指定する必要があり不便です。そのため、ユーザー環境変数またはシステム環境変数の「PATH」にTerraformを格納したフォルダパスを追加すると良いでしょう。そうすることで、毎回パスを指定する必要がなくなります。
セットアップ完了後には、バージョン確認コマンドを実行してチェックしましょう。Windowsの「コマンドプロンプト」または、macOS・Linuxの「ターミナル」で次のコマンドを実行し、バージョンが表示されることを確認してください。
terraform -v
2. プロバイダーの設定
次に、「プロバイダー」を設定しましょう。Terraformにおけるプロバイダーとは、インフラ担当者とインフラのプラットフォーム(AWSなど)をつなぐ橋渡し役です。プロバイダーを設定することで、Terraformからインフラ環境の制御が可能となります。
なお、Terraformで設定を行う際には、拡張子が「.tf」のtfファイルを任意の名前で作成し、コードを記述するのが基本です。ファイル名やファイルパスに厳格な制約はありません。また、作成するtfファイル数にも制約はなく、1ファイルにまとめて設定を記述しても、プラットフォーム別などでファイルを分けても構いません。
ここでは、任意の作業フォルダに「main.tf」ファイルを作成したと仮定しましょう。プロバイダーの設定は、providerブロックに記述します。AWSやAzure、GCPなど、利用するプラットフォームに合わせた設定が必要となります。以下のコードは、プラットフォームとしてAWSを使用し、リージョンとして東京を指定する例です。
provider "aws" {
region = "ap-northeast-1"
}
このように、プロバイダーの設定を行うことでTerraformがどのプラットフォームと連携するのか把握できるようになります。プロバイダーについて詳しくは公式サイトをご覧ください。
3. 認証情報の設定
次に、認証情報を設定しましょう。指定したプラットフォームのインフラを制御・参照するには、適切な認証情報が欠かせません。たとえばAWSの場合、「アクセスキー(access_key)」と「シークレットキー(secret_key)」の設定が必要です。認証情報は各プラットフォームで別途取得する必要があります。
認証情報の設定方法はいくつかありますが、手軽なのは環境変数を用いる方法です。たとえば、AWSの場合では「AWS_ACCESS_KEY_ID」「AWS_SECRET_ACCESS_KEY」というキーの環境変数を定義し、それぞれに認証情報を設定すれば済みます。
4. インフラ構成の設定
次に、インフラ構成を設定しましょう。構築したいインフラに合わせた設定を、任意のtfファイルにコードとして記述します。具体的に使用するリソース(Amazon EC2など)の設定を、resourceブロックに記述していくのが基本です。
以下の設定例では、AWSのEC2インスタンスを1つ作成しています。
resource “aws_instance” “example" {
ami = "ami-xxxxxxxxxxxxx"
instance_type = "t2.micro"
}
“aws_instance”の部分は使用するリソースの種類によって変わります。“example"の部分は任意のリソース名で構いません。また、AWSのリソース設定ではami属性(AMI ID)とinstance_type属性の設定が必要です。具体的な設定項目はプラットフォームによるため、詳細は公式サイト(AWS/Azure/GCP)をご覧ください。
5. Terraformの実行と適用
tfファイルで記述したインフラ構成を実際に適用するには、Terraformコマンドの実行が必要です。Windowsの「コマンドプロンプト」またはmacOS・Linuxの「ターミナル」で、各種Terraformコマンドを実行しましょう。
Terraformは、コマンドにもとづいてtfファイルに記述されたコードを解析し、指定されたプラットフォームのAPIを介してインフラを制御します。インフラ管理・構築において代表的なTerraformコマンドを表にまとめました。
コマンド | 機能 |
terraform init | Terraformの初期化を行う。(初回は必ず実行が必要) |
terraform plan | 作成・変更するリソースを表示する(apply前の実行が理想) |
terraform apply | 実際にリソースへ変更を適用する。(plan後の実行が理想) |
まずはterraform initで初期化し、その後はterraform plan→terraform applyの流れで実行していくのが基本です。terraform planで意図しない設定がないか確認したうえでterraform applyを実行しましょう。このように、Terraformコマンドを用いることでインフラを手軽に管理・構築できます。
Terraformを使う際の注意点

Terraformを使う際の注意点として、次の3つを押さえておきましょう。
- インフラの利用料金を適切に管理する
- 機密情報のハードコーディングは避ける
- Stateファイルを適切に管理する
以下では、それぞれについて詳しく見ていきましょう。
インフラの利用料金を適切に管理する
Terraformを使う際には、インフラの利用料金を適切に管理しましょう。Terraform自体は無料で利用できますが、構築したインフラには当然ながら料金が発生します。利用料金が膨らまないように、必要なリソースだけを適切に稼働させましょう。
不要なリソースは、次のterraform destroyコマンドで削除することも可能です。ただし、-targetオプションを指定しないと、全リソースが削除されるため注意しましょう。
terraform destroy -target=リソース種類.リソース名
機密情報のハードコーディングは避ける
Terraformコード内に、パスワードやAPIキーといった機密情報をハードコーディング(直接記述)するのは避けましょう。万が一、コードが第三者に見られた場合、悪用されるリスクがあるので危険です。
ハードコーディングの回避方法としては、環境変数を登録して読み込む方法、安全な場所の設定ファイルを読み込む方法、などがあります。機密情報は適切に管理し、安全にTerraformを運用しましょう。
Stateファイルを適切に管理する
terraform applyを実行すると、「terraform.tfstate」という名称のファイルが作成・更新されます。このStateファイルは、Terraformが現在のインフラ情報を記録し、管理・追跡するためのものです。そのため、Stateファイルを適切に管理しましょう。
Terraformをチーム運用する場合、Stateファイルの情報をクラウドストレージなどで共有することが理想です。そうすることで、複数人で作業する際の競合や、意図しないリソース変更といったトラブルを防げるでしょう。
まとめ

Terraformは、コードによる効率的なインフラ管理・構築を可能にする無料で使用できるツールです。また、幅広いクラウドインフラ環境に対応できます。ただし、Terraformを有効活用するには、適切な手順や注意点を知ることが大切です。
Terraformを活用する際には、今回の内容をぜひ参考にしてください。