Slide 1

Slide 1 text

弥⽣株式会社 開発本部 Misocaチーム ⽔尻 裕⼈ © 2024 Yayoi Co., Ltd. All rights reserved. Terraform v1.7のTest mocking機能の紹介 2024年03⽉28⽇ もくテク3⽉ インフラ構築、どうしてる? 〜IaCの知⾒共有会〜

Slide 2

Slide 2 text

自己紹介 © 2024 Yayoi Co., Ltd. All rights reserved. 1 x.com/mizukmb github.com/mizukmb n ⽔尻 裕⼈ n 2020年6⽉ 弥⽣(株)転籍 n 2018年2⽉ (株)Misoca⼊社 n 弥⽣歴3年、Misoca開発歴6年のソフトウェアエンジニア n クラウド請求管理サービスMisocaのインフラ運⽤・SRE担当 n IaC歴 n Chef:2年ぐらい、オンプレサーバー構築やISUCON n Terraform:7年ぐらい、AWS環境構築

Slide 3

Slide 3 text

© 2024 Yayoi Co., Ltd. All rights reserved. 2 1. Terraform v1.7 Test mocking機能について紹介 2. Misocaで使ってみる アジェンダ

Slide 4

Slide 4 text

© 2024 Yayoi Co., Ltd. All rights reserved. 3 Terraform v1.7 Test mocking機能について紹介

Slide 5

Slide 5 text

© 2024 Yayoi Co., Ltd. All rights reserved. 4 n 作成するリソースに対してテストコー ドが書ける機能 n terraform testを実⾏すると u 内部でapplyが実⾏される u 作成されたリソースに対してテストを実⾏ する u テストが終了すると作成したリソースを削 除する n applyからplanにすることもでき、この 場合はtfstateを読み込んでテストを実 ⾏する その前に、terraform testコマンドについておさらい terraform test AWS apply実⾏ テスト実⾏ 結果通知 destroy実⾏ AWS Cloud

Slide 6

Slide 6 text

© 2024 Yayoi Co., Ltd. All rights reserved. 5 n *.tftest.hclという拡張⼦でテストファイルを作成する n runブロックの中にアサーションを書いていく その前に、terraform testコマンドについておさらい

Slide 7

Slide 7 text

© 2024 Yayoi Co., Ltd. All rights reserved. 6 n リソースに対してテストが書ける機能が公式から提供されるのは嬉しい n しかし、aws providerを利⽤している場合はAWS認証情報が必須 n また、applyが終わるまで待つ必要がありテスト完了に時間がかかる terraform testでテストが書ける!けど…

Slide 8

Slide 8 text

© 2024 Yayoi Co., Ltd. All rights reserved. 7 もっと手軽に実行したい!

Slide 9

Slide 9 text

© 2024 Yayoi Co., Ltd. All rights reserved. 8 n provider, data, moduleのモックが利⽤できるようになる n AWSの認証情報無しでテストを実⾏可能に u テストの⾼速化やセキュリティ向上などの利点がある terraform testにmock機能が実装(v1.7の新機能)

Slide 10

Slide 10 text

© 2024 Yayoi Co., Ltd. All rights reserved. 9 n 値はmock側で⾃動⽣成 terraform testにmock機能が実装(v1.7の新機能) • Numbers will be 0. • Booleans will be false. • Strings will be a random 8-character alphanumeric string. • Collections, including sets, lists, and maps, will be empty collections. • Objects will contain all required sub-attributes generated using this same set of rules recursively. Tests - Provider Mocking | Terraform | HashiCorp Developer, https://developer.hashicorp.com/terraform/language/tests/mocking より引用

Slide 11

Slide 11 text

© 2024 Yayoi Co., Ltd. All rights reserved. 10 Misocaで使ってみる

Slide 12

Slide 12 text

© 2024 Yayoi Co., Ltd. All rights reserved. 11 n terraform test導⼊の第⼀歩 n ⽬標:テストケースは書かずにterraform testが成功するか確認する 最低限のテストを導入してみる

Slide 13

Slide 13 text

© 2024 Yayoi Co., Ltd. All rights reserved. 12 n terraform_remote_state がS3バケットのアクセスを求めるためAWS認証情報が必 要 u terraform_remote_stateやめた n mockで⽣成したARN IDがバリデーションエラーに引っかかる u Error: “role_arn” (azga9se9) is an invalid ARN: arn: invalid prefix というエラーになる u ランダムなアルファベット8⽂字な⽂字列をmockが返すのが理由 u mock_resource や mock_data でバリデーションを通る⽂字列を返すように実装した 意外と通らない。mockの注意点

Slide 14

Slide 14 text

© 2024 Yayoi Co., Ltd. All rights reserved. 13 n mockあり u メリット:ローカルで⼿軽に実⾏できる u デメリット:既存のプロジェクトに⼊れるにはいくつかの前準備が必要 n mockなし u メリット:mockありよりも導⼊が楽 u デメリット:AWS認証情報が必要。applyするので結構強めの権限が要る mockありなしのテスト雑感

Slide 15

Slide 15 text

© 2024 Yayoi Co., Ltd. All rights reserved. 14 n HashiCorp社のブログでテストピラミッドに従ってTerraformのテストを実装する ⽅法が紹介されている n mockありテストは単体テスト向き n mockなしテストは結合テスト向き テストピラミッドに従って実装する Testing HashiCorp Terraform | HashiCorp Blog, https://www.hashicorp.com/blog/testing-hashicorp-terraform より引用

Slide 16

Slide 16 text

© 2024 Yayoi Co., Ltd. All rights reserved. 15 n TerraformのTest mocking機能について紹介しました n v1.7の新機能で、mockを使うことでテスト実⾏をより柔軟にできます n 既存プロジェクトにmockを利⽤したテストを導⼊するときは⼀⼿間要るかもし れないです n mockは単体テストに利⽤するのがベストプラクティスっぽいです まとめ