Terraformで「Hello World!」

IaC
スポンサーリンク
スポンサーリンク

Terraformとは

クラウド上にシステムを動作させるための環境を準備するには、下記リンクにあるようにいくつか方法がありますが、Terraformはコードでクラウド上に環境を構築するためのIaCツールになります。

Terraformは、HashiCorp社によって開発されているOSSのツールでバージョンアップのスピードも早く活発に開発が行われており、対応しているクラウドベンダーの数も多くIaCツールのデファクトスタンダードとなっています。

Windows・macOS・Linuxなど複数のOS上で実行することが出来、コマンドラインから使用するツールになります。

コードは、HCL(HashiCorp Configuration Language)というJSONをベースにした独自の言語を使って作成するリソースを定義していく形になります。

Terraformの使い方を覚えれば、複数のクラウドベンダーに対応することが出来るので複数のクラウドサービスを使ったマルチクラウド対応の環境を構築しやすくなります。

このページでは、Terraformを使ってプログラミング言語の入門書によくある「Hello World!」を表示することで、Terraormを初めて使用する人が基本的な使い方を理解できるようにしています。

Terraformの基本的な構文については、下のリンクを参照してください。

準備

インストール

Terraformをインストールするには、下記の手順を実行します。

  1. 公式サイトからダウンロード。
  2. ダウンロードしたZipファイルを適当なフォルダに解凍。
  3. 解凍先のフォルダへのパスを通す。

パスを通すには環境変数に設定を行う必要があります。環境変数の設定方法は、下記リンクを参照してください。

古いバージョンのTerraformが必要な場合は、ここからダウンロードするが出来ます。

実行環境

Terraformを使ってクラウド上に環境を構築するには、クラウド上に構築する仮想ネットワークや仮想コンピュータなどのリソースに関する情報を記述したtfファイルを準備する必要があります。

Terraformは、tfファイルを読み込んでクラウド上に環境を構築するのですが、Terraformを実行したディレクトリ(カレントディレクトリ)の中にある全てのtfファイルが読み込まれて処理が行われます。

ディレクトリの中に余計なtfファイルがあると一緒に処理されてしまうので、処理を一緒に行いたいtfファイルを入れるための作業用ディレクトリを作成する必要があります。

今回は、Terraformで「Hello World!」を表示するためのプロジェクトなので、「HelloWorld」という名前で作業用ディレクトリを作成し、その中に「main.tf」ファイルを作成してください。

今回は「main.tf」というファイル名にしていますが、Terraformは、ディレクトリの中にあるtfファイルを全て処理するので「main.tf」である必要はありません。

作成した「main.tf」ファイルをVSCodeやテキストエディタなどで開いて下記のコードを記述して保存します。

variable "input_hello" {
  default = "Hello World!"
}

output "output_hello" {
  value = var.input_hello
}

VSCodeの拡張機能「HashiCorp Terraform」をインストールすると強調表示などが行われてコードが見やすくなります。

VSCodeをインストールする場合は、この記事を参考にしてみてください。

実行

Terraformは、tfファイルを置いてある作業用ディレクトリ上で実行する必要があります。

コマンドラインでcd [作業用ディレクトリ]を実行し、作業用ディレクトリに移動にしてから以降のTerraformコマンドを実行する必要があります。

初期化

Terraformを実行するには、最初に必ず作業用ディレクトリを初期化する必要があります。

作業用ディレクトリを初期化するには、作業用ディレクトリで下記コマンドを実行します。

terraform init

terraform initを実行すると作業用ディレクトリにあるtfファイルが読み込まれ、AWSやAzureなどのクラウドサービスへ接続するためのプラグイン等、実行時に必要なプラグインが作業用ディレクトリにダウンロードされます。

tfファイルの変更によって必要なプラグインが増えた場合は、terraform initを再度実行する必要があります。

先程作成した「HelloWorld」ディレクトリでterraform initを実行すると下のような画面が表示され作業用ディレクトリの初期化が行われます。

構築

terraform initを実行し作業用ディレクトリの初期化が完了するとクラウド上に環境を構築する準備が完了しています。

実際にクラウド上に仮想ネットワークや仮想コンピュータなどの環境を構築するには下記コマンドを実行します。

terraform apply

上記コマンドを実行すると変更される内容と確認メッセージが表示されるので、変更内容を確認し実行する場合は「yes」を入力をします。

「yes」の入力後、AWSやAzureなどのクラウドサービスへの接続が行われ仮想ネットワークや仮想コンピュータなどのリソースを作成する処理が開始されます。

terraform applyを実行すると「terraform.tfstate」というファイルが実行したディレクトリ上に作成されます。

Terraformは、tfファイルとterraform.tfstateの状態からクラウド上にどのリソースを追加・削除・変更しなければならないのかを識別しています。

「HelloWorld」ディレクトリでterraform applyを実行すると下のような画面が表示されます。

今回は、「Hello World!」を出力するようにtfファイルを作成したので+ output_hello = "Hello World!"と画面上に表示されています。

output_helloの前に+がついているのは、構築する処理を実行するとoutput_helloが追加する変更が行われるという意味になります。

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

HelloWorldでは、クラウドサービスへの接続を行わずにローカルで画面への表示する処理のみを行っているので処理はすぐに終わります。

実際にクラウド上に環境を構築する場合は、構築する内容によっては数分〜数十分といった時間がかかることもあります。

計画

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で管理する場合、何がどのように変更されるのかを確認してから実行する必要があります。

例えば仮想コンピュータの変更を行った場合、その変更が仮想コンピュータ自体を削除してから作成されるのか、設定の変更だけが行われるのかといったことを確認する必要があります。

この確認を行わないで実行してしまうと仮想コンピュータが削除されてから作成する変更であった場合、仮想コンピュータのHDDにあった情報が消えてしまうかもしれません。

実行結果の再表示

下記コマンドを実行するとterraform applyを実行した時の実行結果を確認することが出来ます。

terraform output

「HelloWorld」ディレクトリでterraform outputを実行すると下の画面のようにterraform applyを実行した時の実行結果が表示されます。

今回は、「Hello World!」と表示されるだけなので意味がありませんが、本来は、クラウド上に構築した仮想コンピュータのパブリックIPを表示させるなどして接速先を確認したりするのに利用出来ます。

破棄

terraform applyで構築した環境は、下記コマンドを実行することで簡単に破棄することが出来ます。

terraform destroy

上記コマンドを実行すると変更される内容と確認メッセージが表示されるので、変更内容を確認し実行する場合は「yes」を入力をします。

「yes」の入力後、AWSやAzureなどのクラウドサービスへの接続が行われ仮想ネットワークや仮想コンピュータなどのリソースを破棄する処理が開始されます。

破棄が完了するとクラウド上に構築した仮想ネットワークや仮想コンピュータは削除されてなくなります。

「HelloWorld」ディレクトリでterraform destroyを実行すると下のような画面が表示されます。

破棄するので- output_hello = "Hello World!" -> nullと表示されています。

Enter a value:の後に「yes」を入力してEnterを押すと処理が行われ下の画面のようにDestroy complete!が表示されれば破棄は完了です。

Comment

スポンサーリンク