0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Terraform】知っておきたいコマンドまとめ

0
Posted at

はじめに

今回はいろいろあるTerraformコマンドの中から、知っておきたいコマンドをピックアップしてまとめてみました。
少しでもご参考になれば幸いです。

Terraformコマンドを初めて使う方は、セットアップに関するこちらの記事をぜひご参照ください。

1. init (初期化)

zsh
terraform init

terraform initは、Terraformを使う上で最初に必ず実行する初期化コマンドです。
以下3つを初期化します。
・Provider(AWSなど)
・Module(外部モジュール)
・Backend(state保存先)

実行すると、以下が行われます。

.terraform/ ディレクトリの生成

/providers/配下に、.tfファイルで指定したプロバイダ(バイナリ)がダウンロードされます。

provider.tf(例)
provider "aws" {
  region = "ap-northeast-1"
}

/modules/配下に、.tfファイルで指定したモジュールが(Terraform Registry/Git/ローカルから)取得されます。

main.tf(例)
module "vpc" {
  source = "terraform-aws-modules/vpc/aws"
}

.terraform.lock.hcl ファイルの生成

プロバイダのバージョンが固定されます。
チーム間で環境差異を防ぐために使用されます。

③ バックエンドの初期化

stateファイルの保存先(S3など)が設定されます。

backend.tf(例)
terraform {
  backend "s3" {
    bucket = "my-tf-state"
  }
}

実行タイミング

terraform initは、初回実行時だけでなく以下のようなタイミングで適宜行う必要があります。
・provider変更時
・module追加時
・backend変更時

terraform initコマンドには複数のオプションが存在しますが、場合によっては意図せず破壊的変更が入る可能性もあるため、事前に影響をよく調べてから使用する必要があります。

2. plan (実行計画)

「この変更をするとどうなるか」を事前に確認するコマンドです。

zsh
terraform plan

実際のリソース変更は行わず「差分(diff)」のみを表示します。
何が追加/変更/削除されるかの差分を事前に確認することができます。

Terraformは以下の3つを比較して動きます。
.tf(定義) vs .tfstate(記録) vs 実リソース(AWS)
(stateに存在しないリソースは比較対象にすらなりません)

3. apply (適用)

Planの内容(差分)を実際にインフラへ反映するコマンドです。

zsh
terraform apply

実際にリソースの作成/変更/削除の処理を行います。

4. destroy (削除)

Terraformを使用して作成したリソースをすべて削除するコマンドです。

zsh
terraform destroy

環境を丸ごと削除します。

-targetオプションを付与することで一部削除に対応してますが、依存関係がある場合は障害の原因となるため、推奨はされていません。
削除したいリソースはコードから消す && applyコマンドで適用する手法が推奨されています。

5. fmt (コード整形)

Terraformの設定ファイル(.tf など)を公式のスタイルガイドに従って自動整形するコマンドです。

zsh
terraform fmt
.tf(適用前)
resource "aws_instance" "example"{
ami="ami-123456"
instance_type= "t2.micro"
}
.tf(適用後)
resource "aws_instance" "example" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
}

インデント・スペース・改行などが自動で整います。
フォーマットが統一されることで、
・無意味なdiffが減る
・レビューがしやすくなる
といったメリットがあります。

6. validate (構文チェック)

Terraform構成(.tfファイル)が正しく書かれているかを検証するコマンドです。

zsh
terraform validate

インフラの作成や変更は行わず、あくまで静的チェック(lintに近い)を行います。
・HCL構文が正しいか
・ブロックの書き方(resource, variable, outputなど)
・参照関係(未定義変数やリソース参照)
・プロバイダー・モジュールの基本整合性
などを確認します。

あくまで「文法チェック」であり、「AWS権限エラー/存在しないAMI/実際のリソース競合」などは検出できません。

7. state list (一覧表示)

現在のstateファイルに記録されているリソース一覧を表示するコマンドです。

zsh
terraform state list

あくまで「Terraformが認識しているリソース一覧」であり、AWSコンソールで手動作成したリソースは含まれません。

8. state show (詳細情報)

Terraformのstateファイルに保存されている特定リソースの詳細情報を確認するためのコマンドです。

zsh
terraform state show  <リソースアドレス>

基本的にterraform state listコマンドとセットで使用されます。

9. output (出力)

outputブロックで定義された値を取得するためのコマンドです。

zsh
terraform output

stateに保存された最終的な計算結果やリソース属性を、「applyを行わずに」取得することができます。

(おまけ) refresh

stateだけを更新するコマンドです。
しかし変更内容のプレビュー(plan)が無く安全性が低いため、非推奨となっています。
また、現在はterraform planapply内で自動的にrefreshが行われる設計になっているようなので、使用は避けた方が良いかもしれません。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?