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
隙間家具職人が考えること/ecspresso meetup
Search
FUJIWARA Shunichiro
August 08, 2023
Technology
7.3k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
隙間家具職人が考えること/ecspresso meetup
JAWS-UG コンテナ支部 #24 ecspresso MeetUp
https://jawsug-container.connpass.com/event/285124/
FUJIWARA Shunichiro
August 08, 2023
More Decks by FUJIWARA Shunichiro
See All by FUJIWARA Shunichiro
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
530
クラウドを使う側から、作る側へ / 大吉祥寺.pm 2026前夜祭
fujiwara3
8
2.2k
作るべきものと向き合う - ecspresso 8年間の開発史から学ぶ技術選定 / 技術選定con findy 2026
fujiwara3
9
6.1k
さくらのクラウドでのシークレット管理を考える/tamachi.sre#2
fujiwara3
2
400
Amazon ECS デプロイツール ecspresso の開発を支える「正しい抽象化」の探求 / YAPC::Fukuoka 2025
fujiwara3
13
14k
パフォーマンスチューニングのために普段からできること/Performance Tuning: Daily Practices
fujiwara3
9
6.9k
alecthomas/kong はいいぞ
fujiwara3
7
2.6k
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
12
3.8k
さくらのIaaS基盤のモニタリングとOpenTelemetry/OSC Hokkaido 2025
fujiwara3
4
5.6k
Other Decks in Technology
See All in Technology
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
430
beyond jj: config & tools ecosystem
indirect
0
5.6k
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
1
3k
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
0
280
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
250
時うどん〜Socket.getifaddrsで学ぶネットワーク編 / Tokiudon: The Socket.getifaddrs Edition
coe401_
3
200
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
5
540
2026_devsumi_ozono.pdf
o3
3
540
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
160
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
3
1.8k
Deployment の 先にある AI Agent 基盤 - kagent vNext、Agent Substrate、Hermes から読み解く Agent Runtime の現在地 / k8s-matsuri-2-ai-agent-platform-amsy810
masayaaoyama
4
680
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
200
Featured
See All Featured
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
600
How to Ace a Technical Interview
jacobian
281
24k
4 Signs Your Business is Dying
shpigford
187
23k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
Six Lessons from altMBA
skipperchong
29
4.5k
Marketing to machines
jonoalderson
1
5.8k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
700
Making the Leap to Tech Lead
cromwellryan
135
10k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Making Projects Easy
brettharned
120
6.8k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Transcript
隙間家具職人が考えること 2023.08.08 ecspresso MeetUp @fujiwara 藤原俊一郎
@fujiwara (Twitter, GitHub, Bluesky) 面白法人カヤック SREチーム ISUCON 優勝4回 ISUCON 運営(出題)4回
代表作 github.com/kayac/ecspresso Amazon ECS デプロイツール
謝辞 ecspressoをはじめ拙作のOSSをご利用の皆様 ecspresso handbookをご購入の皆様 GitHub Sponsorsの皆様 meetupを企画、運営してくださったJAWS-UGコンテナ支部の皆様 いつも本当にありがとうございます!
今日の話 ecspressoの話は(あまり)しません つ AWS Dev Day 2023 Tokyoの発表 ("ecspresso 5年"で検索)
隙間家具OSSについて 名前について 設定について 作って使ってメンテする
隙間家具OSS
隙間家具OSS 初出 吉祥寺.pm 16 (2018.11) AWS Dev Day 2019でも発表 ("隙間家具
speakerdeck"で検索)
隙間家具OSSとは マネージドサービス、コンポーネントの隙間を埋めて便利にするもの マネージドサービスが時間とともに成長して不要になったら取り外す(ことも念頭に)
隙間家具とGlue Glue = 糊 複数のコンポーネントの間をつなぐもの 隙間家具 = 隙間に入れて便利になるもの 似ているけどちょっと違う? Glue
= 形がない、柔軟、オーダーメイド、個別に書くコード 隙間家具 = 形がある、そこまで柔軟ではない、レディメイド、単体ソフトウェア
クラウドのサービスと単体ソフトウェア(ミドルウェア)の進化 クラウドのマネージドサービスはより周辺と繋がる方向に進化しがち
【例】 MySQLとAmazon RDS for MySQL たとえばログの取り扱い MySQLのログ = ファイル(またはテーブル)に書き出す RDSのログ
= (最初期) MySQLのログファイルを取り出すAPI → (今) CloudWatch Logsに送れる MySQL = RDBMSそのものの進化 機能が増える、SQLで使える構文が増える、パフォーマンスが上がる RDS = 運用を簡単にする、関連コンポーネントの連携を含めて進化 フェイルオーバー、バックアップ/リストア、ログ
クラウドのコンポーネントの進化 需要があるものは実装される(ないものはされないけど…) 進化する → 隙間が減る 隙間を密に繋いでしまうと取り外しに難儀する 取り外しできるパーツを入れておいて、必要なくなったら取り外す
Glueではなく隙間家具(単体のソフトウェア)にする理由 Glueなコードはプロジェクト固有の事情に密結合しがち あるプロジェクトのリポジトリの中に置かれる コードの責任分界点が曖昧 他のプロジェクトにコピペ(fork)されがち → 固有の事情(コピペ先の事情)によって改変されてだんだん別物に あるプロジェクトで行われたバグ修正が行き渡らない
【例】 APNs Push通知送信サーバー カヤックでの昔話 APNs(Apple Push Notification Service)への送信は独自TCPプロトコル (いまはHTTP/2)、都度接続ではなく接続永続化が必要 削除されたデバイストークンに送るとエラーになって切断される
送信中の別通知が巻き添えを食ったりする。リトライが必要 Perl/PHPなどのPreforkなWebアプリケーションから直接送信するのが難しかった → PerlのAnyEvent::APNSで実装された独自サーバーから送信していた
【例】 APNs Push通知送信サーバー カヤックでの昔話 PerlのAnyEvent::APNSで実装された独自サーバーを 単体のソフトウェアにせず、社内の各プロジェクトにコピペして使っていた 各プロジェクトに依存するコードが埋め込まれて微妙に別物に デバイストークンの消し込みをDBに直接アクセスするとか → あるプロジェクトで直したbug
fixがそのまま適用できない 運用がつらい
APNsのHTTP/2化を契機に単体OSSを作成 kayac/Gunfish APNs/FCMにpush通知を送るサーバー Go製 OSS 独立したアプリケーションとして実装 プロジェクト個別カスタマイズはしない(できない) エラーになったデバイストークンの消し込みは外部コマンドを起動 コマンドの標準入力にJSONを流し込むインタフェース
単体ソフトウェア/ライブラリとしてOSSにする 各プロジェクトに依存するコードは入らない(入れられない) 一般的なユースケースに対応できるようにインタフェースが整理される プロジェクト固有の事情と一般的な事情を分離して設計と実装をするようになる bugfixはバージョンアップで適用できる ノウハウも統一できる 複数プロジェクトの運用が楽になる
ところで ecspresso は【隙間家具】なのか ecspresso = Amazon ECSデプロイツール 最初は ecspresso →
ECS という一方的な関係 Terraform tfstate、CloudFormation Output、SSM Parameter参照が追加された現在は… [(大きい)IaCツール] ⇔ ecspresso ⇔ [Amazon ECS] Terraform, CFn, CDKで小回りがきかない部分(=ECSへのデプロイ)を埋めるツールに? 【最近観測した例】 CDKでタスク定義を管理 CI/CDで ecspresso init → jq で生成ファイルの image だけ書き換え → ecspresso deploy 完全に当初の想定外、だけど隙間家具としてはありかなあ…
名前のはなし
作る前に名前を考える 最初に名前を考える ないと書き始められない (package名とかになるので) よい名前を付けるのは難しい、けど大事 よいソフトウェアの名前の条件 名が体を表している (隙間家具の場合) 関連するコンポーネントが連想しやすい 覚えやすい、typeしやすい、短い
既存のソフトウェアと被らない
名前の考えかた だいたい連想ゲーム ソフトウェアの責務から考えたり deployツール → deployの関連語 英語の場合シソーラスを使うと便利 thesaurus.com
命名の具体例(1) stretcher デプロイツール fujiwara/stretcher Pull型deploy(S3からtar.gzを取得して展開、みたいなの)を実現するもの stretch → 引っ張る、伸ばす(tar.gzを展開するから) stretcher →
担架(で運ぶ) 担架 → tar.gzを運んでくるという意味でもありでは? 覚えやすい、呼びやすい、タイプしやすい、短い
命名の具体例(2) lambroll Lambdaデプロイツール fujiwara/lambroll Lambdaを入れたら分かりやすい? Lamb(子羊)に何かくっつける? deploy → roll out
lamb+roll → lambroll "lamb roll"で画像検索してみたら… (美味しそう)
命名で気を付けること 名前かぶり GitHubで検索してみる 完全に被らないのはまず無理だけど有名な(スターが多い)やつと被ってないか 文化圏が遠そう、あんまり著名じゃなさそうならある程度被るのは許容する 変な意味がないか(特に外国語で) Googleで(画像)検索してみる 画像のほうがぱっと見で変なものが出ないか分かりやすい
そのまんまの名前を付けることも kinesis-tailf Kinesis Data Streamsを tail -f のように追尾して表示するもの tfstate-lookup Terraform
tfstateの要素を参照するCLI/ライブラリ これはこれで分かりやすいのでよい ライブラリはこのほうが他の人に探されやすいかも?
ちなみに ecspresso は ECSをもじった名前 espressoはいっぱいある ecspresso はなかった 連想しやすい、覚えやすい 呼びやすい、タイプしやすい 短い、被るものがない
設定について
設定項目、設定ファイル 理想 = ゼロコンフィグ なにもしないで思った通りに動いてほしい(無理) なんらかの値を渡す必要はある
設定ファイル vs Flag vs Env コマンドライン引数だけで済むのか、設定ファイルがいるのか 設定項目が単純、少数ならflagかenvでよい 設定項目が多数、複雑、階層が必要ならファイルでないと厳しい ある値を設定したい場合 設定ファイルの値
CLI flagの値 環境変数の値 どれをどう受け入れてどういう順序に優先するか 場当たり的に実装するとぐちゃぐちゃになりがち
設定の指針 設定ファイル: 実行時に(ほぼ)変更したくならない値 Flag, Env: 実行時に環境によって決まる可能性が高い値や上書きする値 ごく小規模なうちは問題になりくい 規模/ユースケースが増えると混乱しがち 将来「この設定ファイルの値を上書きするflagを1個足してほしい」 という一見シンプルなissueで苦しむことになる……(かもしれない)
設定ファイルのフォーマット JSON, YAML, TOML, HCL, DSL, 独自記法……いろいろある 作者の好みでもいいけど "PlainなJSON" も扱えるとよいのでは
各種CLIやプログラミング言語からの生成、加工( jq でも)に一番便利なのがJSON (ただし人間が書くには辛い) YAML, Jsonnet, CUE langなどで管理 → JSONに変換して使う この経路があると周辺で工夫しやすい、活用範囲が広くなる 設定ファイルも外界とのインターフェースの一部
設定ファイルは必要悪 なにも書かないでいい感じに動いてほしい(理想) → デフォルトがいい感じ、変えたいところだけ変えればいい(落とし所) 0からファイルを書くのは(作者でも)面倒 設定させる項目が多すぎるとつらい 面倒なツールは使い始める気が起きない 自動生成を検討する 特に隙間家具の場合、なんらかの関連コンポーネントが既にある そこを参照していいかんじの設定ファイルを自動生成できると
使い始めるハードルがものすごく下がる
ecspresso init ecspresso init --cluster ESC クラスタ名 --service ECS サービス名
指定したクラスタのサービスを参照して設定ファイルを自動生成する ecspresso.yml ecs-service-def.json ecs-task-def.json 生成しただけの状態で ecspresso deploy は完全に動作する (何も挙動は変わらないでデプロイされる) 変えたいところだけ変えてみる、テンプレート化してみる → ecspresso deploy で変更が反映される これがなかったころ(2019年11月以前)に使ってくれていた人はすごい、感謝
作って使ってメンテしていくこと
作って使ってメンテしていくこと 「コードはできるだけ書かない方がよい」 それはそう。書いたものは資産にも負債にもなる 「できるだけ既存のツールの組み合わせでなんとかしたい」 それでよい運用ができるならもちろんOK 「このツールだけで全部完結させたい」 (趣味なら好きにすればいいけど仕事では)ひとつのツールに拘りすぎないほうがよい 適切な道具を適切に使う、必要なら道具も自分で作るのがプロフェッショナル
https://speakerdeck.com/twada/quality-and-speed-aws-dev-day-2023-tokyo-edition
自分で設計したシステムをメンテする経験 システムをシンプルに作ってシンプルに保つ力は経験で得るしかない 大きなシステム、ビジネスのメインプロジェクトで経験を積むのは難しい 隙間家具なら… 小さいのでいくつも作れる (練習になる) なくても何とかなるけどあると便利 (失敗したら使わなければよい) 成功してもいつか取り外すことも念頭に作る (そのための設計を考える)
使い始めたらメンテはしていく (要望の取捨選択も含めて) コードはできれば書かない方がいい でも、鍛えておかないといざという時にうまく書けない
Any Questions? 今日の話について、ecspresso自体の話、なんでもどうぞ!