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
IaCのCI/CDを考えよう / JAWS-UG_Okayama_IaC_CICD
Search
sasaki
June 03, 2023
Technology
1
1.2k
IaCのCI/CDを考えよう / JAWS-UG_Okayama_IaC_CICD
JAWS-UG Okayama 2023 IaC/のCI/CDを考えよう
sasaki
June 03, 2023
Tweet
Share
More Decks by sasaki
See All by sasaki
Lambdaの運用についてのなにか / lambda_unyo
taishin
0
67
おすすめAWSコスト対策 / AWS Startup Meetup Osaka AWS Cost
taishin
1
250
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
900
ECS Runtime Monitoring で コンテナランタイムセキュリティに入門 / nakanoshima-dev-ecs-runtime-monitoring
taishin
0
140
JAWS-UG-Osaka-guardrail
taishin
0
230
成長を続けるSaaSのAWSコスト管理において 開発者としてできること / AWS DevDay SaaS Cost
taishin
11
2.5k
目指せCoverage100%! AutoScale環境におけるSavings Plans購入戦略 / JAWS-UG_SRE_Coverage
taishin
1
1.9k
SLO策定までの道とChaosEngineeringを使った最適解の見つけ方 / SLO ChaosEngineering
taishin
1
1.9k
ChatworkDevDay_Kubernetes導入における実践プラクティス / ChatworkDevDay_Kubernetes
taishin
0
7k
Other Decks in Technology
See All in Technology
テストを楽に書きたい
tomorrowkey
0
110
Efficient zero-copy networking using io_uring
ennael
PRO
0
360
【shownet.conf_】コンピューティング資源を統合した分散コンテナ基盤の進化
shownet
PRO
0
410
Product Utilization of Large Language Models Starting Today
ymatsuwitter
3
1.4k
OPENLOGI Company Profile
hr01
0
54k
Vespaを利用したテクいベクトル検索
szdr
2
150
Oracle GoldenGate 23ai 導入Tips
oracle4engineer
PRO
1
280
入社半年(合計1年)でGoogle Cloud 認定を全冠した秘訣🤫
risatube
1
210
エンジニア向け会社紹介資料
caddi_eng
14
270k
スタサプ ForSCHOOLアプリのシンプルな設計
recruitengineers
PRO
3
580
O'Reilly Superstream: Building a RAG App to Chat with Your Data
pamelafox
0
120
プロダクト開発の貢献をアピールするための目標設計や認知活動 / Goal design and recognition activities to promote product development contributions.
oomatomo
5
860
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
327
21k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.3k
Art, The Web, and Tiny UX
lynnandtonic
296
20k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Atom: Resistance is Futile
akmur
261
25k
Imperfection Machines: The Place of Print at Facebook
scottboms
264
13k
Building Better People: How to give real-time feedback that sticks.
wjessup
362
19k
Code Reviewing Like a Champion
maltzj
519
39k
Practical Orchestrator
shlominoach
186
10k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Web development in the modern age
philhawksworth
205
10k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Transcript
© Chatwork IaCのCI/CDを考えよう 2023年6月3日 SRE部 佐々木真也 Chatwork株式会社 JAWS-UG Okayama 2023
自己紹介 2 • 名前 ◦ 佐々木真也 • 所属 ◦ Chatwork株式会社
▪ 2020年6月〜 ▪ SRE部 マネージャー • Twitter ◦ @taishin • 趣味 ◦ サッカー観戦
会社概要 3 会社名 Chatwork株式会社 代表取締役CEO 山本 正喜 グループ従業員数 379名(2023年3月末日時点) 所在地
東京、大阪 設立 2004年11月11日
Chatworkとは 4 効率的に情報共有できる グループチャット 仕事の見える化ができる タスク管理 見落としがなくなる ファイル管理 いつでも会議ができる ビデオ/音声通話
* BOXIL SaaS AWARD 2022「ランキング部門 コラボレーション部門賞」「ベスト評価賞 (初期設定の容易さNo.1、価格の満足度No.1)」を受賞 BOXIL「Chatwork」口コミ評価 * Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。 * 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定。
Chatworkは利用者数No.1*のビジネスチャット 5 3月 リリース 10万社 突破! 20万社 突破! 導入社数 39万7000社以上!
(2023年3月末日時点) 30万社 突破! * Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(MAU:Monthly Active User)調査。 調査対象はChatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスをChatwork株式会社にて選定
IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5
AGENDA アジェンダ 1 6
IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5
AGENDA アジェンダ 1 6
Infrastructure as Code(IaC)環境にCI/CDがあると・・・ 8 • レビュー/承認 • 作業履歴 • 権限
• 環境依存
CI/CDがないとき 9 Deploy コード管理 コード管理 コード管理 Deploy Deploy
CI/CDがないとき 10 Deploy コード管理 コード管理 コード管理 Deploy Deploy • レビュー/承認
◦ Githubでレビューはできるが、承認がなくてもデプロイ可能 • 作業履歴 ◦ 残らない • 権限 ◦ Deployする人全員に強い権限が必要 • 環境依存 ◦ 作業者環境によるバージョン差異
CI/CDがあるとき 11 CI/CD Deploy コード管理/コマンド 実行 コード管理/コマンド コード管理/コマンド
CI/CDがあるとき 12 CI/CD Deploy コード管理/コマンド 実行 コード管理/コマンド コード管理/コマンド • レビュー/承認
◦ GithubのPRでレビュー、Deployは承認を必須にできる • 作業履歴 ◦ GithubのPRを見れば、履歴が分かる • 権限 ◦ CI/CD環境にのみ権限が必要で、作業者には権限が不要 • 環境依存 ◦ 誰が実行しても同じ結果
IaC環境にCI/CDは必要? 13 • 複数人で作業する ◦ 一人でやるだけならそれほど必要ないかも • 構成の管理、変更等の運用が必要 ◦ 初期導入だけの目的ならいらないかも
IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5
AGENDA アジェンダ 1 6
以前のChatworkでは 15 • ツール ◦ Terraformを採用 • 管理 ◦ コード(tfファイル)はGithub
◦ tfstateもGithub • フロー ◦ 開発者 ( ≒ ReadOnly権限) ▪ 開発者がコードを作成し、Readonly権限でplan実施 ▪ GithubでPRを作成し、plan実行結果をGithubのコメントに貼り付け ▪ SREチームにレビュー依頼 ◦ SREチーム ( ≒ Administrator権限) ▪ PRレビュー ▪ ローカル環境でapply ▪ tfstateをPush ▪ PRをマージ
以前のChatworkでは 16 • 課題 ◦ 手間 ▪ 依頼する側も作業する側も ◦ バージョンの差異
▪ 作業時に異なるTerraform、AWS Providerのバージョンで実施 してしまい、なんかおかしなことになる ◦ apply後のtfstateのPushし忘れ ▪ 次回作業時に?なdiffが出る ▪ 慌てて前回のtfstateをプッシュ
IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5
AGENDA アジェンダ 1 6
CI/CDツール選定 18 • 考慮点 ◦ 料金 ◦ モノレポでマルチアカウント対応 ◦ IAMキー
◦ Github上で操作 ◦ インフラ管理 ▪ 外部公開(インターネットからのアクセス) ◦ tfstateの保存場所 ◦ ロック機能
CI/CDツール候補 19 • Terraform Cloud • Github Actions • Atlantis
実際はGithub Actions + SelfHosted Runner や PipeCDも検討
Terraform Cloud 20 • Terraformの開発元のHashiCorp社が提供しているマネージ ドサービス • tfstateの保存と管理 • Gitサービスと連携し、自動化を提供
• GUIで設定も簡単 • tfstateの差分が見れたり、通知機能もあったり色々便利
Terraform Cloud 21 Deploy コード管理/コマンド実行 tfstate .tf 確認
Github Actions 22 • Github Actionsを使ってTerraform Workflowを実行 ◦ setup-terraform ▪
Hashicorp社が提供しているAction • https://github.com/hashicorp/setup-terraform • ユーザーが開発している便利なActionも多い ◦ tfaction ▪ https://github.com/suzuki-shunsuke/tfaction ◦ tfmigrate ▪ https://github.com/minamijoyo/tfmigrate
Github Actions 23 Deploy コード管理/コマンド実行 .tf tfstate
Atlantis 24 • Terraform Workflowを実行するOSS ◦ https://www.runatlantis.io/ ▪ インフラはユーザー側で用意
Atlantis 25 Deploy コード管理/コマンド実行 tfstate .tf Webhook
比較 26 Terraform Cloud Github Actions Atlantis 料金 5ユーザーまで無料 それ以降は一人$20/月
(※) Github Actions利用料 AWSインフラ利用料 モノレポでマルチアカウント対応 ディレクトリごとにWorkspaceを作 成するので、設定を変えれる ディレクトリごとに設定変更を変えれ る 機能はないが、terraform内でアカウ ントごとにassume-roleすれば使える IAMキー 必要 (※) 必要 (※) 不要 Github上で操作 PR作成でplan PRマージでapply PR作成でplan PRマージでapply PR作成でplan コメントにコマンド入力でapply インフラ管理 不要 不要 必要 設定のGit管理 ✕ ◯ ◯ 外部公開 (インターネットからのアクセス) 考慮なし 考慮なし GithubからのWebhookを受け付ける 必要があるため公開する必要あり tfstateの保存場所 Terraform Cloud S3(他も可) S3(他も可) ロック機能 あり DynamoDB等で作成が必要 あり (※) 導入検討時
CI/CDツール選定 27 • Atlantisを採用 ◦ IAMキー運用を避けたい ▪ 強い権限を持つIAMキーを外部に置きたくない ▪ 今後、監査とかで問題になるかも
◦ コード以外は自AWS環境に閉じれる • その他落選理由 ◦ Terraform Cloud ▪ 高い、5人以内とか無理 ◦ Github Actions ▪ Githubが旧プランのままだったので、すぐにGithub Actionsが使え なかった
構築したAtlantis 構成 28 Deploy assume role tfstate Deploy tfstate Deploy
tfstate Webhook 111111111111 app1 app2 app3 app4 app5 app6 222222222222 333333333333 main.tf provider "aws" { assume_role { role_arn = "arn:aws:iam::〜" } } AccountID:111111111111 AccountID:222222222222 AccountID:333333333333 • 各アカウントに必要なIAM RoleやS3バケットは、アカウント作成時に StackSetsで自動作成
Atlantisの実行結果 29 • PRを作成するとPlan結果が表示される
Atlantisの実行結果 30 • atlantis applyコメントでApply実施 → マージ → クローズ
導入後のフロー 31 • 管理 ◦ コード(tfファイル)はGithub ◦ tfstateもGithub • フロー
◦ 開発者 ( ≒ ReadOnly権限) ▪ 開発者がコードを作成し、 Readonly権限でplan実施 ▪ GithubにPRを作成し、plan実行結 果をコメントに貼り付け ▪ SREチームにレビュー依頼 ◦ SREチーム ( ≒ Administrator権限) ▪ PRレビュー ▪ ローカル環境でapply ▪ tfstateをPush ▪ PRをマージ • 管理 ◦ コード(tfファイル)はGithub ◦ tfstateは各アカウントのS3 • フロー ◦ 開発者 ( ≒ ReadOnly権限) ▪ 開発者がコードを作成し、PRを 作成すると、自動的にplanが実行 され、Githubのコメントに結果 を表示される ▪ 自チーム内でレビュー ▪ Githubのコメントでapplyを実施 ▪ 自動でPRがマージ、クローズさ れる
導入後のフロー 32 • 管理 ◦ コード(tfファイル)はGithub ◦ tfstateもGithub • フロー
◦ 開発者 ( ≒ ReadOnly権限) ▪ 開発者がコードを作成し、 Readonly権限でplan実施 ▪ GithubにPRを作成し、plan実行結 果をコメントに貼り付け ▪ SREチームにレビュー依頼 ◦ SREチーム ( ≒ Administrator権限) ▪ PRレビュー ▪ ローカル環境でapply ▪ tfstateをPush ▪ PRをマージ • 管理 ◦ コード(tfファイル)はGithub ◦ tfstateは各アカウントのS3 • フロー ◦ 開発者 ( ≒ ReadOnly権限) ▪ 開発者がコードを作成し、PRを 作成すると、自動的にplanが実行 され、Githubのコメントに結果 を表示される ▪ 自チーム内でレビュー ▪ Githubのコメントでapplyを実施 ▪ 自動でPRがマージ、クローズさ れる 開発者のみで完結
IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5
AGENDA アジェンダ 1 6
IAM Keyの問題 34 • 2021/11 Github ActionsでOIDCがサポートされ、IAM Keyが不要に https://docs.github.com/ja/actions/deployment/security-hardeni ng-your-deployments/configuring-openid-connect-in-amazon-web
-services https://aws.amazon.com/jp/blogs/security/u se-iam-roles-to-connect-github-actions-to-a ctions-in-aws/
IAM Keyの問題 35 • 2023/3 Terraform CloudでもOIDCがサポートされ、IAM Keyが不要に https://www.hashicorp.com/blog/terraform-cloud-adds-dynamic-provider-credentials-vault-official-cloud-providers
Terraform Cloudの費用 36 • 2023/5 ユーザー数による料金体系 → リソース数による料金体系に変更 https://www.hashicorp.com/blog/terraform-cloud-updates-plans-with-an-enhanced-free-tier-and-more-flexibility
今選定するなら・・・ (個人の意見) 37 • Github Actionsかな・・・ ◦ IAM RoleでKeyの発行必要なし ◦
プランも変更されている ◦ 費用もそれほどかからない ◦ インフラ運用必要なし ◦ 新サービス(Terraform Cloud)の導入の検討も不要
IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5
AGENDA アジェンダ 1 6
ガードレール1 CODEOWNERSによるレビューの必須化 39 • GithubのCODEOWNERSの機能で、IAM Policyの変更等の 重要な変更については、SREチームやセキュリティーチー ムのレビューを必須にする https://docs.github.com/ja/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners
ガードレール2 Conftestによるポリシーの強制 40 • ポリシーをOpen Policy Agentで作成、Plan結果をConftestでチェックし、ポリ シーに違反している場合はapplyできないようにする ◦ 現在は指定したタグがついているかのチェックを実施している
◦ その他検討中
コストの表示 Infracost 41 • Infracost(https://www.infracost.io/)を組み込み、作成リソースの金額の差分を表示
IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5
AGENDA アジェンダ 1 6
まとめ 43 • IaCのCI/CD環境の必要性 ◦ 複数人で作業や、構成の管理が必要な場合はあった方がよい • ツールと選定の考慮点 • 導入によるフローの変化
• フロー拡張の例
We are Hiring !!! 45 https://hrmos.co/pages/chatwork/jobs/1020019
働くをもっと楽しく、創造的に