エンジニアライフスタイルブログを運営しているミウラ(@miumiu06171)です。
普段はフリーランスでシステムエンジニアをしております。
今回は、IaC(Infrastructure as Code)としてTerraformを使ってインフラ環境をコードで構築するにあたり、Terraformの環境構築、前提知識、基本コマンドをまとめてみました。
Terraform環境構築(tfenv)
Terraform初心者向けにTerraformの環境構築を行う手順を記事にまとめているため、まずは以下の記事で環境構築を行ってください。
Terraformのフォルダ・ファイル構成
TerraformでIaCを作成するにあたり、フォルダ・ファイル構成を紹介します。
Terraformのソースコードは、拡張子(.tf)を持つファイルに記載されることを覚えておきましょう。
その上で以下のようなフォルダ・ファイル構成だった場合を例に説明します。
1 2 3 4 5 6 7 8 |
CurrentFolder ├ test1 │ └ test1.tf # NG ├ test2 │ └ test2.tf # NG ├ main.tf # OK ├ s3.tf # OK └ terraform.tfstate |
Terraformのソースコードは、カレントディレクトリ直下にある .tfファイルを自動的に読み込み、インフラ環境を構築します。
ただし、カレントディレクトリ直下にない、サブディレクトリ配下にある .tfファイルは読み込まれません。
つまり、上記フォルダ・ファイル構成では、main.tfとs3.tfは自動的に読み込まれ、test1.tfとtest2.tfは読み込まれません。
また、Terraformでインフラ環境を構築すると、terraform.tfstateというファイルも作成されます。
terraform.tfstateファイルは、クラウド上のリソースを管理するためのファイルです。
これらの特徴を必ずおさえておきましょう。
Terraform基本コマンド
Terraformの環境構築とフォルダ構成を理解したところで、Terraformの基本コマンドを紹介していきます。
Terraform初期化(terraform init)
Terraformのソースコードである .tfファイルを作成したら、まず初めに以下の「terraform init」コマンドを実行する必要があります。
1 |
terraform init |
Terraformファイルの整形・フォーマット(terraform fmt)
次に.tfファイルの整形・フォーマットを行うために以下の「terraform fmt」コマンドを実行します。
1 |
terraform fmt |
これにより、.tfファイルの可読性があがり、メンテナンスがしやすくなります。
リソースの作成計画を確認(terraform plan)
Terraformのソースコードをもとにインフラ構築を行う前に、以下の「terraform plan」コマンドでリソースの作成計画を事前確認するようにしましょう。
1 |
terraform plan |
カレントディレクトリ直下にある .tfファイルから新しく作成するリソース、削除リソース、変更リソースの一覧を表示してくれるので、ソースコードに記載したリソースが表示されることを確認しましょう。
リソースを作成(terraform apply)
「terraform plan」コマンドで作成計画に問題がなければ、以下の「terraform apply」コマンドでインフラ環境にリソースを生成、削除、変更することができます。
1 |
terraform apply |
ただし、上記コマンド実行中にyesやnoを入力させる場合があります。
このようにコマンド実行中の入力要求をすべてyesで自動実行させるためには、以下のように「-auto-approve」オプションをつけて、「terraform apply」コマンドを実行します。
1 |
terraform apply -auto-approve |
リソースの一括削除(terraform destroy)
Terraformのソースコードを使ってインフラ環境に作成したリソース一覧を一括で削除するには、以下の「terraform destroy」コマンドを実行します。
1 |
terraform destroy |
「terraform apply」コマンドと同様に「-auto-approve」オプションを付けることもできます。
1 |
terraform destroy -auto-approve |
リソース一覧の確認(terraform state list)
Terraformのソースコードでインフラ環境に構築したリソースの一覧を確認するには、以下の「terraform state list」コマンドを実行します。
1 |
terraform state list |
特定のリソースを確認するには、以下のように [<ADDRESS>]を指定します。
1 |
terraform state list [<ADDRESS>] |
<ADDRESS>は、Terraform上のリソースのアドレスになります。
リソース詳細の確認(terraform state show)
リソースの詳細を確認するには、以下の「terraform state show」コマンドを実行します。
1 |
terraform state show <ADDRESS> |
<ADDRESS>は、Terraform上のリソースのアドレスになります。
リソース名の変更(terraform state mv)
リソース名を変更する方法を紹介します。
リソース名を変更
.tfファイルのリソース名を変更します。
この時点では、リソース名を変更したリソースが新しく作成される扱いになってしまいます。
tfstateファイルの変更
インフラ環境の状態を示すtfstateファイル上のリソース名も変更するため、以下の「terraform state mv」コマンドを実行します。
1 |
terraform state mv <SOURCE> <DESTINATION> |
これにより、.tfファイルと.tfstateファイルの両方で、リソース名が変更されたので、「terraform apply」コマンドを実行します。
1 |
terraform apply -auto-approve |
これでリソース名の変更が完了です。
リソース取り込み(terraform import)
Terraformで管理していなかったリソース(手作業でAWS上に作成したリソースなど)を、terraformに取り込んで管理対象とするには、以下の「terraform import」コマンドを実行します。
1 |
terraform import <ADDRESS> <ID> |
<ADDRESS>には、 取り込み先のリソース名(これはterraformコード上のリソース名)を指定します。
<ID>には、取り込みたい稼働中リソースID(これはAWS上のリソースID)を指定します。
手順としては、
まず手作業で作成したリソースに該当するTerraformソースコードを、main.tfファイルに追加します。
そのあと、 .tfstateファイルにリソースを取り込むため、「terraform import <ADDRESS> <ID>」を実行します。
リソースファイルの取り込みが完了したら、以下の「terraform plan」コマンドで、差分がなくなっていることが確認できたらオッケーです。
1 |
terraform plan |
リソースをterraform管理対象外にする(terraform state rm)
指定したリソースをterraform管理対象外にするには、以下の「terraform state rm」コマンドを実行します。
1 |
terraform state rm <ADDRESS> |
<ADDRESS>は、Terraform上のリソースのアドレスになります。
このとき、インフラ上(AWSなど)の実態は削除されず、存在したままになっていることに注意してください。
手修正の内容を反映(terraform refresh)
インフラ環境上で手修正した内容をtfstateファイルに反映するには、以下の「terraform refresh」コマンドを実行します。
1 |
terraform refresh |
リソース依存関係の可視化(terraform graph)
Terraformで管理しているリソースの依存関係を可視化するには、以下の「terraform graph」コマンドを実行します。
1 |
terraform graph > <FILENAME> |
上記コマンドによって、任意のファイルにリソース依存関係をDOT形式ファイルに変換してくれます。
このDOT形式ファイルを利用し、GraphvizでSVG形式画像ファイルで閲覧可能になります。
Visual Studio Codeの拡張機能「Graphviz Interactive Preview」を使えば、DOTファイルからSVGファイルにして閲覧も可能です。
Terraformコンソールで動作確認(terraform console)
Terraformコンソールを使用するには、以下の「terraform console」コマンドを実行します。
1 |
terraform console |
Terraformコンソールを使うと、TerraformのIDや値の実態を確認することができます。
まとめ
いかがでしたでしょうか。
Terraform初心者の方に向けて、Terraformの環境構築から基本コマンドを紹介してきました。
コマンドを一つ一つ覚えておくことは困難であるため、ぜひ振り返りのために本記事を活用頂ければ幸いです。
【関連記事】
【TIPS】tfenvでTerraformのインストールからバージョン管理までをマスターしよう