tl;dr
terraform に限らずですが, コマンドのオプションとかちゃんと覚えていられないので, Makefile にまとめておいて, make xxxx
で叩くのが個人的なトレンドです. Linux や macOS では特に何もしなくても make コマンドを叩けるので, Makefile に定型処理を書いておくことで, コマンドオプションのうろ覚えによるオペミスなども防げるのではないかと考えています.
俺の Makefile
こだわりの help
terraform コマンドはパスが通っている前提です. 環境に応じて terraform のパスは書き換えてください.
help: ## ヘルプを表示する @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' init: ## terraform init を実行 @terraform init validate: ## tf ファイルを検証する @terraform validate && printf "\e[32m***** validated ******\e[m\n" plan: validate ## terraform plan を実行する @terraform plan apply: validate ## terraform apply を実行する @terraform apply show: ## terraform show を実行する @terraform show destroy: ## terraform destroy を実行する @terraform destroy refresh: ## terraform refresh を実行する @terraform refresh test: ## ローカル環境で circleci を実行する @circleci build .circleci/config.yml
こだわりは help
で, rake -T
みたいな感じでタスクの一覧を確認することが出来ます. 以下のような感じです.
$ make help apply terraform apply を実行する destroy terraform destroy を実行する help ヘルプを表示する init terraform init を実行 plan terraform plan を実行する refresh terraform refresh を実行する show terraform show を実行する test ローカル環境で circleci を実行する validate tf ファイルを検証する $ make apply terraform apply を実行する destroy terraform destroy を実行する help ヘルプを表示する init terraform init を実行 plan terraform plan を実行する refresh terraform refresh を実行する show terraform show を実行する test ローカル環境で circleci を実行する validate tf ファイルを検証する
ね, いいでしょう〜.
タスクに依存関係を
例えば, terraform plan
や terraform apply
する場合, 直前に terraform validate
も叩きたい場合, 以下のように Makefile を定義しておくと, validate
してから plan
や apply
が動きます.
... validate: ## tf ファイルを検証する @terraform validate && printf "\e[32m***** validated ******\e[m\n" plan: validate ## terraform plan を実行する @terraform plan apply: validate ## terraform apply を実行する @terraform apply ...
例えば, terraform plan
してみます.
$ make plan ***** validated ****** Refreshing Terraform state in-memory prior to plan... The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. ... ------------------------------------------------------------------------ No changes. Infrastructure is up-to-date. This means that Terraform did not detect any differences between your configuration and real physical resources that exist. As a result, no actions need to be performed.
validate
を実行して, 特に問題が無いので, 引き続き plan
が動いていることがわかります.
以上
細かすぎて伝わらないかもしれない tips でした. make コマンド奥深いです.