AWS環境のIaCのために、terraformを初めて導入してみたので、コマンドなどを忘れないようにメモ。ちなみに、CloudFormationとどちらを今後使い込んでいくか迷っているのですが、CloudFormationは数年間に少し触ってすごく面倒だった(当時)ので、遠ざかっていましたが、あれからだいぶたってYAMLにも対応したので使いやすくなっているかも、、。
基本のセット
terraform init terraform plan terraform apply terraform destroy
init
は本当の最初に一度だけ実行すると思っていたのだが、新たなprovider
を使う構成にしたときなど、ときどき必要になる。
plan
で現在の状態とtfファイルとを比較して、実行計画を立てる。どこに差分があって、追加するのか変更で良いのか、削除するのか、といったことが計画される。
apply
でも内部的にはplan相当のことをやったのちに、本当に実行するかを確認してくれるので、plan→applyの流れが必須というわけではない。
destroy
で環境を削除する。
-target
オプションを使用することで、特定のリソースだけを構築したり削除することができる。
terraform destroy -target=aws_instance.web
terraform fmt # tfファイルのフォーマット整形 terraform console terraform graph | dot -Tsvg > graph.svg # 依存関係の可視化
便利関数
サブネットのCIDR
cidrsubnet("10.0.0.0/16", 8, 0) # → 10.0.0.0/24 cidrsubnet("10.0.0.0/16", 8, 1) # → 10.0.1.0/24 cidrsubnet("10.0.0.0/16", 8, 100) # → 10.0.100.0/24
ホストのIPアドレス(のCIDR表現)
cidrhost("10.0.100.0/24", 3) # → 10.0.100.3/32
実際の使いどころとしては、CIDRをベタ書きしたくないときに便利。 VPCのCIDRを基準にして、サブネットCIDRとその中に配置するホストのIPアドレスを表現することが出来る。
# VPC CIDRが10.1.0.0./16とする cidrsubnet(aws_vpc.vpc.cidr_block, 8, 1) # →10.1.1.0/24 cidrhost(aws_subnet.public_subnet, 25) # →10.1.1.25/32
VPCのCIDRを変更したときにサブネットやホストのCIDRを書き換えなくても良いので、IaCが捗ります。
既存の構成のterraformへの取り込み
terraform import
しかし、importコマンドを使うやり方は、手順が多くて、やや面倒くさい。
そこで、terraforming
がおすすめ。
全てのリソースには対応していないが、対応しているものはterraforming
のほうが使いやすい