Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
紙面ビューアーを支える サーバーレスアーキテクチャ / serverless architec...
Search
Taishi Ikai
October 01, 2016
Technology
41k
43
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
紙面ビューアーを支える サーバーレスアーキテクチャ / serverless architecture supports Nikkei's paper viewer
Taishi Ikai
October 01, 2016
More Decks by Taishi Ikai
See All by Taishi Ikai
日経電子版でApp内課金を導入した話 / Nikkei uses In-App Purchase
ikait
2
3k
安定的 60 fps をめざす / the way to 60 fps
ikait
19
5.7k
SwiftとCoreTextと文字組み
ikait
1
700
Typography and Fonts と日本語フォントまわり
ikait
2
3.2k
Other Decks in Technology
See All in Technology
Omarchy Quattro の日本語設定周り
simosako
2
150
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
190
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
230
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
260
Screen Lens - 今見てる画面を翻訳する
komagata
0
250
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
330
Claude Code本って、 読む必要あるの?
oikon48
2
410
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
3
960
GoにおけるFFIのこれまでとこれから
goccy
5
2.5k
Reactの設計論
uhyo
15
8.3k
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
220
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Deep Space Network (abreviated)
tonyrice
0
300
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
320
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
KATA
mclloyd
PRO
35
15k
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