Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Serverless FrameworkでAWSフルマネージドなツールをいくつか作って得たアー...
Search
Ken’ichiro Oyama
July 21, 2017
Technology
4
9.2k
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
1.8k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
480
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
460
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
110
ソフトウェア開発におけるインターフェイスという考え方 / PHPerKaigi 2025
k1low
10
5.8k
Parsing HCL/CUE / Fukuoka.go #21
k1low
0
9.8k
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
2
380
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
形式手法特論:CEGAR を用いたモデル検査の状態空間削減 #kernelvm / Kernel VM Study Hokuriku Part 8
ytaka23
2
450
ガバメントクラウド利用システムのライフサイクルについて
techniczna
0
190
プロダクトマネージャーが押さえておくべき、ソフトウェア資産とAIエージェント投資効果 / pmconf2025
i35_267
2
590
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
240
re:Inventで気になったサービスを10分でいけるところまでお話しします
yama3133
1
120
第4回 「メタデータ通り」 リアル開催
datayokocho
0
120
[CMU-DB-2025FALL] Apache Fluss - A Streaming Storage for Real-Time Lakehouse
jark
0
110
eBPFとwaruiBPF
sat
PRO
4
2.5k
文字列の並び順 / Unicode Collation
tmtms
2
340
Playwright x GitHub Actionsで実現する「レビューしやすい」E2Eテストレポート
kinosuke01
0
480
WordPress は終わったのか ~今のWordPress の制作手法ってなにがあんねん?~ / Is WordPress Over? How We Build with WordPress Today
tbshiki
1
570
pmconf2025 - データを活用し「価値」へ繋げる
glorypulse
0
710
Featured
See All Featured
It's Worth the Effort
3n
187
29k
Leading Effective Engineering Teams in the AI Era
addyosmani
8
1.3k
How STYLIGHT went responsive
nonsquared
100
6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
The Cult of Friendly URLs
andyhume
79
6.7k
The Pragmatic Product Professional
lauravandoore
37
7.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Statistics for Hackers
jakevdp
799
230k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Documentation Writing (for coders)
carmenintech
76
5.2k
A better future with KSS
kneath
240
18k
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!