Terraform
https://www.datocms-assets.com/2885/1620155113-brandhcterraformprimaryattributedcolor.svg
Terraform is an infrastructure as code (IaC) tool that allows you to build, change, and version infrastructure safely and efficiently. This includes both low-level components like compute instances, storage, and networking, as well as high-level components like DNS entries and SaaS features. Install
Homebrew
asdf(おすすめ)
環境変数(ASDF_HASHICORP_)によるインストールオプションがある。
ARCH を指定できる。
code: (bash)
ASDF_HASHICORP_OVERWRITE_ARCH_TERRAFORM=amd64 asdf install terraform latest
ASDF_HASHICORP_OVERWRITE_ARCH_TERRAFORM=amd64 asdf global terraform latest
Tips
depends_on
依存関係を制御できる
file("credentials.json")が使用できないため、コマンド実行時に var を渡す
.terraformignore
無視するファイル・ディレクトリを記載する
=, ~> だけで良さそう
変数
sensitive
機密情報などに利用して、コマンド実行出力に表示されないようにする
code: (variables.tf)
variable "db_username" {
description = "Database administrator username"
type = string
sensitive = true
}
variable "db_password" {
description = "Database administrator password"
type = string
sensitive = true
}
外部から値を取得する
tfstate には平文で保存されるので、backend の取り扱いに注意
Resources
terraform_remote_state
異なる tfstate ファイルから値を読み込む
Provisioners
Samples
code: (bash)
# 追加されたリソースを表示する
set TARGET (git diff | grep '+resource' | awk -F '"' '{print $2"."$4}')
terraform plan -target=$TARGET
Modules
Style Guide
Repository
リポジトリの分け方
Mono Repo
コードの一元管理、共通化
影響範囲が大きい
Multi Repo
コードを独立して管理
リモートモジュールをダウンロードする時間
Memo
ループ処理
count
count = N で N 個の resource, module を作成する
count.index で現在の値を利用できる
for_each
for_each = set で集合の要素だけ resource, module を作成する
for と組み合わせ可能
each.key, each.value で現在の値を利用できる
Terraform Cloud
State ファイルのみ管理もできる
Configuration Language
Reference