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.6k
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
FinOpsとタグ付け防止対策 / CCoE Osaka FinOps Tags
taishin
1
96
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
280
スケールするプロダクトと膨らむ組織 SREの挑戦と解決策 / Findy Job LT SRE
taishin
0
120
組織の変化とSREの役割進化 責務拡大にどう応えるか / globis_sre
taishin
0
220
Lambdaの運用についてのなにか / lambda_unyo
taishin
0
170
おすすめAWSコスト対策 / AWS Startup Meetup Osaka AWS Cost
taishin
1
420
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
1.3k
ECS Runtime Monitoring で コンテナランタイムセキュリティに入門 / nakanoshima-dev-ecs-runtime-monitoring
taishin
0
260
JAWS-UG-Osaka-guardrail
taishin
0
330
Other Decks in Technology
See All in Technology
クラウドセキュリティを支える技術と運用の最前線 / Cutting-edge Technologies and Operations Supporting Cloud Security
yuj1osm
2
260
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
30k
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
2
130
ここ一年のCCoEとしてのAWSコスト最適化を振り返る / CCoE AWS Cost Optimization devio2025
masahirokawahara
1
1.3k
モダンフロントエンド 開発研修
recruitengineers
PRO
10
6.2k
バッチ処理で悩むバックエンドエンジニアに捧げるAWS Glue入門
diggymo
3
100
コスト削減の基本の「キ」~ コスト消費3大リソースへの対策 ~
smt7174
2
320
JavaScript 研修
recruitengineers
PRO
6
1.4k
Flutterでキャッチしないエラーはどこに行く
taiju59
0
210
MCPで変わる Amebaデザインシステム「Spindle」の開発
spindle
PRO
3
2.3k
【初心者向け】ローカルLLMの色々な動かし方まとめ
aratako
6
2.7k
7月のガバクラ利用料が高かったので調べてみた
techniczna
3
820
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Being A Developer After 40
akosma
90
590k
Thoughts on Productivity
jonyablonski
69
4.8k
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Making Projects Easy
brettharned
117
6.4k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Code Review Best Practice
trishagee
70
19k
How STYLIGHT went responsive
nonsquared
100
5.8k
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
働くをもっと楽しく、創造的に