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

TerraformのCI/CD - monorepoとTerraform Cloud

B7e796bfd94148a8552ccac56e0bb71f?s=47 Riki Makita
September 29, 2021

TerraformのCI/CD - monorepoとTerraform Cloud

HashiTaslks Japan 2021

B7e796bfd94148a8552ccac56e0bb71f?s=128

Riki Makita

September 29, 2021
Tweet

Transcript

  1. TerraformのCI/CD - monorepoとTerraform Cloud HashiTalks 2021

  2. 自己紹介 牧田 力 • 2017年 7月 マネーフォワード入社 • サービスインフラグループ •

    主にAWSとマルチテナント Kubernetesの運用を担当
  3. 今日話すこと Terraformにおけるmonorepoとは マネーフォワードのインフラについて multi reposと比較したmonorepoの利点 monorepoで複数のTerraform versionを利用する

  4. マネーフォワードのインフラにつ いて

  5. Architecture Overview

  6. FYI より詳しく知りたい方は以下のスライドを参照してください https://speakerdeck.com/0gajun/multi-tenant-eks-muti-account-architecture-at-money-forward

  7. Terraformにおけるmonorepoと は

  8. Terraformにおけるmonorepoとは 本セッション内ではmonorepoを以下のように定義 複数のworkspace及びmoduleがサブディレクトリを切 る形で単一のリポジトリ内でバージョン管理されている 状態

  9. multi reposとmonorepoの比較

  10. CI/CDのメンテナンスビリティ • CI/CDの設定をすべてのworkspaceに対し てまとめて行える • CIならformatterやlinter、policy as codeな どのチェック •

    CI/CDの設定はrepository毎に必要 Monorepo 👍 Multi Repos 👎
  11. 複数workspaceのplanをまとめてトリガーできる • moduleの変更時にそれを利用する workspaceのplanをトリガーできる • workspaceのplanが失敗していた場合は 変更直後にそれに気づくことができるので 原因の特定と修正が比較的容易 • moduleと利用側のworkspaceのrepository

    別れているので、moduleの変更をトリガー としてworkspace側のplanを走らせるのは 面倒 • 時間がたってからworkspace側でplanを走 らせたときに初めて失敗したことに気づき、 変更から発見までが遅れる Monorepo 👍 Multi Repos 👎
  12. コードの可視性が高い • 複数のworkspaceが一つのrepositoryにま とまっているので検索が比較的容易 • 複数のworkspaceに変更を加える際にもま とめて変更してPRをまとめることができる • workspace毎にrepositoryが別れているの でコードの検索が面倒

    • repositoryの数だけPRが必要になる Monorepo 👍 Multi Repos 👎
  13. コードベースの権限管理 • GitHubであればCODEOWNERSなどを用 いてサブディレクトリ毎に CODEOWNERを 設定する必要があるためやや複雑になる • Repository単位で権限をコントロールすれ ばよく、比較的わかりやすい Monorepo

    👎 Multi Repos 👍
  14. monorepoで複数のTerraform versionを利用する

  15. 複数のTerraform versionの共存 monorepoで複数versionのTerraformを共存させる場合に formatterやlinterのルールがTerraformのメジャーバージョンごとに 違うことが問題になる

  16. 複数のTerraform versionの共存 各workspaceに対応するサブディレクトリに .terraform-versionを置 いてworkspaceで利用しているTerraform versionを判定できるよう にしている

  17. 複数のTerraform versionの共存 それぞれ.terraform-versionの中身をもとに実行対象となるサブディレクトリを絞り込む 例:1.0.x系のTerraformを利用しているworkspaceを探すワンライナー ここで絞り込んだサブディレクトリに対して forを回してformattterやlinterを実行する

  18. 複数のTerraform versionの共存 CIでは各メジャーバージョン毎に代表する versionをひとつ選び、絞 り込んだサブディレクトリに対して実行している

  19. おわり