- v0.10以降で大きく仕様が変わった
-
*.trファイル
- HashiCorp Configuration Language (HCL)で記述
- カレントディレクトリの*.trファイルが全て実行される
- 機能別にディレクトリを分ける方法が良い
- 共通の機能をモジュール化
- 条件分岐が出来ない
- 三項演算子を変わりに使う
countを0にすることで、実行しない事に出来る
- terraformから別のシェル等を実行する場合は、
provisionerを使う- 利用出来るのは、
chef,file,remote-exec,connection - 以下の例の様に
when = "destroy"とした場合、この処理は、terraform destroy時にしか実行されない様に出来る
- 利用出来るのは、
resource "null_resource" "fuga" { provisioner "local-exec" { command = "echo Hello" when = "destroy" } } -
State(
terraform.tfstate)について- Stateの状態、カレントディレクトリ内に、
terraform.tfstateファイルにjson形式で出力される terraform state pullで保存されているStateの内容が確認できる- trファイル側で、項目名を変更した場合、
terraform state mv <修正前> <修正後>で、State側も変更が必要 - パスワードもStateに残るので、以下の様にする
lifecycle { ignore_changes = ["password"] }- Terraform以外の操作で、環境の変更を行う場合も
ignore_changesで対象外にする - StateをS3側で管理するのがベスト
terraform { backend "s3" { bucket = "mybucket" key = "path/to/my/key" region = "us-east-1" } }- Stateが分かれてる場合は
terraform_remote_stateのData Sourceを使う- Stateに出力されるので、セキュリティに気をつける必要はある
- 実行結果は、
terraform showtaintedと出ると注意
- Stateの状態、カレントディレクトリ内に、
- 以上から、
terraform.tfstateファイルの取扱が重要となります - インスタンスの削除は行えるが停止は出来ない(思想的に)
- 勿論再開も出来ない
- 環境を作成して、廃棄する事を目指している