Slide 1

Slide 1 text

       © Chatwork IaCのCI/CDを考えよう 2023年6月3日 SRE部 佐々木真也 Chatwork株式会社 JAWS-UG Okayama 2023

Slide 2

Slide 2 text

自己紹介 2 ● 名前 ○ 佐々木真也 ● 所属 ○ Chatwork株式会社 ■ 2020年6月〜 ■ SRE部 マネージャー ● Twitter ○ @taishin ● 趣味 ○ サッカー観戦

Slide 3

Slide 3 text

会社概要 3 会社名 Chatwork株式会社 代表取締役CEO 山本 正喜 グループ従業員数 379名(2023年3月末日時点) 所在地 東京、大阪 設立 2004年11月11日

Slide 4

Slide 4 text

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株式会社にて選定。

Slide 5

Slide 5 text

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株式会社にて選定

Slide 6

Slide 6 text

IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5 AGENDA アジェンダ 1 6

Slide 7

Slide 7 text

IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5 AGENDA アジェンダ 1 6

Slide 8

Slide 8 text

Infrastructure as Code(IaC)環境にCI/CDがあると・・・ 8 ● レビュー/承認 ● 作業履歴 ● 権限 ● 環境依存

Slide 9

Slide 9 text

CI/CDがないとき 9 Deploy コード管理 コード管理 コード管理 Deploy Deploy

Slide 10

Slide 10 text

CI/CDがないとき 10 Deploy コード管理 コード管理 コード管理 Deploy Deploy ● レビュー/承認 ○ Githubでレビューはできるが、承認がなくてもデプロイ可能 ● 作業履歴 ○ 残らない ● 権限 ○ Deployする人全員に強い権限が必要 ● 環境依存 ○ 作業者環境によるバージョン差異

Slide 11

Slide 11 text

CI/CDがあるとき 11 CI/CD Deploy コード管理/コマンド 実行 コード管理/コマンド コード管理/コマンド

Slide 12

Slide 12 text

CI/CDがあるとき 12 CI/CD Deploy コード管理/コマンド 実行 コード管理/コマンド コード管理/コマンド ● レビュー/承認 ○ GithubのPRでレビュー、Deployは承認を必須にできる ● 作業履歴 ○ GithubのPRを見れば、履歴が分かる ● 権限 ○ CI/CD環境にのみ権限が必要で、作業者には権限が不要 ● 環境依存 ○ 誰が実行しても同じ結果

Slide 13

Slide 13 text

IaC環境にCI/CDは必要? 13 ● 複数人で作業する ○ 一人でやるだけならそれほど必要ないかも ● 構成の管理、変更等の運用が必要 ○ 初期導入だけの目的ならいらないかも

Slide 14

Slide 14 text

IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5 AGENDA アジェンダ 1 6

Slide 15

Slide 15 text

以前のChatworkでは 15 ● ツール ○ Terraformを採用 ● 管理 ○ コード(tfファイル)はGithub ○ tfstateもGithub ● フロー ○ 開発者 ( ≒ ReadOnly権限) ■ 開発者がコードを作成し、Readonly権限でplan実施 ■ GithubでPRを作成し、plan実行結果をGithubのコメントに貼り付け ■ SREチームにレビュー依頼 ○ SREチーム ( ≒ Administrator権限) ■ PRレビュー ■ ローカル環境でapply ■ tfstateをPush ■ PRをマージ

Slide 16

Slide 16 text

以前のChatworkでは 16 ● 課題 ○ 手間 ■ 依頼する側も作業する側も ○ バージョンの差異 ■ 作業時に異なるTerraform、AWS Providerのバージョンで実施 してしまい、なんかおかしなことになる ○ apply後のtfstateのPushし忘れ ■ 次回作業時に?なdiffが出る ■ 慌てて前回のtfstateをプッシュ

Slide 17

Slide 17 text

IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5 AGENDA アジェンダ 1 6

Slide 18

Slide 18 text

CI/CDツール選定 18 ● 考慮点 ○ 料金 ○ モノレポでマルチアカウント対応 ○ IAMキー ○ Github上で操作 ○ インフラ管理 ■ 外部公開(インターネットからのアクセス) ○ tfstateの保存場所 ○ ロック機能

Slide 19

Slide 19 text

