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

TerraformのCI/CD - monorepoとTerraform Cloud

Riki Makita
September 29, 2021

TerraformのCI/CD - monorepoとTerraform Cloud

HashiTaslks Japan 2021

Riki Makita

September 29, 2021
Tweet

More Decks by Riki Makita

Other Decks in Programming

Transcript

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

    View full-size slide

  2. 自己紹介
    牧田 力
    ● 2017年 7月 マネーフォワード入社
    ● サービスインフラグループ
    ● 主にAWSとマルチテナント
    Kubernetesの運用を担当

    View full-size slide

  3. 今日話すこと
    Terraformにおけるmonorepoとは
    マネーフォワードのインフラについて
    multi reposと比較したmonorepoの利点
    monorepoで複数のTerraform versionを利用する

    View full-size slide

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

    View full-size slide

  5. Architecture Overview

    View full-size slide

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

    View full-size slide

  7. Terraformにおけるmonorepoと

    View full-size slide

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

    View full-size slide

  9. multi reposとmonorepoの比較

    View full-size slide

  10. CI/CDのメンテナンスビリティ
    ● CI/CDの設定をすべてのworkspaceに対し
    てまとめて行える
    ● CIならformatterやlinter、policy as codeな
    どのチェック
    ● CI/CDの設定はrepository毎に必要
    Monorepo 👍 Multi Repos 👎

    View full-size slide

  11. 複数workspaceのplanをまとめてトリガーできる
    ● moduleの変更時にそれを利用する
    workspaceのplanをトリガーできる
    ● workspaceのplanが失敗していた場合は
    変更直後にそれに気づくことができるので
    原因の特定と修正が比較的容易
    ● moduleと利用側のworkspaceのrepository
    別れているので、moduleの変更をトリガー
    としてworkspace側のplanを走らせるのは
    面倒
    ● 時間がたってからworkspace側でplanを走
    らせたときに初めて失敗したことに気づき、
    変更から発見までが遅れる
    Monorepo 👍 Multi Repos 👎

    View full-size slide

  12. コードの可視性が高い
    ● 複数のworkspaceが一つのrepositoryにま
    とまっているので検索が比較的容易
    ● 複数のworkspaceに変更を加える際にもま
    とめて変更してPRをまとめることができる
    ● workspace毎にrepositoryが別れているの
    でコードの検索が面倒
    ● repositoryの数だけPRが必要になる
    Monorepo 👍 Multi Repos 👎

    View full-size slide

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

    View full-size slide

  14. monorepoで複数のTerraform
    versionを利用する

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide