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 architec...
Search
Taishi Ikai
October 01, 2016
Technology
43
40k
紙面ビューアーを支える サーバーレスアーキテクチャ / serverless architecture supports Nikkei's paper viewer
Taishi Ikai
October 01, 2016
Tweet
Share
More Decks by Taishi Ikai
See All by Taishi Ikai
日経電子版でApp内課金を導入した話 / Nikkei uses In-App Purchase
ikait
2
2.7k
安定的 60 fps をめざす / the way to 60 fps
ikait
19
5.5k
SwiftとCoreTextと文字組み
ikait
1
600
Typography and Fonts と日本語フォントまわり
ikait
2
3.1k
Other Decks in Technology
See All in Technology
TAMとre:Capセキュリティ編 〜拡張脅威検出デモを添えて〜
fujiihda
2
240
偶然 × 行動で人生の可能性を広げよう / Serendipity × Action: Discover Your Possibilities
ar_tama
1
1.1k
プロセス改善による品質向上事例
tomasagi
2
2.5k
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
2
270
関東Kaggler会LT: 人狼コンペとLLM量子化について
nejumi
3
580
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
0
710
エンジニアが加速させるプロダクトディスカバリー 〜最速で価値ある機能を見つける方法〜 / product discovery accelerated by engineers
rince
4
330
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
210
アジャイル開発とスクラム
araihara
0
170
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
980
Building Products in the LLM Era
ymatsuwitter
10
5.4k
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
740
Featured
See All Featured
Fireside Chat
paigeccino
34
3.2k
Practical Orchestrator
shlominoach
186
10k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Being A Developer After 40
akosma
89
590k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
630
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
330
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.3k
Transcript
ࢴ໘ϏϡʔΞʔΛࢧ͑Δ αʔόʔϨεΞʔΩςΫνϟ ழࣂ େࢤ ຊܦࡁ৽ฉࣾ Serverless Conf Tokyo 2016
2 About me ழࣂ େࢤ (Ikai Taishi) ຊܦࡁ৽ฉࣾͷΤϯδχΞ ࢴ໘ϏϡʔΞʔͷ։ൃΛ୲ Swift,
Python, JavaScript Github: @ikait
3 ༗ྉձһ 48ສਓ ແྉձһ 300ສਓ ඇొ 2500ສUB ܦిࢠ൛ͱ 2010
3 ݄ʹץ ݄ؒΞΫηε 3 ԯ݅ ຖ 900 ຊͷهࣄΛ৴ PCɾϞόΠϧαΠτɺ iOS, Android ΞϓϦͳͲʹରԠ
4 ࢴ໘ϏϡʔΞʔʁ
5 ܦిࢠ൛ ࢴ໘ϏϡʔΞʔ
6 ຊܦࡁ৽ฉΛɺ εϚϗŋλϒϨοτͰಡΉ iOSŋAndroid ରԠ 2016.3.15 ϦχϡʔΞϧ
7 ேŋ༦ץ ͕ಡΊΔ ຖேɺຖ༦৴͞Ε·͢ (ٳץআ͘) աڈ1िؒಡΊ·͢ ΦϓγϣϯͰɺܦ࢈ۀ৽ฉɺ ܦ MJ ͕ಡΊ·͢
8 ৽ฉͱಉ͡ϨΠΞτ ొͨ͠ΩʔϫʔυΛ ϋΠϥΠτͰ͖·͢ ݕࡧͰ͖·͢ μϯϩʔυ͓ͯ͘͠ͱ ΦϑϥΠϯͰಡΊ·͢
9 ࢴ໘ϏϡʔΞʔ ͍ͯ͠·͢ iOSɺAPIɺը૾ੜͳͲ Ϟμϯͳ։ൃϑϩʔʢ❗ʣ ϚωʔδυɾαʔϏεΛ ੵۃతʹར༻͍ͯ͘͠
10 https://twitter.com/naoya_ito/status/779241231029186561
11 https://github.com/serverless/serverless
12 API (ೝূܥ) Ͱɺ͜ͷ Microservice ࣮ߦڥΛར༻͍ͯ͠·͢ https://speakerdeck.com/yosukesuzuki/nikkei-microservice
ࢴ໘ϏϡʔΞʔΛࢧ͑Δ αʔόʔϨεΞʔΩςΫνϟ ழࣂ େࢤ ຊܦࡁ৽ฉࣾ Serverless Conf Tokyo 2016 ͱϚΠΫϩαʔϏεΞʔΩςΫνϟ
14 ࢴ໘ը૾͕ΞϓϦʹಧ͘·Ͱ
15 S3 ฤू લఏ هࣄ ϨΠΞτ ιʔε: ࢴ໘ը૾ ϝλσʔλ
XML ࠲ඪͳͲ
16 S3 SQS EC2 CloudFront Client ιʔεऔಘ ϑΝΠϧஔ ϦαΠζ ը૾ϑΟϧλʔ
هࣄը૾ۣܗΓऔΓ ࢴ໘ը૾ׂ ϝλσʔλऔಘ WebP ม JPEG ม ιʔε enqueue polling / dequeue ΞΫηε੍ݶ όονॲཧͩͱ͢Δͱ..
17 ओʹேץɺ༦ץͷ࣌ؒͷՔಇ͕ͩɺࢴ໘ߋ৽ෆఆظʹ͋Δ → ִؒͰ SQS ΛϙʔϦϯά͢Δ ɾ Πϯελϯεৗʹىಈ͓ͯ͘͠? ɾ εέʔϧΞτएׯ͕͔͔࣌ؒΔ
ॲཧ͕ଟ͍ɺը૾ม(ϦαΠζɺϑΟϧλɺWebPม) ॏΊ → ͍ܰॲཧϚϧνεϨουͰฒྻԽ → Πϯελϯεෳىಈ͢ΔͳͲ ՝
18 Lambda ͕ ʢ౦ژϦʔδϣϯʹʣ ͖ͨ 2015/06/29
19 S3 SQS EC2 CMS CloudFront Client ιʔεऔಘ ϑΝΠϧஔ ϦαΠζ
ը૾ϑΟϧλʔ هࣄը૾ۣܗΓऔΓ ࢴ໘ը૾ׂ ϝλσʔλऔಘ WebP ม JPEG ม ιʔε enqueue polling / dequeue
20 S3 SQS CMS CloudFront Client ιʔεऔಘ ϑΝΠϧஔ ϦαΠζ ը૾ϑΟϧλʔ
هࣄը૾ۣܗΓऔΓ ࢴ໘ը૾ׂ ϝλσʔλऔಘ WebP ม JPEG ม ιʔε enqueue polling / dequeue Lambda
21 S3 CMS CloudFront Client ιʔεऔಘ ϑΝΠϧஔ ϦαΠζ ը૾ϑΟϧλʔ هࣄը૾ۣܗΓऔΓ
ࢴ໘ը૾ׂ ϝλσʔλऔಘ WebP ม JPEG ม ιʔε Lambda S3 ͔ΒͷΠϕϯτͰ Lambda ͕࣮ߦ͞ΕΔ ͜Μͳײ͡ʁ
22 ࡞Γͨ͠
23 Lambda ؔͷ։ൃ
24 ϦαΠζ γϟʔϓɺίϯτϥετ هࣄը૾ۣܗΓऔΓ ࢴ໘ը૾ׂ WebP ม JPEG ม ϝλσʔλม
/ औಘ Lambda ্Ͱߦ͏͜ͱ v0.10.36
25 4000px 5296px
26 ϦαΠζ γϟʔϓɺίϯτϥετ هࣄը૾ۣܗΓऔΓ ࢴ໘ը૾ׂ WebP ม JPEG ม Lambda
্ͷ ImageMagick Λ Ͱར༻
27 ϦαΠζ γϟʔϓɺίϯτϥετ هࣄը૾ۣܗΓऔΓ ࢴ໘ը૾ׂ WebP ม JPEG ม Linux
Ͱ੩తϏϧυͨ͠ cwebp όΠφϦ ΛɺΞοϓϩʔυ͢Δ zip ʹؚΊΔ cwebp Λ node ͔Βѻ͏ͨΊͷ ϥούʔϥΠϒϥϦ install cwebp
28 όΠφϦͷύεΛίʔυͰڥมʹՃ JG GTFYJTUT4ZOD VTSMPDBMCJODXFCQ \ DPOTU-*#@%*3QBUIKPJO @@EJSOBNF MJC
QSPDFTTFOW1"5) A\-*#@%*3^A QSPDFTTFOW-%@-*#3"3:@1"5) A\-*#@%*3^A ^
29 ϩʔΧϧͰϢχοτςετ
30 Ϗϧυ / σϓϩΠ Lambda ςετ Babel ʢes6 → es5ʣ
ɺιʔεϚοϓ npm Πϯετʔϧ σϓϩΠ (node-aws-lambda) npm: source-map-support Increment Version
31 ಈ࡞ϑϩʔ (ུ֓)
32 Source S3 Dest S3 Order Regenerate Dispatch Scheduled
events Invoke Tasks Login, Get Signed URL Request Signed URL API
33 \ OBNFEJWJEF TPVSDFYZ[QOH ˑEFTUJOBUJPOYZ[@QOH EBUB\ SFDUBOHMF\ Y
Z X I ^ ^ ^ S3 PUT Λ͏͚ͯɺॲཧ༰Λॻ͍ͨϑΝΠϧΛஔ Dest S3 Dispatch Tasks Source S3
34 ֤ॲཧ୲ͷ Lambda ͕ S3 ͔Β ඞཁͳϑΝΠϧΛऔಘͯ͠ॲཧ Dest S3 Dispatch
Tasks S3 PUT Λ͏͚ͯɺॲཧ༰Λॻ͍ͨϑΝΠϧΛஔ Source S3
35 Dest S3 Dispatch Tasks S3 PUT Λ͏͚ͯɺॲཧ༰Λॻ͍ͨϑΝΠϧΛஔ ̍ΠϕϯτͰෳͷLambda
ΛىಈͰ͖ͳ͍ͨΊɺͻͱͭͷ Lambda ؔͰҰ୴ΠϕϯτΛड͚औΓɺ ϑΝΠϧ໊Λϕʔεʹͯ͠ɺଞͷ Lambda Λىಈ (S3ܦ༝)
36 Lambda ͔Βىಈ͢Δ߹ɺεϩοτϧ͢Δͱ ࣦഊ͢Δ͔͠Εͳ͍ͷͰ S3 Λܦ༝͢Δ Dest S3 Dispatch Scheduled
events Tasks
37 1 ͓͖ʹىಈ ϑΝΠϧͷଘࡏ֬ೝΛߦ͍ ഔମϦετΛߋ৽͢Δ ഔମϦετͷଘࡏΛͬͯɺ ഔମͷ४උྃΛࣔ͢ Dest S3
Scheduled events
38 API Ͱೝূ API ϢʔβʔΛೝՄͯ͠ɺ CloudFront ॺ໊͖URL Λൃߦ Private Cache
Distribution Dest S3 Login, Get Signed URL Request Signed URL API
39 Private Cache Distribution ύλʔϯ ① ೝূࡁΈϦΫΤετ GET https://api/sign ②
ॺ໊ ③ CF ॺ໊Λ͚ͭͯ ϦΫΤετ
40 Private Cache Distribution ύλʔϯ CloudFront Λҙࣝ͢Δ͜ͱͳ͘ɺ CloudFront ্ͷίϯςϯπͷऔಘ͕Մೳ ①
ೝূࡁΈϦΫΤετ ② 303 (ॺ໊͖URLͷϦμΠϨΫτ) ②’ ϦΫΤετ ॺ໊͖URL ॺ໊͖URLͷੜ
41 ӡ༻
42 ேץલ 18000 invocations/m
43 Lambda ༝དྷͷΤϥʔΊͬͨʹى͖ͳ͍
44 Slack ࿈ܞ Քಇঢ়گΛ௨ ΤϥʔͷᮢΛ͑ͨͱ͖Λ௨ Notify Log Log Alarm (when
exceeded threshold) Notify
45 Source S3 Order Regenerate Dispatch Invoke Slash commands
Ͱ API Gateway ͔Β Lambda ΛىಈɻΤϥʔ࣌ɺ QA ࣌ͳͲɺखಈͰഔମΛੜ Slack ࿈ܞ
46 Lambda ͔Β Lambda ΛݺΜͩޙʹ෮ؼͰ͖ͳ͍Τϥʔݫې ΤϥʔΛى͜͢ͱ࠷ 3 ճϦτϥΠ͞ΕΔͷͰ… < 429:
You are sending too ɹmany requests. Please relax. time dying lambda
47 API ଆͷ E2E ςετ͕Քಇ ෳճ࿈ଓࣦͯ͠ഊ͢Δͱ PagerDuty ͔Β API νʔϜʹి
Lambda ͕ࢮ͍ͯ͠Δ߹ɺखॱʹͦͬͯϩʔΧϧͰॲཧ
48 CloudFront ͕ࢮͨ͠ࡍυϝΠϯͷ͖ઌΛ S3
49 S3 ʹॻ͖ࠐ·ΕΔ CloudFront ͷϩάΛ Lambda Ͱύʔεͯ͠ Elasticsearch ೖɺ kibana
ͰՄࢹԽ Log S3 Parse
50 ϢʔβʔͷΛड͚औͬͯɺSlack ͱ Backlog ߘ API Gateway ܦ༝ͷ Lambda ىಈͷ
ϨΠςϯγʔؾʹͳΔ
51 ৼΓฦΓ
52 ։ൃɺ্ʁ Lambda ͷͨΊͷ։ൃඞཁͩͬͨ ΞϓϦʹԠͨ͡σʔλଆͷॊೈͳมߋ͕Մೳͩͬͨ αʔόʔෛՙΛؾʹ͠ͳ͍ͰΑ͘ͳͬͨʢը૾ੜɺ৴ʣ ։ൃମ੍ͷԸܙʢݱͰٕज़తͳҙࢥܾఆ͕͋Δ͜ͱʣ ӡ༻ίετݮͬͨʢ΄΅ͳ͍ʣ
53 αʔϏεɾঢ়گʹΑͬͯɺସΛҙࣝ͢Δඞཁ͋Γͦ͏ Lambda ؔɺLambda Ҏ֎ͷͲ͜Ͱಈ͔ͤͦ͏ʁ S3, CloudFront ͕མͪͨ࣌ʁ πʔϧ͕ग़ἧͬͯɺݴޠͷબࢶ૿͑ͨ Serverless,
Apex, Lamvery ͳͲ ͲͷαʔϏε҆ఆ͍ͯ͠Δ ࠓ҆৺ͯ͠৸ΒΕΔ
54 ҙ֎ʹࣗ༝͋Δ OS Amazon Linux ͳͷͰɺ͜͜Ͱಈ͘ͷେମಈ͘ Linux ༻ͷ cwebp
όΠφϦͰ WebP มͰ͖ͨ Lambda ͷͨΊͷ։ൃ͕ඞཁʹͳΔ ಛʹɺS3 ͳͲͱ࿈ܞͯ͠ΠϕϯτϕʔεͰॲཧ͢Δ߹ ΠϕϯτͷϧʔςΟϯάɺσΟεύονϟ͕ඞཁʹͳΔ߹ ϢχοτςετͰ͖Δ͕ɺࣗಈͰ݁߹ςετ͕͍͠ Lambda ʹ͍ͭͯ
55 ࡉ͔͍πʔϧΛ࡞Δʹ͔ͳΓศར Slack ͷ Slash commands ͳͲ (API Gateway ͱͷΈ߹Θͤ)
ͪΌΜͱͰ͖͍ͯΔ ΠϕϯτΛ࿙Βͨ͠Γ͠ͳ͍ ͔ͳΓ͍҆ FaaS ͷະདྷΛײ͡Δ Lambda ʹ͍ͭͯ
56 ؆୯ʹ͑Δ PaaS ج൫ͷ४උ͕͋ͬͨ Elastic Beanstalk + Docker + Python
+ Django ೝূඞਢɺ༗ྉձһݶఆͷαʔϏεͳͷͰɺݎ࿚Ͱ։ൃମ੍͕ ཱ͍֬ͯ͠Δํ͕Α͔ͬͨ API Gateway + Lambda ཧͷίετ͕͔͔Γͦ͏ɺϨΠςϯ γʔ͕େ͖͍ PaaS?
57 εςʔτϨεΛҙࣝͤ͟ΔΛಘͳ͍ ෭࡞༻ঢ়ଶอ࣋ʹཔΕͳ্͍࣮ͷ੍ ີ݁߹ͳίʔυ͕ࣗવʹݮΓɺݟ௨͕͖͘͢͠ͳΔ ϑϩϯτΤϯυͷ։ൃʹੜ͖ͨ αʔόʔϨεͰͷ։ൃΛ௨ͯ͡
58 ·ͱΊ
59 Lambda + S3 + CloudWatch Ͱࢴ໘ը૾ͷม S3 + CloudFront
Ͱը૾ͷ৴: Private cache distribution Lambda Ͱ WebP ͷมը૾ॲཧΛߦͬͨ ݁Ռͷͪ߹ΘͤΛ͢ΔͨΊʹ ɺCloudWatch Ͱ cron తʹ Lambda Λ࣮ߦ ҰͭͷΠϕϯτͰෳͷ Lambda Λىಈ͢Δ Workaround Slack, Backlog, PagerDuty ͳͲͷ SaaS ׆༻ αʔόʔϨεͰखͷ͔͔Βͳ͍ΠϯϑϥΛߴʹߏஙͰ͖ͨ
ࢴ໘ϏϡʔΞʔΛࢧ͑Δ αʔόʔϨεΞʔΩςΫνϟ ழࣂ େࢤ ຊܦࡁ৽ฉࣾ Serverless Conf Tokyo 2016