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
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.5k
Design and implementation of "Markdown to Google Slides" / phpconfuk 2025
k1low
1
630
analysis パッケージの仕組みの上でMulti linter with configを実現する / Go Conference 2025
k1low
1
570
Flight recorder at the application layer (NOT the FlightRecoder newly added at Go 1.25) / Fukuoka.go #22
k1low
0
130
ソフトウェア開発におけるインターフェイスという考え方 / 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
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
150
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
480
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
380
AWS Network Firewall Proxyを触ってみた
nagisa53
1
240
【Ubie】AIを活用した広告アセット「爆速」生成事例 | AI_Ops_Community_Vol.2
yoshiki_0316
1
120
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.4k
配列に見る bash と zsh の違い
kazzpapa3
3
170
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
140
CDKで始めるTypeScript開発のススメ
tsukuboshi
1
530
会社紹介資料 / Sansan Company Profile
sansan33
PRO
15
400k
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
Embracing the Ebb and Flow
colly
88
5k
For a Future-Friendly Web
brad_frost
182
10k
We Have a Design System, Now What?
morganepeng
54
8k
4 Signs Your Business is Dying
shpigford
187
22k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
67
エンジニアに許された特別な時間の終わり
watany
106
230k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.6k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
67
GitHub's CSS Performance
jonrohan
1032
470k
The Invisible Side of Design
smashingmag
302
51k
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!