▼ 目的
使いそうなCLIを書いておきます
CLI
コマンド群
- terraform state list : tfstateファイルを参照してリソースを見る
- terraform state show {<リソース種別>.<リソース名> }:指定したリソース種別のリソース情報を表示する
- eg1: data.aws_ami.app
- eg2: aws_instance.app_server
- terraform state mv <リネーム前リソース名> <リネーム後リソース名> : tfstateファイルのリソース名を変更する
- 要点: リソース差分なしにするためにはtfstateファイルの変更及びコードの変更の2つが必要
- 注意点1: どちらか片方のみの場合、削除&新規作成となるため、必ず両方修正すること
- eg1: terraform state mv aws_instance.app_server aws_instance.application_server
- terraform import <terraformリソース名> <AWSリソースID> : 管理対象外リソースをtfstateファイルに取り込む
- eg. aws_instance.testserver i-00070c7173168c015 (既存EC2をtestesrverの名前でtfstateファイルに取り込む)
- 要点: 取り込んだあとにコード側にも追加しないと差分として扱われる
- terraform state rm <tfstateのリソース名> : tfstateファイルから対象のリソースを消す
- 要点: tfstateファイルから管理対象から外したいリソースを消すコマンド
- 注意点1: コードからも削除しないと新規作成になる
- 注意点2: あくまでtfstateファイルの操作のため、AWS上のリソースは残る。
- terraform refresh : リソースの情報をtfstateファイルに反映させる
- 要点: 手でEC2等の設定を変更した際にtfstateファイルに取り込む
- 注意点1: コードも追従しないと差分として検出される
Meta引数
詳しくは こちらの記事を参照
- depends_on
- count (指定回数ループさせられる)
- for_eachと同時に使えない
- idnexを使うことで数値を扱える(「user_1」,「user_2」の様に出来る)
- for_each(map,setを使ってループできる。listは使えない)
- リストを使いたい場合は、toset()を使って変換が必要
lifecycle引数
resourceブロックの中に定義できる。CfnでいうDeletation_policyを登録するのと同じイメージ
- create_before_destroy : リソースを削除する前に作成する(EC2等で使いそう?)
- prevent_destory : 削除防止(RDSなど削除してほしくないものに設定)
- ignore_changes : 指定した属性に変更があったとしても無視する
- 用途: コード上将来使うが今は仮置きしたい属性等を定義したい時
リソースの依存関係の見方
- コードをDOT形式に変換、Graphvizで見れる
- terraform graph > <file name>.dot
- <filename>をSVGのためviewer(Graphviz)で見る
- VScodeの場合はコマンドパレットからGraphvizを使う
3項演算子
terraformにはif文は存在しないため、分岐をさせたい場合はこれらを駆使する。
例えば、prod/dev等の環境毎に異なる部分で使う。