CI/CDツール候補 19 ● Terraform Cloud ● Github Actions ● Atlantis 実際はGithub Actions + SelfHosted Runner や PipeCDも検討

Slide 20

Slide 20 text

Terraform Cloud 20 ● Terraformの開発元のHashiCorp社が提供しているマネージ ドサービス ● tfstateの保存と管理 ● Gitサービスと連携し、自動化を提供 ● GUIで設定も簡単 ● tfstateの差分が見れたり、通知機能もあったり色々便利

Slide 21

Slide 21 text

Terraform Cloud 21 Deploy コード管理/コマンド実行 tfstate .tf 確認

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

Github Actions 23 Deploy コード管理/コマンド実行 .tf tfstate

Slide 24

Slide 24 text

Atlantis 24 ● Terraform Workflowを実行するOSS ○ https://www.runatlantis.io/ ■ インフラはユーザー側で用意

Slide 25

Slide 25 text

Atlantis 25 Deploy コード管理/コマンド実行 tfstate .tf Webhook

Slide 26

Slide 26 text

比較 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等で作成が必要 あり (※) 導入検討時

Slide 27

Slide 27 text

CI/CDツール選定 27 ● Atlantisを採用 ○ IAMキー運用を避けたい ■ 強い権限を持つIAMキーを外部に置きたくない ■ 今後、監査とかで問題になるかも ○ コード以外は自AWS環境に閉じれる ● その他落選理由 ○ Terraform Cloud ■ 高い、5人以内とか無理 ○ Github Actions ■ Githubが旧プランのままだったので、すぐにGithub Actionsが使え なかった

Slide 28

Slide 28 text

構築した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で自動作成

Slide 29

Slide 29 text

Atlantisの実行結果 29 ● PRを作成するとPlan結果が表示される

Slide 30

Slide 30 text

Atlantisの実行結果 30 ● atlantis applyコメントでApply実施 → マージ → クローズ

Slide 31

Slide 31 text

導入後のフロー 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がマージ、クローズさ れる

Slide 32

Slide 32 text

導入後のフロー 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がマージ、クローズさ れる 開発者のみで完結

Slide 33

Slide 33 text

IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5 AGENDA アジェンダ 1 6

Slide 34

Slide 34 text

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/

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

Terraform Cloudの費用 36 ● 2023/5 ユーザー数による料金体系 → リソース数による料金体系に変更 https://www.hashicorp.com/blog/terraform-cloud-updates-plans-with-an-enhanced-free-tier-and-more-flexibility

Slide 37

Slide 37 text

今選定するなら・・・ (個人の意見) 37 ● Github Actionsかな・・・ ○ IAM RoleでKeyの発行必要なし ○ プランも変更されている ○ 費用もそれほどかからない ○ インフラ運用必要なし ○ 新サービス(Terraform Cloud)の導入の検討も不要

Slide 38

Slide 38 text

IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5 AGENDA アジェンダ 1 6

Slide 39

Slide 39 text

ガードレール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

Slide 40

Slide 40 text

ガードレール2 Conftestによるポリシーの強制 40 ● ポリシーをOpen Policy Agentで作成、Plan結果をConftestでチェックし、ポリ シーに違反している場合はapplyできないようにする ○ 現在は指定したタグがついているかのチェックを実施している ○ その他検討中

Slide 41

Slide 41 text

コストの表示 Infracost 41 ● Infracost(https://www.infracost.io/)を組み込み、作成リソースの金額の差分を表示

Slide 42

Slide 42 text

IaCにCI/CD環境は必要? ChatworkのIaC環境(2年前) IaCのCI/CD環境の検討と導入した環境 サービスの進化と今ならどうするか? 導入後のCI/CDフローの拡張 まとめ 2 3 4 5 AGENDA アジェンダ 1 6

Slide 43

Slide 43 text

まとめ 43 ● IaCのCI/CD環境の必要性 ○ 複数人で作業や、構成の管理が必要な場合はあった方がよい ● ツールと選定の考慮点 ● 導入によるフローの変化 ● フロー拡張の例

Slide 44

Slide 44 text

We are Hiring !!! 45 https://hrmos.co/pages/chatwork/jobs/1020019

Slide 45

Slide 45 text

働くをもっと楽しく、創造的に