はじめに
最近「Terraform」というよくわからないコマンドを使う機会があったので概要を抑えつつ、使い方をまとめていきます。
Terraformのコマンドだけ知りたい方はこちらまで読み飛ばしてください!
紹介するコマンドは以下のサイトを参考にしました。
IaCとは
Terraformの前に基本的な考え方であるIaCについて説明していきます。
IaCとはInfrastructure as Codeの略であり、サーバのインフラ(CPU、ストレージなど)構築を、コードを用いて自動的に行うことを示しています。
IaCを利用するメリット
以下にIaCを利用するメリットを列挙します。
- 一貫性と標準化の役割
- 人為的なミスの軽減
- 作業時間の短縮
- バージョン管理が楽
ということでやはり人間が手作業を繰り返して構築していた作業を機械的に処理することが出来るので個人的には、時間効率とミス軽減の恩恵が大きいのかなと感じました。
逆にデメリットも調べましたが、使用者本人にかかる時間的な学習コストについての言及が大半で一部セキュリティや変更管理のプロセスについて言及されていましたが、技術的に大きな問題はないと考えます。
Terraformとは
Terraformは、HashiCorp社が提供するIaCツールとなっています。
Terraformではインフラの構成をコードで宣言します。構造化された構成ファイルでは、手動で操作することなくインフラ構成を自動で管理できます。
インフラの初期プロビジョニング、更新、破棄、いずれも記述したコードにより宣言し、実行します。
Terraformでは、構成ファイルで宣言した変更内容を宛先のプロバイダー(AWS, Azure, GCP, VMWareなどをサポートしている)にプッシュします。
AWSではGo言語で書かれたAWS SDKを介して、サーバーをクラウド上に直接構築することが出来ます。
コマンド紹介
では早速基本的なコマンドについて紹介していきたいと思います!
terraform init
terraform init コマンドは、Terraform 構成ファイルを含む作業ディレクトリを初期化します。これは、新しい Terraform 構成を記述した後、またはバージョン管理から既存の構成を複製した後に実行する必要がある最初のコマンドです。このコマンドは複数回実行しても安全です。
terraform plan
terraform plan コマンドは実行プランを作成し、Terraform がインフラストラクチャに対して行う予定の変更をプレビューできるようにします。デフォルトでは、Terraform がプランを作成すると次の処理が行われます。
-
現在の状態が最新であることの確認
-
現在の構成と以前の構成を比較し、相違点がある場合記録する
-
適用するとリモート オブジェクトが構成と一致するようにする一連の変更アクションを提案します
どのようなリソースが作成・更新・削除されるのかを事前に確認する
使い方
terraform plan [オプション]
ここで、オプション指定を行うと動作方法を変更することが出来ます。
これからいくつかのオプションを紹介していきます。
オプション | 内容 |
---|---|
-refresh=false | 構成の変更を確認する前に、Terraform の状態をリモート オブジェクトと同期するデフォルトの動作を無効化 |
-repleace=ADDRESS | 指定されたアドレスのリソース インスタンスを置き換えるようにする |
-target=ADDRESS | 指定されたアドレスに一致するリソース インスタンスまわりにのみに計画作業を集中するように指示 |
-var 'NAME=VALUE' | 構成のルート モジュールで宣言された 単一の入力変数の値を設定 |
-var 'file=FILENAME' | tfvarsファイルの定義を使用して、構成のルート モジュールで宣言されている 可能性のある多数の入力変数の値を設定 |
terraform apply
terraform apply コマンドは、Terraform プランで提案されたアクションを実行します。
使い方
terraform apply [オプション] [適用したいファイル名]
このapplyコマンドにもたくさんのオプションが存在するので紹介します。
オプション | 内容 |
---|---|
-auto-approve | 作成予定のリソース表示や実行確認を省略する |
-backup=path | バックアップファイルのパスを指定する |
-compact-warnings | エラーを含まないの場合は、省略した形で表示する |
-lock=true | ファイルをロックする(またはしない)ように指定する |
-lock-timeout=0s | ファイルのロックが失敗した場合のリトライまでの時間を指定する |
-input=true | 未定義の変数がある場合に変数の入力を求めるかどうかを指定する |
-no-color | 実行中のアウトプットを色なしで表示させる |
-parallelism=n | 並列で実行するリソース数を指定する |
-refresh=true | 実行前にファイルを更新するかどうかを指定する |
-state=path | ファイルのパスを指定する |
-state-out=path | 更新するファイルを指定する ※ -state は読み込む&更新するファイル |
-target=resource | どのリソースを実行するかを指定する |
-var 'foo=bar' | 変数をコマンド実行時に上書きする |
-var-file=foo | 変数を定義した tfvars ファイルを指定する |
terraform destroy
terraform destroy コマンドは、特定の Terraform 構成によって管理されているすべてのリモート オブジェクトを破棄するのに便利な方法です。
使い方
terraform destroy [オプション]
また、削除する前に何が削除されるのか確認するためにも以下のコマンド実行をお勧めします。
terraform plan -destroy
destroyコマンドにおけるオプション利用例を見つけられなかったことは内緒です。(知っている方いらっしゃいましたら是非教えてください。)
さいごに
今回はTerraformの基本的なコマンドについて紹介しましたが、まだまだ紹介しきれていないコマンドやオプションがたくさんあると思います。情報が入り次第記事を更新しようと考えておりますが、使っていて便利なツールであることは確信していますので是非皆さん利用してみてください!