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
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fuj...
Search
cohalz
January 17, 2025
Programming
3
9.2k
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
https://connpass.com/event/338668/
cohalz
January 17, 2025
Tweet
Share
More Decks by cohalz
See All by cohalz
toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ
cohalz
1
800
はてなのSRE組織2024 / Road to SRE NEXT@福岡
cohalz
2
2.1k
SREのキャリア、 あるいは生態 / #ya8
cohalz
11
1.8k
カンファレンスのボランティアスタッフって何やるの? / DAIMYO Meetup #4
cohalz
0
230
小さなものでも Step Functions / Serverless Meetup Fukuoka Re:boot
cohalz
0
250
ECSのCI/CD改善と標準化の取り組み / JAWS FESTA 2023 in Kyushu
cohalz
8
7.5k
ecspressoへの貢献を振り返る / JAWS-UG コンテナ支部 #24 ecspresso MeetUp
cohalz
1
8.2k
はてなフォトライフをECSに移行した話 / Hatena Engineer Seminar #20
cohalz
1
20k
SREの異動と働き方 〜はてなブログ編〜 / Hatena Engineer Seminar #13
cohalz
0
2.5k
Other Decks in Programming
See All in Programming
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
220
Python札幌 LT資料
t3tra
7
1.1k
ゆくKotlin くるRust
exoego
1
190
Vibe codingでおすすめの言語と開発手法
uyuki234
0
160
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
460
愛される翻訳の秘訣
kishikawakatsumi
3
370
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
440
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
210
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
300
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.2k
DevFest Android in Korea 2025 - 개발자 커뮤니티를 통해 얻는 가치
wisemuji
0
180
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.5k
Featured
See All Featured
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
37
Context Engineering - Making Every Token Count
addyosmani
9
580
Raft: Consensus for Rubyists
vanstee
141
7.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
300
A Soul's Torment
seathinner
1
2.1k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
0
220
We Are The Robots
honzajavorek
0
130
Unsuck your backbone
ammeep
671
58k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
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