はじめに
今回はいろいろあるTerraformコマンドの中から、知っておきたいコマンドをピックアップしてまとめてみました。
少しでもご参考になれば幸いです。
Terraformコマンドを初めて使う方は、セットアップに関するこちらの記事をぜひご参照ください。
1. init (初期化)
terraform init
terraform initは、Terraformを使う上で最初に必ず実行する初期化コマンドです。
以下3つを初期化します。
・Provider(AWSなど)
・Module(外部モジュール)
・Backend(state保存先)
実行すると、以下が行われます。
① .terraform/ ディレクトリの生成
・/providers/配下に、.tfファイルで指定したプロバイダ(バイナリ)がダウンロードされます。
provider "aws" {
region = "ap-northeast-1"
}
・/modules/配下に、.tfファイルで指定したモジュールが(Terraform Registry/Git/ローカルから)取得されます。
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
}
② .terraform.lock.hcl ファイルの生成
プロバイダのバージョンが固定されます。
チーム間で環境差異を防ぐために使用されます。
③ バックエンドの初期化
stateファイルの保存先(S3など)が設定されます。
terraform {
backend "s3" {
bucket = "my-tf-state"
}
}
実行タイミング
terraform initは、初回実行時だけでなく以下のようなタイミングで適宜行う必要があります。
・provider変更時
・module追加時
・backend変更時
terraform initコマンドには複数のオプションが存在しますが、場合によっては意図せず破壊的変更が入る可能性もあるため、事前に影響をよく調べてから使用する必要があります。
2. plan (実行計画)
「この変更をするとどうなるか」を事前に確認するコマンドです。
terraform plan
実際のリソース変更は行わず「差分(diff)」のみを表示します。
何が追加/変更/削除されるかの差分を事前に確認することができます。
Terraformは以下の3つを比較して動きます。
.tf(定義) vs .tfstate(記録) vs 実リソース(AWS)
(stateに存在しないリソースは比較対象にすらなりません)
3. apply (適用)
Planの内容(差分)を実際にインフラへ反映するコマンドです。
terraform apply
実際にリソースの作成/変更/削除の処理を行います。
4. destroy (削除)
Terraformを使用して作成したリソースをすべて削除するコマンドです。
terraform destroy
環境を丸ごと削除します。
-targetオプションを付与することで一部削除に対応してますが、依存関係がある場合は障害の原因となるため、推奨はされていません。
削除したいリソースはコードから消す && applyコマンドで適用する手法が推奨されています。
5. fmt (コード整形)
Terraformの設定ファイル(.tf など)を公式のスタイルガイドに従って自動整形するコマンドです。
terraform fmt
resource "aws_instance" "example"{
ami="ami-123456"
instance_type= "t2.micro"
}
resource "aws_instance" "example" {
ami = "ami-123456"
instance_type = "t2.micro"
}
インデント・スペース・改行などが自動で整います。
フォーマットが統一されることで、
・無意味なdiffが減る
・レビューがしやすくなる
といったメリットがあります。
6. validate (構文チェック)
Terraform構成(.tfファイル)が正しく書かれているかを検証するコマンドです。
terraform validate
インフラの作成や変更は行わず、あくまで静的チェック(lintに近い)を行います。
・HCL構文が正しいか
・ブロックの書き方(resource, variable, outputなど)
・参照関係(未定義変数やリソース参照)
・プロバイダー・モジュールの基本整合性
などを確認します。
あくまで「文法チェック」であり、「AWS権限エラー/存在しないAMI/実際のリソース競合」などは検出できません。
7. state list (一覧表示)
現在のstateファイルに記録されているリソース一覧を表示するコマンドです。
terraform state list
あくまで「Terraformが認識しているリソース一覧」であり、AWSコンソールで手動作成したリソースは含まれません。
8. state show (詳細情報)
Terraformのstateファイルに保存されている特定リソースの詳細情報を確認するためのコマンドです。
terraform state show <リソースアドレス>
基本的にterraform state listコマンドとセットで使用されます。
9. output (出力)
outputブロックで定義された値を取得するためのコマンドです。
terraform output
stateに保存された最終的な計算結果やリソース属性を、「applyを行わずに」取得することができます。
(おまけ) refresh
stateだけを更新するコマンドです。
しかし変更内容のプレビュー(plan)が無く安全性が低いため、非推奨となっています。
また、現在はterraform planやapply内で自動的にrefreshが行われる設計になっているようなので、使用は避けた方が良いかもしれません。