Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fuj...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
cohalz
January 17, 2025
Programming
13k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
https://connpass.com/event/338668/
cohalz
January 17, 2025
More Decks by cohalz
See All by cohalz
toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ
cohalz
1
1k
はてなのSRE組織2024 / Road to SRE NEXT@福岡
cohalz
2
2.5k
SREのキャリア、 あるいは生態 / #ya8
cohalz
11
1.9k
カンファレンスのボランティアスタッフって何やるの? / DAIMYO Meetup #4
cohalz
0
290
小さなものでも Step Functions / Serverless Meetup Fukuoka Re:boot
cohalz
0
310
ECSのCI/CD改善と標準化の取り組み / JAWS FESTA 2023 in Kyushu
cohalz
8
7.9k
ecspressoへの貢献を振り返る / JAWS-UG コンテナ支部 #24 ecspresso MeetUp
cohalz
1
10k
はてなフォトライフをECSに移行した話 / Hatena Engineer Seminar #20
cohalz
1
20k
SREの異動と働き方 〜はてなブログ編〜 / Hatena Engineer Seminar #13
cohalz
0
2.6k
Other Decks in Programming
See All in Programming
Jetpack Compose Mechanisms
skydoves
3
900
AIで開発が速くなった先で、開発チームは何を目指すか
shihochan
1
1.9k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.6k
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
240
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.2k
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2k
気持ちぃ〜角丸 Squircle
ryu1013
0
370
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
200
最近”作らせてる” ローカルAIアプリの話
akit37
0
510
sbt 2.0: takeoff
eed3si9n
0
180
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.6k
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
250
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
We Are The Robots
honzajavorek
0
410
Code Review Best Practice
trishagee
74
20k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
600
A better future with KSS
kneath
240
18k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
510
Facilitating Awesome Meetings
lara
57
7.2k
Unsuck your backbone
ammeep
672
58k
How to Think Like a Performance Engineer
csswizardry
28
2.9k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Transcript
はてなにおける fujiwara-wareの活用や ecspressoのCI/CD構成 id:cohalz / @cohalz 2025/1/17 Fujiwara Tech Conference
2025 1
自己紹介 • こはる(@cohalz) • 株式会社はてな SRE • 趣味でfujiwara-wareに コントリビュート 2
今日話すこと • 社内で利用しているfujiwara-wareの紹介 • ecspressoのCI/CD構成 3
4 fujiwara-wareの活用
色々使ってます • 扱ってる技術が近いのもあり日々便利に 使ってます ◦ ECSやAWS全般、Mackerel ◦ PerlやGo 5
ecspresso / lambroll • ほぼ全てでecspressoを採用 ◦ リリース手順が違うなどはある • lambrollは一部利用 ◦
あまり更新のないものはCDKのままにすることも 6
maprobe • Mackerelのメトリックをいい感じに取ったり 集計したりするツール ◦ AWSのマネージドサービスにプラグイン実行したり ◦ ホストメトリックを集計してサービスメトリックにしたり • 最近はOTel形式に変換する機能なども
7
Redis::Setlock • Redisで排他制御をするためのPerlモジュール ◦ Redisを使って排他制御するwrapperコマンド Redis-Setlock をPerlとGoで書いた - 酒日記 はてな
支店 • EventBridge経由のバッチで利用 ◦ at-least-onceの多重実行を防ぐ 8
AWS::XRay • PerlでX-Rayにトレースを送るモジュール ◦ 当然公式にX-RayのSDKはないため ◦ Perlでも分散トレーシングしたい!AWS::XRay によ る解析とその実装 /
YAPC::Tokyo 2019 - Speaker Deck 9
fujiwara-wareではないが... • カヤック社のOSSも利用し始めています ◦ mirage-ecs ◦ shimesaba ◦ prepalert •
カヤック発OSSカタログ - KAYAC Engineers' Blog 10
どうやって探してる? • ブログやGitHubから他のものをざっと見る ◦ 好みのOSSを作ってるなら他も似た課題を持ってるはず • 個人や会社の他のOSSもdigって見ると良いかも 11
12 ecspressoを よりよく使う
ecspressoを本番運用するにあたって • イメージの更新どうやる? • 設定ファイル共通化したい! • どこからデプロイする? • レビューやリリースのプロセスは? 13
イメージの更新どうやる? • イメージの確認・更新が悩ましい ◦ タスク定義は巨大になりがちで見にくい ◦ コンテナ定義内のimage差し替えも割と面倒 14
改善策 • デプロイ時に環境変数などで渡す • 別のファイルから読み込む • jsonnetでやる方法の紹介 15
16 jsonnetの工夫
::を使うと隠しフィールドに { params:: { env: '', }, name: $.params.env, }
// => { "name": "" } 17
ファイルの読み込みと更新 import 'base-task-def.libsonnet' { params+: { env: 'production', }, cpu:
'2048', } // => { "name": "production", "cpu": "2048" } 18
実際に使ってる機能は? • コメント、値の上書き、ファイル分割程度 ◦ 各環境の共通部分を分離 • 複雑なことをしすぎない方がわかりやすい ◦ 関数、if、ループなども避ける 19
20 事故を防ぐ工夫
よくある(?)事故 • デプロイするバージョンを間違える! • デプロイするサービスを間違える!! • ECRのイメージが消えてタスクが立たない!!! 21
デプロイを間違える対策案 • 手元からデプロイしない(大事!!) • デプロイするバージョンやサービスを レビューできる 22
ECRのイメージが消える対策案 • いい感じのライフサイクルポリシーを決める ◦ 本番用は個数、それ以外は日数がおすすめ • デプロイ不可な状態に早めに気付く仕組み ◦ 防ぐことはできないがリスクは緩和 23
それを踏まえてCI/CDはどうするか • SSOTで宣言的な構成にしたい • 自動化したい • 複数のサービスを同じ方法で扱いたい ◦ 一つ一つ設定していくのは手間 ◦
はてなだとチームで見るECSサービスも多い 24
25 ecspressoのCI/CDを 作っていく
CI/CDの構成を考える • 社内にEKS+ArgoCDのCI/CDが既にあった • これを元に手作り ◦ GitOpsぽい形に 26
デプロイ用の リポジトリを作る • コードともCDKとも違 うリポジトリを作るよ うに • このリポジトリに全 サービスのECS設定を 置く
27
アプリリポジトリの方からJSONを送って更新 28
PRが作られると • 変更されたファイルからデプロイ対象を特定 ◦ どのサービスがデプロイされるのかの確認もできる • そのECSサービスのみverifyとdiffを実行 ◦ チェックが通らないとデプロイできない 29
デプロイされる対象のみチェックする 30
mainにマージすると • GitHub Actionsでecspresso deployを実行 ◦ CIでテストしたサービスのみが自動でデプロイ • ロールバックしたい時はrevertするだけ ◦
リポジトリとECSの状態は常に同じ 31
複数サービスも同じリポジトリに • チームでメンテする全てのサービスを集約 ◦ これによりチーム内では1つのデプロイ方法だけ覚えれば 良くなる 32
さらに利用を広げたい • 別チームでも同じ構成を使えるようにしたい • 新規サービスを追加しやすくしたい 33
リリース用リポジトリのテンプレート • 必要なワークフローなど揃えたテンプレート • Cloneしてecspressoのファイルを置く ◦ 既に構築したCI/CDをすぐ使える 34
ファイル分割ツールも用意 • 既存のECSのサービスをこの構成の ecspressoファイルを書き出してくれる ◦ 分割だけでなく環境変数のパラメータ化なども 35
Actionの再利用 • 社内向けComposite Action / Reusable Workflowにする ◦ 各チームはそれを利用する形 ◦
アップデートはRenovateで拾う 36
Renovateで社内のActionを更新 リリースノートも確認できる 37
38 リリースのフロー
普段の開発のフロー • PRをmainから作ってマージする ◦ GitHub Flowに近いスタイル • リリース手順が書かれたissueが作られる ◦ stagingが更新されてるので確認
39
リリース手順が書かれたissueが作られる 内容と手順を確認してclose 40
Issueを閉じるとリリース • タグが打たれリリースリポジトリに通知 ◦ それをマージすればデプロイ完了 ◦ ECRにエイリアスタグを作るだけでビルド待ちもなし • 問題があった時は ◦
アプリ/リリースどちらかのリポジトリで戻す 41
42 GitHub Actionsで 実行しているもの紹介
ECRイメージの存在確認 • 定期的に全サービスにverifyを実行 ◦ 失敗したものをSlackへ通知 • initしてverifyならecspresso管理してなくて も検証できる 43
デプロイ設定のファイルを用意 • デプロイ時に動作をカスタマイズしたい ◦ 別のECSサービスも同時/順番にデプロイしたい ◦ Mackerelにアノテーションしたい • 別途JSONファイルを独自に利用して実現 •
ActionsがそのJSONの値を見て処理する ◦ デフォルトでjqが同梱されてるので扱いやすい 44
ステージング環境を夜間休日落とす • 開発しない時間に止める ◦ 落とす対象を決めてスケジュール実行 • 落とす時はscale —tasks=0 • 戻す時はdeployし直すだけ
45
リリースの履歴を残す • GitHubのリリースにも変更一覧を出す ◦ github-scriptでgithub.rest.repos.createRelease ◦ generate_release_notes: trueするだけ • タイミングをMackerelにアノテーション
◦ cohalz/post-mackerel-annotation 46
ecspressoのバージョン固定&更新 • asdfやGitHub Actionsでecspressoのバージョ ンを固定しRenovateで更新する - Re:cohalz 47
48 色々やってきた結果
現状 • 社内で多くのサービスがこの構成になった ◦ チームメンバーが異動してもすぐ構成を理解できる • 事故も少なく平和に過ごせている 49
課題もある • どうしても手作りが多くて複雑 ◦ 単一のECSサービスの利用には大袈裟 ◦ 使うだけならいいが中身を理解しようとすると大変 • Lambdaのデプロイどうするか ◦
ecspressoのリポジトリと同居する? 50
おわり • fujiwara-wareやecspressoの活用事例を紹介し ました • こうしてるよとかの話を聞きたい! 51