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.5k
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
Making your applications cross-environment - OSCG 2024 NA
salaboy
0
180
TypeScriptの次なる大進化なるか!? 条件型を返り値とする関数の型推論
uhyo
2
1.6k
The Role of Developer Relations in AI Product Success.
giftojabu1
0
120
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
スクラム成熟度セルフチェックツールを作って得た学びとその活用法
coincheck_recruit
1
140
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.3k
20241120_JAWS_東京_ランチタイムLT#17_AWS認定全冠の先へ
tsumita
2
240
RubyのWebアプリケーションを50倍速くする方法 / How to Make a Ruby Web Application 50 Times Faster
hogelog
3
940
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
フルカイテン株式会社 採用資料
fullkaiten
0
40k
DMARC 対応の話 - MIXI CTO オフィスアワー #04
bbqallstars
1
160
サイバーセキュリティと認知バイアス:対策の隙を埋める心理学的アプローチ
shumei_ito
0
380
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
It's Worth the Effort
3n
183
27k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Scaling GitHub
holman
458
140k
Music & Morning Musume
bryan
46
6.2k
Adopting Sorbet at Scale
ufuk
73
9.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
860
Intergalactic Javascript Robots from Outer Space
tanoku
269
27k
Designing the Hi-DPI Web
ddemaree
280
34k
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!