Terraform活用大全 - IaCの今。Lunch LT に行ってきた #Terraform_findy

Terraform活用大全 - IaCの今。Lunch LT に参加しました。オンライン参加。簡単に所感をまとめます。

findy.connpass.com

所感

terraform test は気になるところだけど、Terraform の理解というか経験がまだまだ浅くて、宣言的に定義できるコードにテストを書くメリットがあまりイメージできていない...。

tfstate とかディレクトリをどう分割するかみたいなところはたぶん正解はなくて、それぞれの環境や組織にマッチしたルールを決めて運用する必要がありそう。そこが難しいところなんだろうけど。Terraform のベストプラクティスがあるから見てみるか。

www.terraform-best-practices.com

最後のセッションの、独自の module を使わない利点どんなのがあるのかと思ったけど話を聞いてなるほど過ぎた。これも環境や組織に合わせたルールだよね。

以下、メモから抜粋。

Terraform に test コマンドがやってきた

www.docswell.com

  • import ブロックの id に expression 指定できるように
  • .tftest.hcl
  • command
    • plan or apply
    • 作成したリソースはテスト終了補に削除される
  • テストファイルはプロダクションコードと分離できる
  • Custom Conditions
    • input variable validation
    • 入力値の確認を terraform plan で確認しなくてもよくなった
  • output の値を検証したり

Terraform Registryで公開されているTerraform Modulesが便利だった件

  • 抽象化できずリソース数が多くなる
  • サブネット
    • CIDRの差分が面倒
  • AWS CDK
  • Terraform Registry
    • 抽象化
    • 少ない記述量
  • 信頼性
    • 公式プロバイダ
    • ダウンロード数
    • アップデート頻度

tfstateの分割パターンとディレクトリー構成への適用

  • Terraform 作業者が多いと tfstate への操作が衝突する
    • target 指定
  • tfstate 分割
  • 依存度が低いリソース同士は別 tfstate で管理しやすい
  • 分割パターン
    • プロバイダ別
    • 実行環境別

Terraformでmoduleを使わずに複数環境を構築して感じた利点

  • 内製のモジュールを使わない
  • backend と tfvars で切り替える
    • .tfbackend
    • .tfvars
  • 同一ディレクトリ内の同一 tf を複数環境に適用する
    • terraform init -backend-config=dev.tfbackend
    • terraform plan -var-file=dev.tfvars
    • ↑のラッパーを用意しておく
  • workspace
  • Terraformでmoduleを使わずに複数環境を構築する
  • module にまつわる要素
    • module の粒度
    • variables の命名規則や用途
    • variables の型に object を使っているか
    • module 間の呼び出しは許容しているか
    • ...
  • キャッチアップしやすいコード
  • 独自の設計を考慮しなくていい
    • module の設計は難易度が高い
    • 保守性とか