Slide 1

Slide 1 text

Terraform 使うなら 公式スタイルガイドを読もう 〜重要項目 10選〜

Slide 2

Slide 2 text

自己紹介 名前 / 檜山 準(ひやんが) 職種 / AWS エンジニア (CIer 所属) 出身 / 栃木県 趣味 / ギター 🎸 @hiyanger

Slide 3

Slide 3 text

もくじ ※ Terraform とは ※ スタイルガイドとは 1. フォーマットしよう 2. ファイル名 3. Linter を使う 4. リソースの命名 5. リソース記述順 6. .gitignore への追加 7. バージョンの固定 8. モジュールの作り方 9. ディレクトリ構成 10. state の取り扱い

Slide 4

Slide 4 text

Terraformと スタイルガイド

Slide 5

Slide 5 text

Terraformとは シンプルな コード化が できる!!

Slide 6

Slide 6 text

スタイルガイドとは Terraformの利用における ベストプラクティスが書かれた資料! v1.12 のお話しです! ※スタイルガイド外の補足マーク→

Slide 7

Slide 7 text

スタイルガイド 10選!

Slide 8

Slide 8 text

1. フォーマットする gitへ push する前に terraform fmt (-recursive)

Slide 9

Slide 9 text

2. ファイル名 backend.tf main.tf outputs.tf provider.tf variables.tf network.tf storage.tf compute.tf network.tf security _group.tf alb.tf route53.tf 左のファイルを基本に行数が増えてきたら分割を検討。 100~200行くらいが目安。 接続はスネークケース

Slide 10

Slide 10 text

3. Linterを使う tflint を導入して tflint

Slide 11

Slide 11 text

4. リソースの命名 NG resource aws_instance webAPI- aws-instance {...} OK resource "aws_instance" "web_api" {...} 🙅 リソースタイプは含めない

Slide 12

Slide 12 text

5. リソース記述順 読みやすさ(依存関係)だけを考慮して並べる! (ビルド方法には影響しない)

Slide 13

Slide 13 text

6. .gitignore への追加 .terraform 配下 .tfstate 関連 .terraform.tfstate.lock.info .tfvars .terraform.lock.hcl は  プロバイダ固定のため除外しない!

Slide 14

Slide 14 text

7. バージョンの固定 provider と terraform は固定させておく! (チームで共有)

Slide 15

Slide 15 text

8. モジュールの作り方 リソースのグループ化を意識する! (大きすぎず、小さすぎず)

Slide 16

Slide 16 text

9 .(みんな大好き)ディレクトリ構成 main.tf → ファイル分割 → modulesの利用 → 環境分岐(prd/dev)→ state 分 割 スタイルガイドの言及部分 この仕組みだけ頭にいれておけばOK!

Slide 17

Slide 17 text

10. ステートファイルの取り扱い ‼ ステートファイルはシークレット情報を含むため共有しない 通常シークレット情報を使ってリソースをデプロイすると、 ステートに記録されてしまうが、v1.10で追加された write-only attributes(wo) を使うと回避できる! プロバイダ依存なとこだけ注意

Slide 18

Slide 18 text

まとめ

Slide 19

Slide 19 text

まとめ 1. フォーマットしよう → terraform fmt(-recursive) 2. ファイル名 → main からすこずつ粒度を小さくする 3. Linter を使う → tflint 4. リソースの命名 → リソースタイプいれない & スネークケース 5. リソース記述順 → 依存順に上から 6. .gitignore への追加 → state 関連 7. バージョンの固定 → provider と terraform 8. モジュールの作り方 → リソースのグループ化を意識する 9. ディレクトリ構成 → 基本はmoduleで必要なら環境分岐 10. state の取り扱い → 共有しない(woで回避できる)

Slide 20

Slide 20 text

参考 ・モジュール 推奨パターン   https://developer.hashicorp.com/terraform/tutorials/modules/pattern-module-creatio n ・モジュール 標準構造   https://developer.hashicorp.com/terraform/language/modules/develop/structure ・stateにシークレットを表示させない(Terraform v1.11)  https://zenn.dev/terraform_jp/articles/tf-write-only-attributes