Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IaCのCI/CDを考えよう / JAWS-UG_Okayama_IaC_CICD

sasaki
June 03, 2023

IaCのCI/CDを考えよう / JAWS-UG_Okayama_IaC_CICD

JAWS-UG Okayama 2023 IaC/のCI/CDを考えよう

sasaki

June 03, 2023
Tweet

More Decks by sasaki

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  34. 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/

    View Slide

  35. 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide