Goalist Developers Blog

IaC by Terraform ~DAY2: Terraform Commands (1)~

どうも,新卒エンジニアのナカノです.

3月中旬辺りから段々と暖かくなってきましたね.

よく通る川沿いの道では沢山の桜の木が花を咲かせており,通勤時が非常に楽しいです.

さて,今回もTerraformに関する記事です.

前回は実行環境の準備に関する内容の記事でした.

今回の内容は,よく使われるTerraformのコマンドに関してです.

目 次
  • よく使われるコマンド
    • init
    • fmt
    • validate
    • plan
    • apply
    • destroy
  • 最後に

よく使われるコマンド

Terraformを用いてインフラリソースを作るには,まず.tfという拡張子の設定ファイルを作成します.

その後にリソース作成用のコマンドを実行すると,各.tfファイルの情報がある一つのJSONファイルにまとめられます.

これをterraform.tfstateというのですが,Terraformはこのファイルを基準にしてリソースの作成・改変・削除を行います.

以下は,それらを行う際によく用いられるコマンドです.

init

リソースの作成・改変・削除を行う際にまず行うべきコマンドです.

これが実行されると,実行場所に.terraformというディレクトリが作成されます.

このディレクトリがないとリソースの作成・改変・削除が行えないため,何よりも一番重要なコマンドです. www.terraform.io

fmt

設定ファイルのフォーマットを行う際に使われるコマンドです.

ただ,使用するエディタによってはフォーマット機能の付いたパッケージがあるため,人によってはあまり使われないかもしれません. www.terraform.io

validate

設定ファイルに文法エラーがあるか否かをチェックする際に使うコマンドです.

便利ですが,次に紹介するplanというコマンドが文法エラーを含めたエラーの検知を行ってくれるため,これもあまり使われないものかもしれません. www.terraform.io

plan

どういったリソースを作成,改変或いは削除するのかをTerraformが決めるために使われるコマンドです.

この実行によってterraform.tfstateと設定ファイルたちの内容の差分を検知し,Terraformの振る舞い方が決まります.

そのため,initコマンドの次に必須なコマンドであると言っても過言ではないでしょう.

ところで,planコマンドには次のよく使われるオプションがあります.

-target=resource

これを用いることで,ある特定のリソースのみに対してplanコマンドを実行させることが出来ます.

ある複数個のリソースに対してplanを行いたいのであれば,このオプションをplanに複数個並べて付ければよいです.

-destroy

削除対象のリソースたちの情報を見るためにこのオプションが使われます.

Terraformのリソース情報の差分認識を観察するには割と重要なオプションです.

-var 'foo=bar'

変数設定されているがその値が空の場合,このオプションが必要です.

このオプションを付けずにコマンドを実行すると,空の変数の値を対話的に要求されます.

その場合は,画面に変数値を入力してコマンド実行の続きを行えば大丈夫です.

-var-file=foo

Terraformには.tfvarsという拡張子のファイルがあり,これは変数設定を行う際に使われるファイルの一つです.

ファイルの内容は一見すると環境変数の設定ファイルの様に見えるかもしれません.

このオプションを使う場合は,オプション値に該当の.tfvarsファイルのパスを指定します.

もしこのオプションを使わない場合は,画面上で.tfvarsに書かれている変数の値を対話的に一つずつ要求されます.

www.terraform.io

apply

planコマンドの結果を元にリソースを作成・改変・削除するために使われるコマンドです.

この実行時でもエラーが検出されることがあるので,planが正常に終了したからといって油断するのは禁物です.

なお,このコマンドでは次のオプションがよく使われます.

-auto-approve

Terraformのバージョンが0.11.0になってからこのオプションが登場しました.

それ以前のバージョンではapplyを実行すると実行が終了するまでコマンドの処理が動き続けていました.

ところが,それではオペレーションミスなどが偶発することもあり,0.11.0以降では実行の許可を対話的に求められる様になりました.

さて,このオプションですが,その「実行許可の対話的要請」をスキップする様にしてくれるものです.

これを付けてapplyを実行すれば,0.11.0以前の様なapplyの挙動になります.場合によっては便利だったりします.

-target=resource, -var 'foo=bar', -var-file=foo

planのオプションにあるものと同様です. www.terraform.io

destroy

作成済みのTerraformで管理されたリソースを削除する際に使われるコマンドです.

実はapplyの実行時でもリソースが削除されることもあるのですが,違いは「destoryは削除のみに使われて,applyでは『リソースを作り直す」挙動を起こす時にリソースが削除される」といった感じです.

このコマンドでも次のよく使用されるコマンドがあります.

-auto-approve

applyのオプションにあるものと同様です.もしこれを使うのであれば,destoryの実行の前にterraform plan -destroyをすべきです.

最後に

よく使われるコマンドは上記の通りですが,基本的には

  • terraform init
  • terraform plan
  • terraform apply
  • terraform destroy

の4つを覚え,使い慣れる様にしておくとよいでしょう.

それでは,今回はここまでと致します.

次回は「場合によって役立つコマンド」についてご紹介致します.