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
ECSのCI/CD改善と標準化の取り組み / JAWS FESTA 2023 in Kyushu
Search
cohalz
October 07, 2023
Programming
8
6.2k
ECSのCI/CD改善と標準化の取り組み / JAWS FESTA 2023 in Kyushu
https://jft2023.jaws-ug.jp/
の発表資料です
cohalz
October 07, 2023
Tweet
Share
More Decks by cohalz
See All by cohalz
はてなのSRE組織2024 / Road to SRE NEXT@福岡
cohalz
2
1.5k
SREのキャリア、 あるいは生態 / #ya8
cohalz
11
1.5k
カンファレンスのボランティアスタッフって何やるの? / DAIMYO Meetup #4
cohalz
0
110
小さなものでも Step Functions / Serverless Meetup Fukuoka Re:boot
cohalz
0
140
ecspressoへの貢献を振り返る / JAWS-UG コンテナ支部 #24 ecspresso MeetUp
cohalz
1
5.9k
はてなフォトライフをECSに移行した話 / Hatena Engineer Seminar #20
cohalz
1
18k
SREの異動と働き方 〜はてなブログ編〜 / Hatena Engineer Seminar #13
cohalz
0
2.3k
Envoy.なんか / Kyoto.なんか #5
cohalz
0
160
CDKを用いたモダンなECSクラスタの構築と運用 / AWS Cloud Development Kit -CDK- Meetup
cohalz
6
3.2k
Other Decks in Programming
See All in Programming
受け取る人から提供する人になるということ
little_rubyist
0
230
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
RubyLSPのマルチバイト文字対応
notfounds
0
120
Quine, Polyglot, 良いコード
qnighy
4
640
Remix on Hono on Cloudflare Workers
yusukebe
1
280
ふかぼれ!CSSセレクターモジュール / Fukabore! CSS Selectors Module
petamoriken
0
150
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
610
Macとオーディオ再生 2024/11/02
yusukeito
0
370
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
220
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
OSSで起業してもうすぐ10年 / Open Source Conference 2024 Shimane
furukawayasuto
0
100
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
Practical Orchestrator
shlominoach
186
10k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
A Modern Web Designer's Workflow
chriscoyier
693
190k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Building an army of robots
kneath
302
43k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
860
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Building Adaptive Systems
keathley
38
2.3k
Transcript
ECSのCI/CD改善と 標準化の取り組み id:cohalz / @cohalz JAWS FESTA 2023 in Kyushu
1
自己紹介 • こはる(@cohalz) • 株式会社はてな SRE ◦ はてなブックマーク ◦ はてなブログ
• 福岡移住してもうすぐ1年 ◦ リモート勤務 2
今日話すこと • はてなにおけるCI/CDの改善 ◦ はてなブログを例に • ECSのCI/CDを標準化する取り組み 3
今日話さないこと • ECSに移行する方法の話 ◦ はてなブログをECSに移行してリリース頻度も改善し た話 • EKSの話 ◦ Kubernetes撤退、
その後のはてなの取り組み 4
5 はてなブログ
はてなブログ • 2011 EC2でサービス開始 • 2019~2022 ECSに移行 ◦ 関連サービスを含め10種類程度のコンポーネント 6
ECS移行して起きた問題 • 各サービスをモノレポでCDK管理していた • CDKの設定を書いた人がバラバラ ◦ いろんな人が移行していった ◦ 元々の開発オーナーが違うサービスも •
その結果CI/CDがバラバラに 7
CI/CDがバラバラだと • 認知負荷が高い ◦ n通りのデプロイ方法を正しく覚える必要 ◦ 手作業の手順もあり事故りやすい • 改善の手が周りきらない ◦
一個だけ改善しても残りと差分が広がってしまう 8
CI/CDの見直しを行う • 最後のはてなブログ本体のECS移行のタイミ ングで統一することに • デプロイ・運用しやすいものを目指す 9
10 ECSのCI/CD改善
改善のテーマ • 全サービスを同じ方法でデプロイする • 手元からデプロイしない • 作り込みすぎない 11
何をしたか • CDKではなくecspressoで管理 • デプロイ用のリポジトリを作る • GitHub Actionsでデプロイ • 既存のCDK管理されたものも移行
12
ecspressoの採用 • 既存の設定を簡単にコード管理できる • diffやverifyなど便利なコマンドがある • CI/CDのライフサイクル分離と高相性 13
デプロイ用の リポジトリ • コードともCDKとも違 うリポジトリを作るよ うに • このリポジトリに全 サービスのECS設定を 置く
14
GitHub Actionsを使ったデプロイ • GitHub Actionsでecspresso deployを実行 ◦ mainブランチの更新をトリガーに実行 ◦ GitOpsの考えを採用
• 社内のEKS+ArgoCDのデプロイを真似した ◦ 「はてラボ」のサービスも利用しているEKSクラスタ の構成と運用について 15
イメージのタグを更新するPRが自動で作成される 16
改善の結果 • 全サービスを同一の方法でデプロイ可能に • デプロイ用の環境構築も不要に ◦ デザイナーでもデプロイ可能に • 開発者がメンテしやすくなったメリットも ◦
複雑なCDKの設定と切り離された 17
Tips: CDKからecspressoへ移行する方法 • 方法1: 別のサービス名で作りなおす ◦ ecspresso initしてサービス名を変えて並行稼働 ◦ その後CDKの設定を削除
or 0台にする • 方法2 : サービスを残して移行する ◦ CDK側でDeletionPolicy: Retainを設定 ◦ その後CDKの設定を削除することでリソースを残せる 18
19 標準化
全社の課題 • はてなではプロダクトがたくさんある ◦ ブログ、ブクマ、Mackerel、マンガ、... • 各チームも同様にCI/CDの課題があった ◦ うまくいった例を広めたい ◦
チーム間でも統一化したい 20
社内で標準化の動きが活発に • 社内で標準化のプロセスが整備され始めた ◦ CI/CDもその動きに乗っかりたい • 標準を定めることによって ◦ 注力する技術を絞って集中できる ◦
改善をそこに集約できる 21
22 標準化の進め方
SRE標準化委員会の発足 • 2021/8から各チームのSREsが有志で集まっ たグループ • プロダクトの運用知見やツールを共有し、シ ステム構築・運用の効率化、省力化を目指す 23
委員会メンバーで標準化を進める • CI/CDの標準化をするサブチームを作る ◦ 週次の定例で各チームの改善を共有 ◦ Scrapboxに書いて非同期でコミュニケーションも • 開発合宿も利用 ◦
同期的に集中してツールを作る • 定期的に社内勉強会で成果を周知 24
各チームに ヒアリング • 各チームのテックリー ドにECS周りについて ヒアリング • チームが求めているも のとのミスマッチを減 らす
25
ヒアリングした結果 • 多くのチームはGitHub Actionsを利用 • ECSのデプロイに課題を感じている • ブログで作ったワークフローを改善して再利 用することに 26
GitHub Actionsの再利用 • PublicでないReusable WorkflowやComposite Actionを同一組織で再利用可能に(2022/12) ◦ GitHub Actions –
Sharing actions and reusable workflows from private repositories is now GA • ワークフローを集めたリポジトリを作る形に ◦ 各チームでそのワークフローを利用する 27
リリース用リポジトリの展開 • どんなサービスでもecspressoのファイルと そのCI/CDで中身はほとんど同じ • ワークフローを配るよりももっと楽にしたい • ブログで作ったものをテンプレートリポジト リとして用意 28
リリース用リポジトリのテンプレート • 必要なワークフローなど揃えたテンプレート • Cloneしてecspressoのファイルを置く ◦ 既に構築したCI/CDをすぐ使える 29
標準化されたCI/CDを利用する流れ 30
CI/CDの実装もブラッシュアップ • ブログの実装をMackerelチームで再構築 • それをブックマークチームでさらに改善 • その後標準として広めていく ◦ 2チームで動く実績がある説得力がある 31
行った改善の例 • ビルド待ちの短縮 ◦ イメージにもう一度タグを付ける - Amazon ECR • デプロイ履歴を確認しやすく
◦ GitHubのリリースと連携 ◦ Mackerelにアノテーション • デプロイ順序を制御できるように ◦ AとBを同時や順番にデプロイする 32
標準のアップデートをどう広めるか • 考えられる懸念 ◦ 各チームがアップデートに気付けない ◦ アップデート作業が面倒で放置 • Renovateを使うことで改善 33
Renovateで社内のActionを更新 リリースノートも確認できる 34
標準化を狙うことで得られるメリット • 影響範囲が広がり品質が上がる ◦ 各チームからフィードバックがある ◦ テストコードを書いたり変更管理をしたり • OSSだと思ってメンテするような感じ ◦
将来OSSにしても良い 35
改善の成果 • 採用したチームで現れた効果 ◦ チームによってはデプロイ頻度が2倍に ◦ ワークフローが整理されメンテナンスしやすく • 複数チームで採用が始まる ◦
新卒研修でも使われるように ◦ 採用したチームからフィードバックも 36
37 標準化する上で 気をつけること
標準化する上で気をつけること • 全チームの要望を解決しようとしない ◦ 作るのにも時間が掛かる、メンテナンスも大変 ◦ 汎用的すぎても課題を解決しづらくなる ◦ 利用の強制はしない •
意思決定やアップデートのプロセスを決める ◦ 起きた問題をフィードバックして改善できるように 38
認知度を上げる • 作るだけでなくちゃんと使われるようにする のが大事 • 定期的に存在をアピールする ◦ そもそも他の人が存在を知らないところから始まる • 検証に協力してくれる人を探す
◦ ファンを増やす 39
おわり • はてなにおけるECSのCI/CD改善を紹介しました • CI/CDの標準化に向けた動きとそれをうまく進め るための工夫についても紹介しました 40