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
2
1.3k
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
組織の変化とSREの役割進化 責務拡大にどう応えるか / globis_sre
taishin
0
87
Lambdaの運用についてのなにか / lambda_unyo
taishin
0
110
おすすめAWSコスト対策 / AWS Startup Meetup Osaka AWS Cost
taishin
1
300
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
1k
ECS Runtime Monitoring で コンテナランタイムセキュリティに入門 / nakanoshima-dev-ecs-runtime-monitoring
taishin
0
170
JAWS-UG-Osaka-guardrail
taishin
0
270
成長を続けるSaaSのAWSコスト管理において 開発者としてできること / AWS DevDay SaaS Cost
taishin
11
2.7k
目指せCoverage100%! AutoScale環境におけるSavings Plans購入戦略 / JAWS-UG_SRE_Coverage
taishin
1
2.1k
SLO策定までの道とChaosEngineeringを使った最適解の見つけ方 / SLO ChaosEngineering
taishin
1
2k
Other Decks in Technology
See All in Technology
AWS re:Invent 2024 re:Cap Taipei (for Developer): New Launches that facilitate Developer Workflow and Continuous Innovation
dwchiang
0
170
今年一年で頑張ること / What I will do my best this year
pauli
1
220
タイミーのデータ活用を支えるdbt Cloud導入とこれから
ttccddtoki
1
150
デジタルアイデンティティ技術 認可・ID連携・認証 応用 / 20250114-OIDF-J-EduWG-TechSWG
oidfj
2
680
JAWS-UG20250116_iOSアプリエンジニアがAWSreInventに行ってきた(真面目編)
totokit4
0
140
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
210
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
2
140
Reactフレームワークプロダクトを モバイルアプリにして、もっと便利に。 ユーザに価値を届けよう。/React Framework with Capacitor
rdlabo
0
130
「隙間家具OSS」に至る道/Fujiwara Tech Conference 2025
fujiwara3
7
6.5k
re:Invent2024 KeynoteのAmazon Q Developer考察
yusukeshimizu
1
150
2025年に挑戦したいこと
molmolken
0
160
シフトライトなテスト活動を適切に行うことで、無理な開発をせず、過剰にテストせず、顧客をビックリさせないプロダクトを作り上げているお話 #RSGT2025 / Shift Right
nihonbuson
3
2.1k
Featured
See All Featured
Become a Pro
speakerdeck
PRO
26
5.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
230
52k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
A designer walks into a library…
pauljervisheath
205
24k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
A better future with KSS
kneath
238
17k
It's Worth the Effort
3n
183
28k
Gamification - CAS2011
davidbonilla
80
5.1k
GraphQLとの向き合い方2022年版
quramy
44
13k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
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
働くをもっと楽しく、創造的に