ekawaks
4/11/2018 - 8:12 AM

Terraformについて調べた

Terraformについて調べた

Terraformのついて

機能について

バージョン

  • v0.10以降で大きく仕様が変わった

動作の特徴

  • *.trファイル

    • HashiCorp Configuration Language (HCL)で記述
    • カレントディレクトリの*.trファイルが全て実行される
      • 機能別にディレクトリを分ける方法が良い
      • 共通の機能をモジュール化
    • 条件分岐が出来ない
      • 三項演算子を変わりに使う
      • count0にすることで、実行しない事に出来る
    • 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_stateData Sourceを使う
      • Stateに出力されるので、セキュリティに気をつける必要はある
    • 実行結果は、terraform show
      • taintedと出ると注意

注意点

  • 以上から、terraform.tfstateファイルの取扱が重要となります
  • インスタンスの削除は行えるが停止は出来ない(思想的に)
    • 勿論再開も出来ない
    • 環境を作成して、廃棄する事を目指している