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
7.4k
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
toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ
cohalz
1
730
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
3
8.1k
はてなのSRE組織2024 / Road to SRE NEXT@福岡
cohalz
2
2k
SREのキャリア、 あるいは生態 / #ya8
cohalz
11
1.8k
カンファレンスのボランティアスタッフって何やるの? / DAIMYO Meetup #4
cohalz
0
180
小さなものでも Step Functions / Serverless Meetup Fukuoka Re:boot
cohalz
0
220
ecspressoへの貢献を振り返る / JAWS-UG コンテナ支部 #24 ecspresso MeetUp
cohalz
1
7.8k
はてなフォトライフをECSに移行した話 / Hatena Engineer Seminar #20
cohalz
1
19k
SREの異動と働き方 〜はてなブログ編〜 / Hatena Engineer Seminar #13
cohalz
0
2.5k
Other Decks in Programming
See All in Programming
Swift Concurrency - 状態監視の罠
objectiveaudio
2
540
(Extension DC 2025) Actor境界を越える技術
teamhimeh
1
260
スマホから Youtube Shortsを見られないようにする
lemolatoon
27
33k
いま中途半端なSwift 6対応をするより、Default ActorやApproachable Concurrencyを有効にしてからでいいんじゃない?
yimajo
2
440
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
420
CSC509 Lecture 06
javiergs
PRO
0
260
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
220
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
170
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
200
スキーマ駆動で、Zod OpenAPI Honoによる、API開発するために、Hono Takibiというライブラリを作っている
nakita628
0
120
品質ワークショップをやってみた
nealle
0
530
AI駆動で0→1をやって見えた光と伸びしろ
passion0102
1
380
Featured
See All Featured
For a Future-Friendly Web
brad_frost
180
10k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
190
55k
GraphQLとの向き合い方2022年版
quramy
49
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
30
2.9k
Designing Experiences People Love
moore
142
24k
Building a Modern Day E-commerce SEO Strategy
aleyda
44
7.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
KATA
mclloyd
PRO
32
15k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
How GitHub (no longer) Works
holman
315
140k
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