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