terraform
terraformはインフラを定義に沿ってデプロイしてくれるソフト
嬉しみ
環境をコピペで増やせる!!
環境設定をgit管理できる!!
色んなリソース間で設定値を引き回せる
サービスAの項目αの値をサービスBのβにコピペ、が宣言的に書ける
特徴
ディレクトリ構成、ファイル分割は自由。実行時にフラットに展開・統合される
1ファイルに全部を書くこともできるし、細かくファイルとディレクトリを分けることもできる
逆に使う側のセンスが大きく問われるやつ
現環境と、これから適用しようとする変更の差分をdiff表示してくれる
プロバイダの癖により、実際には差分がないものが差分として出ることがある
問題ない差分を無視するスキルが必要
terraformは何でないか
AWSとGCPを抽象化するなんかではない
AWS用のプロバイダ、別サービスのプロバイダ、みたいにサービスごとの仲立ちをしてくれるものがある
それぞれの間に互換性はない。あるやつも存在するかもしれんけど。
アプリケーションのデプロイに使うツールではない
インフラの状態を定義するツール
インフラと、その上で動くアプリケーションは別のもの
概念
もの
こと
ロック
コマンド
DSL
ブロック
resource:管理対象のリソースの定義
lifecycle:???
output:Terraform Moduleの戻り値に相当するもの。"${module.宣言名.output名}" みたいに参照できて、apply後に表示される。 data:データソースの定義。どこかにある設定を参照するためのもの。
Tips
リソースの変更マーク
+ 作成
- 削除
~ 変更
-/+ 再作成(状態を持つリソースでは状態が失われる。要注意)
ファイル分割
拡張子.tfのファイルが自動的に読み込まれる
1ファイルに全部を書くこともできるし、細かくファイルとディレクトリを分けることもできる
運用パターン
データを状態としてもつリソース(ex. RDB)はtfstateを分ける。誤ってデータを持たないリソースと一緒に消す恐れがある。 /icons/hr.icon
資料
公式
入門
実践
Tips