Terraform

きほんのき

  • terraform init
    • -reconfigure
  • terraform workspace
    • list
  • terraform plan
  • terraform apply
  • terraform import <resource.resource.name> <identifier>
  • terraform state show <resource.resource.name>

tips

  • 共有環境の場合,tf stateはlocalにおくのではなく,S3 bucket等に保存する.こうすることでlockの共有やstateの共有ができる.事故が防げる.

un-terraform-managedな状態からterafform-managedにする

  • 基本的には.tfを書き,terraform import.tf内のリソースと紐付け,terraform planしてdiffを減らしていく作業になる.
  • リソースと紐付けたら,terraform state show等をうまく使うとリソースの記述がサクサクできるので便利.
  • References

terraformのversion変更にはtfenvが便利

  • homebrewからinstallできる
    • brew install tfenv
    • https://github.com/tfutils/tfenv
% tfenv --help
Usage: tfenv <command> [<options>]

Commands:
   install       Install a specific version of Terraform
   use           Switch a version to use
   uninstall     Uninstall a specific version of Terraform
   list          List all installed versions
   list-remote   List all installable versions
   version-name  Print current version
   init          Update environment to use tfenv correctly.
  • tfnev local x.x.x はないのか?
    • ない.かわりに .terraform-version で指定させることができる.
$ cat .terraform-version
0.6.16

こんなやつをterraformリソースのrootあたりにいれておけばいい.近い階層のやつの.terraform-versionに記載されたversionが採用される.

version系をかためる

  • terraform versionは required_version でかためれる.
  • 各種providerも version として記述してかためれる.
provider "google" {
  project = "myproject"
  region  = var.region
}

terraform {
  required_version = "1.0.0"
  backend "gcs" {
    bucket = "my-tfstate-bucket"
  }

  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "3.73.0"
    }
  }
}

play/apply のtargetを指定して範囲を限定する

  • 全部さらうのが理想的だが時間の関係などで非効率的な場合,変更範囲が掌握されていて限定的な場合に有効.
terraform apply --target=resource01 --target=resource02

parallelismの値で並列数をあげて高速化とか

  • apply, planで --parallelism=30 みたいにする.defaultで10.
    • export TF_CLI_ARGS_plan="--parallelism=30" とかでも指定できるのでdefault値として変更したければshellのrcとかに書いておくもの良い.

Pluralith · GitHub

  • terraformから構成図をgenearteできるくん