Terraformとは
クラウド上にシステムを動作させるための環境を準備するには、下記リンクにあるようにいくつか方法がありますが、Terraformはコードでクラウド上に環境を構築するためのIaCツールになります。
Terraformは、HashiCorp社によって開発されているOSSのツールでバージョンアップのスピードも早く活発に開発が行われており、対応しているクラウドベンダーの数も多くIaCツールのデファクトスタンダードとなっています。
Windows・macOS・Linuxなど複数のOS上で実行することが出来、コマンドラインから使用するツールになります。
コードは、HCL(HashiCorp Configuration Language)というJSONをベースにした独自の言語を使って作成するリソースを定義していく形になります。
Terraformの使い方を覚えれば、複数のクラウドベンダーに対応することが出来るので複数のクラウドサービスを使ったマルチクラウド対応の環境を構築しやすくなります。
このページでは、Terraformを使ってプログラミング言語の入門書によくある「Hello World!」を表示することで、Terraormを初めて使用する人が基本的な使い方を理解できるようにしています。
Terraformの基本的な構文については、下のリンクを参照してください。
準備
インストール
Terraformをインストールするには、下記の手順を実行します。
- 公式サイトからダウンロード。
- ダウンロードしたZipファイルを適当なフォルダに解凍。
- 解凍先のフォルダへのパスを通す。
パスを通すには環境変数に設定を行う必要があります。環境変数の設定方法は、下記リンクを参照してください。
実行環境
Terraformを使ってクラウド上に環境を構築するには、クラウド上に構築する仮想ネットワークや仮想コンピュータなどのリソースに関する情報を記述したtfファイルを準備する必要があります。
Terraformは、tfファイルを読み込んでクラウド上に環境を構築するのですが、Terraformを実行したディレクトリ(カレントディレクトリ)の中にある全てのtfファイルが読み込まれて処理が行われます。
ディレクトリの中に余計なtfファイルがあると一緒に処理されてしまうので、処理を一緒に行いたいtfファイルを入れるための作業用ディレクトリを作成する必要があります。
今回は、Terraformで「Hello World!」を表示するためのプロジェクトなので、「HelloWorld」という名前で作業用ディレクトリを作成し、その中に「main.tf」ファイルを作成してください。
作成した「main.tf」ファイルをVSCodeやテキストエディタなどで開いて下記のコードを記述して保存します。
variable "input_hello" {
default = "Hello World!"
}
output "output_hello" {
value = var.input_hello
}
実行
Terraformは、tfファイルを置いてある作業用ディレクトリ上で実行する必要があります。
コマンドラインでcd [作業用ディレクトリ]
を実行し、作業用ディレクトリに移動にしてから以降のTerraformコマンドを実行する必要があります。
初期化
Terraformを実行するには、最初に必ず作業用ディレクトリを初期化する必要があります。
作業用ディレクトリを初期化するには、作業用ディレクトリで下記コマンドを実行します。
terraform init
terraform init
を実行すると作業用ディレクトリにあるtfファイルが読み込まれ、AWSやAzureなどのクラウドサービスへ接続するためのプラグイン等、実行時に必要なプラグインが作業用ディレクトリにダウンロードされます。
先程作成した「HelloWorld」ディレクトリでterraform init
を実行すると下のような画面が表示され作業用ディレクトリの初期化が行われます。

構築
terraform init
を実行し作業用ディレクトリの初期化が完了するとクラウド上に環境を構築する準備が完了しています。
実際にクラウド上に仮想ネットワークや仮想コンピュータなどの環境を構築するには下記コマンドを実行します。
terraform apply
上記コマンドを実行すると変更される内容と確認メッセージが表示されるので、変更内容を確認し実行する場合は「yes」を入力をします。
「yes」の入力後、AWSやAzureなどのクラウドサービスへの接続が行われ仮想ネットワークや仮想コンピュータなどのリソースを作成する処理が開始されます。
「HelloWorld」ディレクトリでterraform apply
を実行すると下のような画面が表示されます。

今回は、「Hello World!」を出力するようにtfファイルを作成したので+ output_hello = "Hello World!"
と画面上に表示されています。
output_helloの前に+がついているのは、構築する処理を実行するとoutput_helloが追加する変更が行われるという意味になります。
Enter a value:
の後に「yes」を入力してEnterを押すと処理が行われ下の画面のようにoutput_hello = "Hello World!"
が表示されれば実行は完了です。

計画
terraform apply
でも構築する処理を実行する前に変更内容される内容を確認することが事が出来ますが、Terraformに変更内容の確認のみを行うコマンドがあります。
下記コマンドを実行すると環境がどのように変更されるのかを確認することが出来ます。
terraform plan
「HelloWorld」ディレクトリでterraform plan
を実行すると下のような画面が表示されます。

terraform apply
で環境を構築した後なのでtfファイルの内容と構築済みの環境に差がないためNo Changes. Infrastructure is up-to-date.
と表示されています。
変更があるとどのようになるのか確認するため「HelloWorld」ディレクトリの中にある「main.tf」ファイルを開いてコードをすべて削除して保存します。
この状態でterraform plan
を実行すると下の画面が表示されます。

- output_hello = "Hello World!" -> null
と表示されています。
output_helloの前に-がついているのは、構築する処理を実行すると構築済みの環境からoutput_helloが削除される変更が行われるという意味になります。
今度は、「HelloWorld」ディレクトリの中にある「main.tf」ファイルに下記のコードを記述して保存します。
variable "input_hello" {
default = "Hello World2!"
}
output "output_hello" {
value = var.input_hello
}
この状態でterraform plan
を実行すると下の画面が表示されます。

~ output_hello = "Hello World!" -> "Hello World2!"
と表示されています。
output_helloの前に~がついているのは、構築する処理を実行すると構築済みの環境にあるHello World!がHello World2!に置き換える変更が行われるという意味になります。
実行結果の再表示
下記コマンドを実行するとterraform apply
を実行した時の実行結果を確認することが出来ます。
terraform output
「HelloWorld」ディレクトリでterraform output
を実行すると下の画面のようにterraform apply
を実行した時の実行結果が表示されます。

破棄
terraform apply
で構築した環境は、下記コマンドを実行することで簡単に破棄することが出来ます。
terraform destroy
上記コマンドを実行すると変更される内容と確認メッセージが表示されるので、変更内容を確認し実行する場合は「yes」を入力をします。
「yes」の入力後、AWSやAzureなどのクラウドサービスへの接続が行われ仮想ネットワークや仮想コンピュータなどのリソースを破棄する処理が開始されます。
「HelloWorld」ディレクトリでterraform destroy
を実行すると下のような画面が表示されます。

破棄するので- output_hello = "Hello World!" -> null
と表示されています。
Enter a value:
の後に「yes」を入力してEnterを押すと処理が行われ下の画面のようにDestroy complete!
が表示されれば破棄は完了です。

Comment