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.8k
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
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
3
2.7k
はてなのSRE組織2024 / Road to SRE NEXT@福岡
cohalz
2
1.6k
SREのキャリア、 あるいは生態 / #ya8
cohalz
11
1.6k
カンファレンスのボランティアスタッフって何やるの? / DAIMYO Meetup #4
cohalz
0
140
小さなものでも Step Functions / Serverless Meetup Fukuoka Re:boot
cohalz
0
180
ecspressoへの貢献を振り返る / JAWS-UG コンテナ支部 #24 ecspresso MeetUp
cohalz
1
6.4k
はてなフォトライフをECSに移行した話 / Hatena Engineer Seminar #20
cohalz
1
19k
SREの異動と働き方 〜はてなブログ編〜 / Hatena Engineer Seminar #13
cohalz
0
2.3k
Envoy.なんか / Kyoto.なんか #5
cohalz
1
190
Other Decks in Programming
See All in Programming
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
240
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.4k
ASP.NET Core の OpenAPIサポート
h455h1
0
120
AHC041解説
terryu16
0
380
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
React 19でお手軽にCSS-in-JSを自作する
yukukotani
5
560
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
26
6k
生成AIでGitHubソースコード取得して仕様書を作成
shukob
0
630
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
360
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
390
Stackless и stackful? Корутины и асинхронность в Go
lamodatech
0
1.3k
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
Featured
See All Featured
Facilitating Awesome Meetings
lara
51
6.2k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Gamification - CAS2011
davidbonilla
80
5.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
The Invisible Side of Design
smashingmag
299
50k
The World Runs on Bad Software
bkeepers
PRO
66
11k
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