Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Terraform v1.7のTest mocking機能の紹介 / Introducing the Test mocking feature of Terraform v1.7

Terraform v1.7のTest mocking機能の紹介 / Introducing the Test mocking feature of Terraform v1.7

弥生株式会社 もくテク
ンフラ構築、どうしてる? ~IaCの知見共有会~(2024/03/28)
https://mokuteku.connpass.com/event/311038/

yayoi_dd

March 28, 2024
Tweet

More Decks by yayoi_dd

Other Decks in Technology

Transcript

  1. 弥⽣株式会社 開発本部 Misocaチーム ⽔尻 裕⼈ © 2024 Yayoi Co., Ltd.

    All rights reserved. Terraform v1.7のTest mocking機能の紹介 2024年03⽉28⽇ もくテク3⽉ インフラ構築、どうしてる? 〜IaCの知⾒共有会〜
  2. 自己紹介 © 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環境構築
  3. © 2024 Yayoi Co., Ltd. All rights reserved. 2 1.

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

    v1.7 Test mocking機能について紹介
  5. © 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
  6. © 2024 Yayoi Co., Ltd. All rights reserved. 5 n

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

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

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

    terraform test導⼊の第⼀歩 n ⽬標:テストケースは書かずにterraform testが成功するか確認する 最低限のテストを導入してみる
  11. © 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の注意点
  12. © 2024 Yayoi Co., Ltd. All rights reserved. 13 n

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

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