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
8.4k
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
実践 net/http Middleware パターン / Kizuku.go Vol.1
k1low
1
180
Cleanup handling in Go / Go Conference 2024
k1low
6
3.1k
CI/CDがあたりまえの今の時代にAPIテスティングツールに求められていること / CI/CD Test Night #7
k1low
17
8.6k
Command-line interface tool design / PHPerKaigi 2024
k1low
8
2.8k
gostyle IS NOT Go Style / Fukuoka.go#19 Reboot
k1low
1
220
Parsing case study in Go / Go Conference mini 2023 Winter IN KYOTO
k1low
2
1.3k
APIシナリオテストツールとしてのrunn / 4 API testing tools
k1low
3
1.4k
The future of tbls and "Documentation as Code" / phpconfuk 2023
k1low
4
5.8k
net/http/httptest.Server のアプローチをテスト戦略に活用する / Go Conference 2023
k1low
9
2.9k
Other Decks in Technology
See All in Technology
組織成長を加速させるオンボーディングの取り組み
sudoakiy
2
230
プロダクト活用度で見えた真実 ホリゾンタルSaaSでの顧客解像度の高め方
tadaken3
0
220
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.8k
Application Development WG Intro at AppDeveloperCon
salaboy
0
200
CysharpのOSS群から見るModern C#の現在地
neuecc
2
3.6k
飲食店データの分析事例とそれを支えるデータ基盤
kimujun
0
210
テストコード品質を高めるためにMutation Testingライブラリ・Strykerを実戦導入してみた話
ysknsid25
7
2.7k
適材適所の技術選定 〜GraphQL・REST API・tRPC〜 / Optimal Technology Selection
kakehashi
1
720
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
780
SDN の Hype Cycle を一通り経験してみて思うこと / Going through the Hype Cycle of SDN
mshindo
1
170
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
950
あなたの知らない Function.prototype.toString() の世界
mizdra
PRO
2
460
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
506
140k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Unsuck your backbone
ammeep
668
57k
Bash Introduction
62gerente
608
210k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
430
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.7k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
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!