Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TerraformのCI/CD - monorepoとTerraform Cloud
Search
Riki Makita
September 29, 2021
Programming
0
590
TerraformのCI/CD - monorepoとTerraform Cloud
HashiTaslks Japan 2021
Riki Makita
September 29, 2021
Tweet
Share
More Decks by Riki Makita
See All by Riki Makita
What Platform SRE does at Money Forward
grezar
0
2.1k
マネーフォワードのマイクロサービス基盤のこれまでとこれから
grezar
1
1.8k
A Brief Introduction to Make an API Client in Go
grezar
0
110
Other Decks in Programming
See All in Programming
Dockerで始めるAWS Lambda開発
stutkhd0709
14
2.5k
品質とスピードを両立: TypeScriptの柔軟な型システムをバックエンドで活用する
kosui
5
1.1k
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
memory1994
PRO
1
490
15分間でふんわり理解するDocker @ Matsuriba MAX
ukwhatn
PRO
1
340
PHPでOfficeファイルを取り扱う! PHP Officeライブラリを プロダクトに組み込んだ話
hirobe1999
0
840
Ruby製社内ツールのGo移行
bgpat
2
270
WebComponentsで フレームワークを1ページに共存させる
webuilder240
0
150
どうしてこうなった命名集 ~🔥編~ / OOC 2024 LT
pictiny
4
2.9k
Material 3で Material 2ぽい見た目にする
numeroanddev
2
250
DDDはなぜ難しいのか / 良いコードの定義と設計能力の壁
pospome
24
7.5k
Deep Dive 大規模システムアーキテクチャ/開発組織エンジニアリング / Deep Dive Large-Scale System Architecture, Development Organization Engineering
nrslib
15
2.9k
OpenAPI を守るのは難しい
ohmori_yusuke
1
140
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Rebuilding a faster, lazier Slack
samanthasiow
72
8.2k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
39
4.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
355
22k
Mobile First: as difficult as doing things right
swwweet
215
8.5k
Ruby is Unlike a Banana
tanoku
95
10k
It's Worth the Effort
3n
180
27k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
124
32k
Fontdeck: Realign not Redesign
paulrobertlloyd
75
4.8k
Navigating Team Friction
lara
177
13k
Transcript
TerraformのCI/CD - monorepoとTerraform Cloud HashiTalks 2021
自己紹介 牧田 力 • 2017年 7月 マネーフォワード入社 • サービスインフラグループ •
主にAWSとマルチテナント Kubernetesの運用を担当
今日話すこと Terraformにおけるmonorepoとは マネーフォワードのインフラについて multi reposと比較したmonorepoの利点 monorepoで複数のTerraform versionを利用する
マネーフォワードのインフラにつ いて
Architecture Overview
FYI より詳しく知りたい方は以下のスライドを参照してください https://speakerdeck.com/0gajun/multi-tenant-eks-muti-account-architecture-at-money-forward
Terraformにおけるmonorepoと は
Terraformにおけるmonorepoとは 本セッション内ではmonorepoを以下のように定義 複数のworkspace及びmoduleがサブディレクトリを切 る形で単一のリポジトリ内でバージョン管理されている 状態
multi reposとmonorepoの比較
CI/CDのメンテナンスビリティ • CI/CDの設定をすべてのworkspaceに対し てまとめて行える • CIならformatterやlinter、policy as codeな どのチェック •
CI/CDの設定はrepository毎に必要 Monorepo 👍 Multi Repos 👎
複数workspaceのplanをまとめてトリガーできる • moduleの変更時にそれを利用する workspaceのplanをトリガーできる • workspaceのplanが失敗していた場合は 変更直後にそれに気づくことができるので 原因の特定と修正が比較的容易 • moduleと利用側のworkspaceのrepository
別れているので、moduleの変更をトリガー としてworkspace側のplanを走らせるのは 面倒 • 時間がたってからworkspace側でplanを走 らせたときに初めて失敗したことに気づき、 変更から発見までが遅れる Monorepo 👍 Multi Repos 👎
コードの可視性が高い • 複数のworkspaceが一つのrepositoryにま とまっているので検索が比較的容易 • 複数のworkspaceに変更を加える際にもま とめて変更してPRをまとめることができる • workspace毎にrepositoryが別れているの でコードの検索が面倒
• repositoryの数だけPRが必要になる Monorepo 👍 Multi Repos 👎
コードベースの権限管理 • GitHubであればCODEOWNERSなどを用 いてサブディレクトリ毎に CODEOWNERを 設定する必要があるためやや複雑になる • Repository単位で権限をコントロールすれ ばよく、比較的わかりやすい Monorepo
👎 Multi Repos 👍
monorepoで複数のTerraform versionを利用する
複数のTerraform versionの共存 monorepoで複数versionのTerraformを共存させる場合に formatterやlinterのルールがTerraformのメジャーバージョンごとに 違うことが問題になる
複数のTerraform versionの共存 各workspaceに対応するサブディレクトリに .terraform-versionを置 いてworkspaceで利用しているTerraform versionを判定できるよう にしている
複数のTerraform versionの共存 それぞれ.terraform-versionの中身をもとに実行対象となるサブディレクトリを絞り込む 例:1.0.x系のTerraformを利用しているworkspaceを探すワンライナー ここで絞り込んだサブディレクトリに対して forを回してformattterやlinterを実行する
複数のTerraform versionの共存 CIでは各メジャーバージョン毎に代表する versionをひとつ選び、絞 り込んだサブディレクトリに対して実行している
おわり