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.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
Lambdaの運用についてのなにか / lambda_unyo
taishin
0
71
おすすめAWSコスト対策 / AWS Startup Meetup Osaka AWS Cost
taishin
1
260
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
930
ECS Runtime Monitoring で コンテナランタイムセキュリティに入門 / nakanoshima-dev-ecs-runtime-monitoring
taishin
0
140
JAWS-UG-Osaka-guardrail
taishin
0
240
成長を続けるSaaSのAWSコスト管理において 開発者としてできること / AWS DevDay SaaS Cost
taishin
11
2.6k
目指せ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
7.1k
Other Decks in Technology
See All in Technology
CAMERA-Suite: 広告文生成のための評価スイート / ai-camera-suite
cyberagentdevelopers
PRO
3
240
CyberAgent 生成AI Deep Dive with Amazon Web Services / genai-aws
cyberagentdevelopers
PRO
1
400
新卒1年目が向き合う生成AI事業の開発を加速させる技術選定 / ai-web-launcher
cyberagentdevelopers
PRO
3
1.2k
サイロ化した金融システムを、packwerk を利用して無事故でリファクタリングした話
coincheck_recruit
3
3.4k
年10万で社内Webアプリを10個動かす チャレンジをしている話 / The story of the challenge to run 10 in-house web apps for 100kJPY a year.
yamaguchitk333
0
110
急成長中のWINTICKETにおける品質と開発スピードと向き合ったQA戦略と今後の展望 / winticket-autify
cyberagentdevelopers
PRO
1
150
端末が簡単にリモートから操作されるデモを通じて ソフトウェアサプライチェーン攻撃対策の重要性を理解しよう
kitaji0306
0
160
Comparing Apache Flink and Spark for Modern Stream Data Processing
sharonx
0
190
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
17
2.9k
LLMアプリをRagasで評価して、Langfuseで可視化しよう!
minorun365
PRO
2
260
カメラを用いた店内計測におけるオプトインの仕組みの実現 / ai-optin-camera
cyberagentdevelopers
PRO
0
100
TinyMLの技術動向
kyotomon
2
270
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
Adopting Sorbet at Scale
ufuk
73
9k
StorybookのUI Testing Handbookを読んだ
zakiyama
26
5.2k
Scaling GitHub
holman
458
140k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Faster Mobile Websites
deanohume
304
30k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
41
9.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
13
1.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
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
働くをもっと楽しく、創造的に