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
Serverless FrameworkでAWSフルマネージドなツールをいくつか作って得たアー...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ken’ichiro Oyama
July 21, 2017
Technology
4
9.3k
Serverless FrameworkでAWSフルマネージドなツールをいくつか作って得たアーキテクチャ設計の知見 / Serverless at Geeks Who Drink
Geeks Who Drink - Webの先進技術3連発Edition -
Ken’ichiro Oyama
July 21, 2017
Tweet
Share
More Decks by Ken’ichiro Oyama
See All by Ken’ichiro Oyama
Introducing RFC9111 / YAPC::Fukuoka 2025
k1low
2
2.4k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
570
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
530
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
120
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
11
6k
Parsing HCL/CUE / Fukuoka.go #21
k1low
0
10k
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
390
Cleanup handling in Go / Go Conference 2024
k1low
7
4k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
18
12k
Other Decks in Technology
See All in Technology
CodeRabbit CLI + Claude Codeの連携について
oikon48
1
650
ゼロから始めたFindy初のモバイルアプリ開発
grandbig
2
120
一番人に近いコードレビューア CodeRabbit
kinopeee
0
110
Riverpod3.xで実現する実践的UI実装
fumiyasac0921
2
340
SOC2は、取った瞬間よりその後が面白い
3flower
1
200
BPaaSオペレーション・kubell社内 n8n活用による効率化検証事例紹介
kubell_hr
0
270
これまでのネットワーク運用を変えるかもしれないアプデをおさらい
hatahata021
4
280
新規事業における「一部だけどコア」な AI精度改善の優先順位づけ
zerebom
0
260
エンジニアとマネジメントの距離/Engineering and Management
ikuodanaka
3
630
【Oracle Cloud ウェビナー】ランサムウェアが突く「侵入の隙」とバックアップの「死角」 ~ 過去の教訓に学ぶ — 侵入前提の防御とデータ保護 ~
oracle4engineer
PRO
2
220
AIとともに歩む情報セキュリティ / Information Security with AI
kanny
4
2k
BiDiってなんだ?
tomorrowkey
2
490
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
106
230k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
150
Measuring & Analyzing Core Web Vitals
bluesmoon
9
740
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.9k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.8k
BBQ
matthewcrist
89
10k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
370
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
910
Embracing the Ebb and Flow
colly
88
5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Transcript
Serverless Frameworkで AWSフルマネージドなツールをいくつか作って得た アーキテクチャ設計の知⾒ Kenʼichiro Oyama Fusic Co.,Ltd. 2017.7.21 1
Geeks Who Drink
Who 2 Geeks Who Drink
k1LoW Kenʼichiro Oyama @k1LoW Fusic Co.,Ltd. エンジニア
基盤ユニット テックリード GitHub organizations fukuokarb / faultline / emacs-jp / etc. awspecというAWS⽤のテストツールを作っています https://github.com/k1LoW/awspec 3 Geeks Who Drink
スミマセン。 AWSを知っている前提でお話します。 4 Geeks Who Drink
5 Geeks Who Drink
Serverless Framework サーバレスアーキテクチャでアプリケーションを構築する ためのフレームワーク FaaS (Function as a
Service。AWSだとAWS Lambda) を中⼼においた開発をサポートするツール AWSだけでなく他のクラウドベンダが提供しているFaaS にも対応 (Azure Functionsなど) Node製 だからといってランタイムがNodeに限定されているわけではない Serverless,Inc.が主導して開発しているオープンソース 6 Geeks Who Drink
Serverless Frameworkとは結局何か デプロイツール(+オーケストレーションツール) プログラマブルCFn いろいろ便利な機能があるし、名前からも「フルスタッ クな何か」に⾒えなくもないが、意外に薄い
途中で利⽤をやめることも可能 デプロイツールなので 全く難しくないです 個⼈的にはフロントエンドエンジニアに武器にして欲しい 7 Geeks Who Drink
AWSマネージド AWSには⾃分で運⽤管理しないといけないサービスと AWSが運⽤管理をある程度肩代わりしてくれるサービス がある 本セッションでは、AWSが運⽤管理をしてくれるサービ スの特徴を「AWSマネージド」と呼ぶ AWS
Managed Servicesというサービスのことではない AWSマネージドなサービスのみで(AWSフルマネージド で)ツールを作ると運⽤管理の負荷が劇的に下がる 「サーバ(というよりもサーバ運⽤管理)」の部分が「レス」になる 8 Geeks Who Drink
実際にServerless Frameworkでどのような ツールが作れるのか 9 Geeks Who Drink
backslack 10 Geeks Who Drink
backslack Backlogの操作をSlackに通知するツール https://github.com/k1LoW/backslack 11 Geeks Who Drink
backslack アーキテクチャ 12 Geeks Who Drink
faultline 13 Geeks Who Drink
faultline エラートラッキングツール 同様のSaaSだとAirbrake, Bugsnag, Rollbarなど https://github.com/faultline/faultline 14
Geeks Who Drink
faultline アーキテクチャ 15 Geeks Who Drink
utsusemi 16 Geeks Who Drink
utsusemi APIで“動的な更新”が可能な“静的サイト”⽣成ツール https://github.com/k1LoW/utsusemi 17 Geeks Who Drink
utsusemi アーキテクチャ 18 Geeks Who Drink
hubedit 19 Geeks Who Drink
hubedit https://hubedit.com GitHubのプライベートリポジトリをメモツールにするサ ービス GitHubを使っているので正確にはAWSフルマネージドではない 20 Geeks
Who Drink
hubedit アーキテクチャ 21 Geeks Who Drink
他にもちょこちょこ作っています 22 Geeks Who Drink
Serverless Frameworkチョットデキル Serverless FrameworkでAWSフルマネージドなツール をいくつか作ってきた プロダクションベースの事例はよく聞くが、OSSなツールはまだ (⽇本では)少ないはず
https://github.com/toricls/pingbot など Serverless Frameworkベースというと結構作った⽅では? まだ作りたいものはあるのでボチボチ作っていく 普段のWebアプリケーションと実装の考え⽅が違うので 知恵熱がでる 23 Geeks Who Drink
AWSマネージドなサーバレスアーキテクチャ で使えるかもしれない知⾒ 24 Geeks Who Drink
前提 「サーバレスデザインパターン」みたいな仰々しい ものではなくて、あくまで実装時に得たTips的なも の ただ、いろいろ試⾏錯誤をして頭をひねって思いつ いたものばかりです 本当にスミマセン。AWSを知っている前提でお
話します。 25 Geeks Who Drink
設定値をリクエストに付与する ”POST with config” 26 Geeks Who Drink
POST with config backslack, faultline 設定値をツール側で保存するだけで管理対象が増えてし まうので、できるだけ値を保持しないのが鉄則
APIベースのツールなのであれば、リクエストに必要な 設定を毎回付与してしまえばいいというアイデア SlackのWebhook URL, チャンネル名など 秘匿が必要な設置値でさえもKMSを利⽤して暗号化して リクエストに付与する 27 Geeks Who Drink
backslack アーキテクチャ(再掲) 28 Geeks Who Drink
新しい順の⼀覧を実現する “Reversed Timestamp ID” 29 Geeks Who Drink
Reversed Timestamp ID (1/2) faultline 実は⼀覧を作るのは難しい RDSはサーバレスアーキテクチャではアンチパターン
DynamoDBで「テーブルの全てのデータの⼀覧」を作るのはア ンチパターン 今のところS3を使うのを解にしている Prefixの使い⽅が設計のカギ /projects/{project}/errors/{message}/occurrences/ {reversedUnixtime}.json 30 Geeks Who Drink
Reversed Timestamp ID (2/2) S3のオブジェクトはアルファベット順でソートされ ている。`ORDER BY created DESC`
を実現する にはどうすればいいか UNIX Timestampを逆カウントにして、ゼロパディ ングすることで実現 (Math.pow(2, 53) - 1) – unixtime Number.MAX_SAFE_INTEGER - unixtime IDから⽣成時刻もわかって便利(snowflakeみたい) 31 Geeks Who Drink
無限にファンアウトしかねない AWS Lambdaをいい感じに制限実⾏する ”Instant Job Queue” 32 Geeks Who Drink
Instant Job Queue (1/2) utsusemi AWS Lambdaのfunctionをinvokeしてページをクロー ルして、そのリンク先をまた同じfunctionをinvokeして
クロールして... DoSになりかねないファンアウト Queueを作ってWorkerプロセスを常時起動して待ち受 ける形だとWorkerプロセスの管理が増える AWS Step FunctionsがAWSの解だけど費⽤が増える 33 Geeks Who Drink
Instant Job Queue (2/2) Queue (SQS)を作ってクロール開始時にWorkerを起動 して、Workerは指定回数デキューしてクロールしたら値 をエンキューして同じWorkerをinvokeして⾃分⾃⾝を 終了
キューにたまっているメッセージが0になったらWorkerは⾃分⾃ ⾝を終了(最終的にWorkerは0) クロールのような常にキューに値がはいるパターンに使える 同時に動かすWorker数や、Workerが処理するメッセー ジの数などが調整できる FIFOキューにしたら実⾏順番も保証される(かも) 34 Geeks Who Drink
utsusemi アーキテクチャ(再掲) 35 Geeks Who Drink
意外に使われない機能を使って メタ情報を保存する ”S3 Object Tagging” 36 Geeks Who Drink
S3 Object Tagging (1/2) utsusemi クロールして取得したHTMLファイルはS3バケットに保 存
じゃあそのファイルの更新⽇時は?Content-Typeは? ETagは? ファイルシステムならあとでギリ取得できそうなファイルタイプす らS3では難しい ヘッダ情報などの活⽤できそうな値は保持しなくていいのか 他に保存する場所を作ってしまったら管理対象が増える。。。 37 Geeks Who Drink
S3 Object Tagging (1/2) S3 Object Taggingを使う オブジェクトごとにKey-Valueの値を保持できる
“S3 Object Tagging” はS3の機能の名前 ユーザ情報(オブジェクト)とその住所情報(タ グ)とか、Issue(オブジェクト)とラベル(タグ) など、⽤途は広い気がする 38 Geeks Who Drink
まとめ 結局、サーバレスアーキテクチャでうまく設計するためには「各サ ービスの機能を知っておいたほうがいい」ということ サーバレスアーキテクチャは、雑に⾔えば「マネージドなサービスをフル 活⽤して管理レスにしようぜ」アーキテクチャ 制約を受け⼊れてうまくステートレスな設計ができれば「スケー ル」「管理レス」という点でかなりインパクト⼤
サーバレスアーキテクチャで作ったツールはシンプルなSaaSのような感じ (faultline) Serverless Frameworkはサーバレスアーキテクチャ専⽤ツールと して優秀なので是⾮ ⽇本語フォーラムもはじまっている! https://github.com/serverless-japan/forum 39 Geeks Who Drink
40 Fusicはテクノロジーが 好きなエンジニアを募集しています > https://fusic.github.io Thank you!