ECSのCI/CD改善と標準化の取り組み / JAWS FESTA 2023 in Kyushu
by
cohalz
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
ECSのCI/CD改善と 標準化の取り組み id:cohalz / @cohalz JAWS FESTA 2023 in Kyushu 1
Slide 2
Slide 2 text
自己紹介 ● こはる(@cohalz) ● 株式会社はてな SRE ○ はてなブックマーク ○ はてなブログ ● 福岡移住してもうすぐ1年 ○ リモート勤務 2
Slide 3
Slide 3 text
今日話すこと ● はてなにおけるCI/CDの改善 ○ はてなブログを例に ● ECSのCI/CDを標準化する取り組み 3
Slide 4
Slide 4 text
今日話さないこと ● ECSに移行する方法の話 ○ はてなブログをECSに移行してリリース頻度も改善し た話 ● EKSの話 ○ Kubernetes撤退、 その後のはてなの取り組み 4
Slide 5
Slide 5 text
5 はてなブログ
Slide 6
Slide 6 text
はてなブログ ● 2011 EC2でサービス開始 ● 2019~2022 ECSに移行 ○ 関連サービスを含め10種類程度のコンポーネント 6
Slide 7
Slide 7 text
ECS移行して起きた問題 ● 各サービスをモノレポでCDK管理していた ● CDKの設定を書いた人がバラバラ ○ いろんな人が移行していった ○ 元々の開発オーナーが違うサービスも ● その結果CI/CDがバラバラに 7
Slide 8
Slide 8 text
CI/CDがバラバラだと ● 認知負荷が高い ○ n通りのデプロイ方法を正しく覚える必要 ○ 手作業の手順もあり事故りやすい ● 改善の手が周りきらない ○ 一個だけ改善しても残りと差分が広がってしまう 8
Slide 9
Slide 9 text
CI/CDの見直しを行う ● 最後のはてなブログ本体のECS移行のタイミ ングで統一することに ● デプロイ・運用しやすいものを目指す 9
Slide 10
Slide 10 text
10 ECSのCI/CD改善
Slide 11
Slide 11 text
改善のテーマ ● 全サービスを同じ方法でデプロイする ● 手元からデプロイしない ● 作り込みすぎない 11
Slide 12
Slide 12 text
何をしたか ● CDKではなくecspressoで管理 ● デプロイ用のリポジトリを作る ● GitHub Actionsでデプロイ ● 既存のCDK管理されたものも移行 12
Slide 13
Slide 13 text
ecspressoの採用 ● 既存の設定を簡単にコード管理できる ● diffやverifyなど便利なコマンドがある ● CI/CDのライフサイクル分離と高相性 13
Slide 14
Slide 14 text
デプロイ用の リポジトリ ● コードともCDKとも違 うリポジトリを作るよ うに ● このリポジトリに全 サービスのECS設定を 置く 14
Slide 15
Slide 15 text
GitHub Actionsを使ったデプロイ ● GitHub Actionsでecspresso deployを実行 ○ mainブランチの更新をトリガーに実行 ○ GitOpsの考えを採用 ● 社内のEKS+ArgoCDのデプロイを真似した ○ 「はてラボ」のサービスも利用しているEKSクラスタ の構成と運用について 15
Slide 16
Slide 16 text
イメージのタグを更新するPRが自動で作成される 16
Slide 17
Slide 17 text
改善の結果 ● 全サービスを同一の方法でデプロイ可能に ● デプロイ用の環境構築も不要に ○ デザイナーでもデプロイ可能に ● 開発者がメンテしやすくなったメリットも ○ 複雑なCDKの設定と切り離された 17
Slide 18
Slide 18 text
Tips: CDKからecspressoへ移行する方法 ● 方法1: 別のサービス名で作りなおす ○ ecspresso initしてサービス名を変えて並行稼働 ○ その後CDKの設定を削除 or 0台にする ● 方法2 : サービスを残して移行する ○ CDK側でDeletionPolicy: Retainを設定 ○ その後CDKの設定を削除することでリソースを残せる 18
Slide 19
Slide 19 text
19 標準化
Slide 20
Slide 20 text
全社の課題 ● はてなではプロダクトがたくさんある ○ ブログ、ブクマ、Mackerel、マンガ、... ● 各チームも同様にCI/CDの課題があった ○ うまくいった例を広めたい ○ チーム間でも統一化したい 20
Slide 21
Slide 21 text
社内で標準化の動きが活発に ● 社内で標準化のプロセスが整備され始めた ○ CI/CDもその動きに乗っかりたい ● 標準を定めることによって ○ 注力する技術を絞って集中できる ○ 改善をそこに集約できる 21
Slide 22
Slide 22 text
22 標準化の進め方
Slide 23
Slide 23 text
SRE標準化委員会の発足 ● 2021/8から各チームのSREsが有志で集まっ たグループ ● プロダクトの運用知見やツールを共有し、シ ステム構築・運用の効率化、省力化を目指す 23
Slide 24
Slide 24 text
委員会メンバーで標準化を進める ● CI/CDの標準化をするサブチームを作る ○ 週次の定例で各チームの改善を共有 ○ Scrapboxに書いて非同期でコミュニケーションも ● 開発合宿も利用 ○ 同期的に集中してツールを作る ● 定期的に社内勉強会で成果を周知 24
Slide 25
Slide 25 text
各チームに ヒアリング ● 各チームのテックリー ドにECS周りについて ヒアリング ● チームが求めているも のとのミスマッチを減 らす 25
Slide 26
Slide 26 text
ヒアリングした結果 ● 多くのチームはGitHub Actionsを利用 ● ECSのデプロイに課題を感じている ● ブログで作ったワークフローを改善して再利 用することに 26
Slide 27
Slide 27 text
GitHub Actionsの再利用 ● PublicでないReusable WorkflowやComposite Actionを同一組織で再利用可能に(2022/12) ○ GitHub Actions – Sharing actions and reusable workflows from private repositories is now GA ● ワークフローを集めたリポジトリを作る形に ○ 各チームでそのワークフローを利用する 27
Slide 28
Slide 28 text
リリース用リポジトリの展開 ● どんなサービスでもecspressoのファイルと そのCI/CDで中身はほとんど同じ ● ワークフローを配るよりももっと楽にしたい ● ブログで作ったものをテンプレートリポジト リとして用意 28
Slide 29
Slide 29 text
リリース用リポジトリのテンプレート ● 必要なワークフローなど揃えたテンプレート ● Cloneしてecspressoのファイルを置く ○ 既に構築したCI/CDをすぐ使える 29
Slide 30
Slide 30 text
標準化されたCI/CDを利用する流れ 30
Slide 31
Slide 31 text
CI/CDの実装もブラッシュアップ ● ブログの実装をMackerelチームで再構築 ● それをブックマークチームでさらに改善 ● その後標準として広めていく ○ 2チームで動く実績がある説得力がある 31
Slide 32
Slide 32 text
行った改善の例 ● ビルド待ちの短縮 ○ イメージにもう一度タグを付ける - Amazon ECR ● デプロイ履歴を確認しやすく ○ GitHubのリリースと連携 ○ Mackerelにアノテーション ● デプロイ順序を制御できるように ○ AとBを同時や順番にデプロイする 32
Slide 33
Slide 33 text
標準のアップデートをどう広めるか ● 考えられる懸念 ○ 各チームがアップデートに気付けない ○ アップデート作業が面倒で放置 ● Renovateを使うことで改善 33
Slide 34
Slide 34 text
Renovateで社内のActionを更新 リリースノートも確認できる 34
Slide 35
Slide 35 text
標準化を狙うことで得られるメリット ● 影響範囲が広がり品質が上がる ○ 各チームからフィードバックがある ○ テストコードを書いたり変更管理をしたり ● OSSだと思ってメンテするような感じ ○ 将来OSSにしても良い 35
Slide 36
Slide 36 text
改善の成果 ● 採用したチームで現れた効果 ○ チームによってはデプロイ頻度が2倍に ○ ワークフローが整理されメンテナンスしやすく ● 複数チームで採用が始まる ○ 新卒研修でも使われるように ○ 採用したチームからフィードバックも 36
Slide 37
Slide 37 text
37 標準化する上で 気をつけること
Slide 38
Slide 38 text
標準化する上で気をつけること ● 全チームの要望を解決しようとしない ○ 作るのにも時間が掛かる、メンテナンスも大変 ○ 汎用的すぎても課題を解決しづらくなる ○ 利用の強制はしない ● 意思決定やアップデートのプロセスを決める ○ 起きた問題をフィードバックして改善できるように 38
Slide 39
Slide 39 text
認知度を上げる ● 作るだけでなくちゃんと使われるようにする のが大事 ● 定期的に存在をアピールする ○ そもそも他の人が存在を知らないところから始まる ● 検証に協力してくれる人を探す ○ ファンを増やす 39
Slide 40
Slide 40 text
おわり ● はてなにおけるECSのCI/CD改善を紹介しました ● CI/CDの標準化に向けた動きとそれをうまく進め るための工夫についても紹介しました 40