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
41k
43
Share
紙面ビューアーを支える サーバーレスアーキテクチャ / 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
690
Typography and Fonts と日本語フォントまわり
ikait
2
3.2k
Other Decks in Technology
See All in Technology
ラズパイ & Picoで入門:Zephyr(RTOS)の環境構築からビルドまでの紹介
iotengineer22
0
210
社内RAGの導入で気を付けたポイント
yakumo
2
150
Personal knowledge bases using LLM
lycorptech_jp
PRO
0
350
開発にAIを組織として取り入れる一歩目とその後
yujishibuya
0
200
checker.tsにチキンレースを仕掛けてみた:型エラー(TS2589)が発生する境界線を求めて
hal_spidernight
1
180
Kaggle未経験社員をメダリストに育てる「AIドラゴン桜」
lycorptech_jp
PRO
0
340
AIのために、AIを使った、Effect-TSからの脱却 〜テストを活用した安全なリファクタリングの進め方〜
bitkey
PRO
1
440
Fラン学生が考える、AI時代のデザインに執着した突破口
husengs7
1
240
TSKaigi 2026 - 型プラグインシステムの実装に使われるテクニック
teamlab
PRO
1
290
Amazon Bedrock で生成AI活用サービスをセキュアに構築する方法
takanorig
1
110
freee-mcpを Local→Remote で出してわかった MCP認可実装のリアル
terara
2
510
大規模環境でどのように監視を実現する?
yuobayashi
1
120
Featured
See All Featured
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
SEO for Brand Visibility & Recognition
aleyda
0
4.5k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
The browser strikes back
jonoalderson
0
1.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.8k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
240
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
810
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
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