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のおさらいとIronFunctionsについて
Search
youyo
December 03, 2016
Technology
0
460
ServerlessのおさらいとIronFunctionsについて
youyo
December 03, 2016
Tweet
Share
More Decks by youyo
See All by youyo
家の快適度を計測してみた
youyo
1
210
Get started AWS CDK
youyo
0
110
Tried to create a deployment pipeline of AutoML Vision.
youyo
0
85
API GatewayのWebSocket対応について
youyo
0
840
GCRと脆弱性検査
youyo
0
210
goodbye-ec2
youyo
0
710
それでも僕はzabbixと生きていく
youyo
1
480
About AWS Lambda and kintone
youyo
1
270
TerraformとWerckerとAWS Organizationsで始めるステージング・開発環境構築 / terraform-wercker-aws-organizations
youyo
1
34k
Other Decks in Technology
See All in Technology
7月のガバクラ利用料が高かったので調べてみた
techniczna
3
600
退屈なことはDevinにやらせよう〜〜Devin APIを使ったVisual Regression Testの自動追加〜
kawamataryo
3
750
TypeScript入門
recruitengineers
PRO
26
7.9k
AIエージェント就活入門 - MCPが履歴書になる未来
eltociear
0
560
小さなチーム 大きな仕事 - 個人開発でAIをフル活用する
himaratsu
0
130
ZOZOTOWNフロントエンドにおけるディレクトリの分割戦略
zozotech
PRO
18
5.5k
実践AIガバナンス
asei
2
110
自社製CMSからmicroCMSへのリプレースがプロダクトグロースを加速させた話
nextbeatdev
0
150
人を動かすことについて考える
ichimichi
2
330
生成AI利用プログラミング:誰でもプログラムが書けると 世の中どうなる?/opencampus202508
okana2ki
0
190
モバイルアプリ研修
recruitengineers
PRO
4
520
ソフトウェア エンジニアとしての 姿勢と心構え
recruitengineers
PRO
8
2k
Featured
See All Featured
Unsuck your backbone
ammeep
671
58k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
The Invisible Side of Design
smashingmag
301
51k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Done Done
chrislema
185
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Transcript
Serverlessͷ͓͞Β͍ͱ IronFunctionsʹ͍ͭͯ
࣍ • ࣗݾհ • Serverless͓͞Β͍ • IronFunctionsʹ͍ͭͯ
ࣗݾհ • ੴᖒਓ(youyo_) • ΠϯϑϥΤϯδχΞ • ੨ݝग़ઋࡏॅ • JAWS-UG੨ίΞϝϯόʔ •
גࣜձࣾϔϓλΰϯ • http://blog.youyo.info/ • ࠷ۙϋϚ͍ͬͯΔͷ • golang • GAE • ਏ͍͜ͱ • re:InventͰαʔϏε૿͑͗͢…
ձࣾհ • Πϯϑϥશൠͷӡ༻/ࢹ/อकۀ • γεςϜઃܭίετݮ͢ΔʹͲ͏ͨ͠Β͍͍ ͔తͳ૬ஊͲΜͱ͍͜ • AWSʹݶΒͣͲΜͳΫϥυͰΓ·͢ • AzureҊ݅͋Δ͚ͲGCPҊ݅·ͩͳ͍ͷͰ୭͔…
• ຊࣾ੨ݝࡾࢢ • ઋࢢʹࣄॴ͋Γ • ࣾһ3ਓ+Πϯλʔϯ1ਓ
Serverless͓͞Β͍
Serverless͓͞Β͍ • ͷͨͲ͖ͬͯͨಓͷΓΛৼΓฦΓͳ͕ΒɺվΊͯ ServerlessͱͳΜͩͬͨͷ͔͓͞Β͍͍ͯ͜͠͏ͱࢥ͍ ·͢ɻ
Serverless͓͞Β͍ͷલʹొਓհ • AWS Lambda • ίʔυΛAWS LambdaʹσϓϩΠ͢ΔͱɺԿ͔͠ΒͷΠϕϯτ ΛτϦΨʔʹͯͦ͠ͷίʔυΛ࣮ߦͯ͘͠ΕΔίϯϐϡʔςΟ ϯάαʔϏε •
࣮ߦʹ͔͔ͬͨCPU࣌ؒ୯ҐͰͷैྔ՝ۚ • node.js/Java/python/C#Λαϙʔτ • AWSͷFaaS୲ • Amazon API-GatewayͱΈ߹Θͤͯ͏έʔε͕ଟ͍
ServerlessͱݴΘΕͯ࠷ॳʹࢥͬͨ͜ͱ • αʔόʔϨεͬͯ͜ͱαʔόʔͳ͍ͷʁ
ServerlessͱݴΘΕͯ࠷ॳʹࢥͬͨ͜ͱ • αʔόʔϨεͬͯ͜ͱαʔόʔͳ͍ͷʁ • ͍ɺLambdaͩͬͯawsͷཧ͢Δαʔόʔ্Ͱಈ͍ͯΔΑͶʁ • AWS Lambda͑αʔόʔϨεͳΈ࡞ΕΔΑͬͯݴΘΕͯ αʔόʔ͋ΔΑͶʁ •
ͦΕαʔόʔϨεͬͯݴ͍͍ͬͯͷʁ ·͊ͬͪ͜Ͱӡ༻ཧ͢Δαʔό͔֬ʹͳ͍͚Ͳɻ • (ΠϯϑϥΤϯδχΞઢ)
Ͳ͏ΒੈؒͷαʔόʔϨεҧ͏Β͍͠
ServerlessͳΜ͔ͩΒαʔόʔͳ͍Αʁ • AWS LambdaͬͯFunction୯ҐͰ࣮ߦͰ͖ΔΑ͏ʹͳΔΜͩΑʁ • ࣗͰΞϓϦέʔγϣϯαʔόʔͷཧ͠ͳͯ͘Α͘ͳΔ͡ΌΜʁ • αʔόʔϨε͡ΌΜʁ
ΞϓϦέʔγϣϯΤϯδχΞͷ ઢ͜͏ͩͬͨͷ͔ʂ
ΞϓϦέʔγϣϯαʔό͔֬ʹͳ͍ • αʔόʔϨεͷαʔόʔ͕ࢦ͢ͷΞϓϦέʔγϣϯαʔόʔ ͩͬͨ • ͔֬ʹͦͷํ͕ࣗવͩ͠ೲಘ͍ͬͨ • αʔόʔϨεͱΞϓϦέʔγϣϯ࣮ߦڥͷ͜ͱͩͬͨͷ͔ • ී௨ͦ͏Ͱ͠ΐʁͱࢥ͔ͬͨ͠Εͳ͍͚Ͳɺ͖ͬͱͱಉ͡Α
͏ʹײͨ͡ΠϯϑϥΤϯδχΞͷਓগͳ͔Β͍ͣΔͣ
αʔόʔϨεΞʔΩςΫνϟͱ • Function୯ҐͰίʔυΛ࣮ߦͰ͖ΔϑϧϚωʔδυαʔϏε ʹ͔ͬΔ͜ͱͰɺΞϓϦέʔγϣϯαʔόͷཧΛෆཁʹ ͨ͠ΞϓϦέʔγϣϯ࣮ߦڥ
ͰαʔόʔϨεʹผͷଆ໘͋ΔΑͶʁ • ΞϓϦέʔγϣϯ࣮ߦڥͱͯ͠ͷଆ໘ Amazon API Gateway + AWS Lambda ͷΈ߹ΘͤͰ࣮ݱ͞
ΕΔεςʔτϨεͳΞϓϦέʔγϣϯαʔόͱͯ͠ɻ • ͰAWS Lambda࣮ߦͷτϦΨʔͱͳΔͷHTTPϦΫΤε τ͚ͩ͡Όͳ͍ • S3ͷΦϒδΣΫτஔɺDynamodbͷΠϯαʔτͳͲ ͷΠϕϯτΛτϦΨʔͱ࣮ͯ͠ߦ͢Δ͜ͱ͕Ͱ͖Δ • API-Gatewayܦ༝ͷHTTPϦΫΤετҰͭͷΠϕϯτͱߟ ͑ΒΕΔ
ΠϕϯτυϦϒϯΞʔΩςΫνϟ
ΠϕϯτυϦϒϯΞʔΩςΫνϟ • ΫϥυαʔϏε͔Βൃߦ͞ΕͨΠϕϯτΛτϦΨʔͱͯ͠ ࣍ͷॲཧΛ࣮ߦ͢Δ • ϐλΰϥεΠονతͳ • Πϕϯτ͕ൃੜ͢Δ·Ͱ࣍ͷॲཧ࣮ߦ͞Εͳ͍ • ࣮ߦॲཧ࣌ؒ୯ҐͰ՝ۚ͞ΕΔAWS
Lambdaͱ૬ੑ͍͍ • ͍ͭى͜Δ͔Θ͔Βͳ͍Πϕϯτʹରͯ͠ΠϯελϯεΛ ىಈ͠ଓ͚͍ͯͨ߹ʹൺͨΒɺѹతʹίετݮͰ ͖ΔέʔεΠϕϯτ͕ൃੜ͢Δ·Ͱ࣍ͷॲཧ࣮ߦ͞Ε ͳ͍ • AWS LambdaͷΑ͏ͳFaaSΛɺαʔϏεಉ࢜Λͭͳ͙ͷͱ ͯ͠͏
αʔόʔϨεΞʔΩςΫνϟͱ • Function୯ҐͰίʔυΛ࣮ߦͰ͖ΔϑϧϚωʔδυαʔϏε ʹ͔ͬΔ͜ͱͰɺΞϓϦέʔγϣϯαʔόͷཧΛෆཁʹ ͨ͠ΞϓϦέʔγϣϯ࣮ߦڥ • ΠϕϯτυϦϒϯʹϑϧϚωʔδυαʔϏεΛͭͳ͙͜ͱ ͰɺͦΕΒΛͭͳׂ͙Λ͍ͯͨ͠ཧαʔόΛͳͨ͘͠ (FaaSʹஔ͖͑ͨ)γεςϜΞʔΩςΫνϟ
ͳΜͱͳ͘Θ͔͖ͬͯͨ
ͬͯΈͨࣄྫ όονॲཧΛεέʔϥϒϧ/ΠϕϯτυϦϒϯͳײ͡Ͱॲཧ
ͬͯΈͨࣄྫ2 EC2ͱ͔RDSͷϝϯςφϯεΠϕϯτΛαʔόʔϨεͳײ͡Ͱ௨͍ͨ͠
ͬͯΈͨࣄྫ3 ϋοΧιϯͰΰϦΰϦͳΠϕϯτυϦϒϯΞʔΩςΫνϟ࠾༻ͯ͠࡞ͬͯΈͨ
αʔόʔϨεΞʔΩςΫνϟͬͯΈͯࢥͬͨ • ָ͍͠ʂ • ϐλΰϥεΠον͕͖ͳ͚͔ͩ • αʔόͷཧ͔Βղ͖์ͨΕͨײɺ࠷ߴ • ͳΜͨͬͯ͋ͷAmazon͞Μ͕ཧͯ͘͠ΕͯΔ҆৺ײ •
͓͔͔ۚΒͳ͍͠ • ແྉʹ༨༟Ͱऩ·Δ
ͰͦΕ͚ͩ͡Όͳ͘͜͏ײͨ͡ • AWS LambdaͷσϓϩΠͳΜ͔ΊΜͲ͍͘͞ • εςʔτϨεͳͷ͍͍͚ͲεςʔτϑϧͳͷΛѻ͏ͷ େมͦ͏ͩͳ͊ɻ͍ͯ͏͔ී௨ʹΞϓϦέʔγϣϯ࡞ͬͨ ΄͏ָ͕ͳ໘ଟ͍Μ͡Όͳ͍ʁ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ
ίʔυॻ͍ͯϩʔΧϧͰ࣮ߦ Ͱ͖ͳ͘ͳ͍ʁ • AWS Lambdaʹো͋ͬͨΒ…
σϓϩΠΊΜͲ͍͘͞ • πʔϧ͕ॆ࣮͖ͯͨ͠ • Serverless framework • Apex • Lamvery
• ͢ͰʹΊΜͲ͘͘͞ͳ͘ͳ͍ͬͯͨɻٕज़ͷਐาૣ͍ɻ • ݸਓతʹAPI-Gatewayͱͷ࿈ܞ·ͰͦΕ΄Ͳඞཁͱͯ͠ ͳ͍ͷͰLamveryͬͯΔɻศརʂ
εςʔτϑϧͳΞϓϦେม͡Όͳ͍ʁ ͍ͯͳ͍Μ͡Όͳ͍ʁ • ѻ͑ͳ͍͜ͱͳ͍͚Ͳ͍ͯͳ͍ͱࢥͬͯΔ • ϑϧϚωʔδυͳσʔλϕʔεʹͰσʔλೖΕΕͲ͏ʹ ͰͳΔ͠ • Ͱrailsͱ͔ͬͯͨ΄͏ָ͕ͳ͜ͱ͋ΔΜ͡Όͳ͍ʁ •
αʔόʔϨεʹͩ͜Θͬͯແཧͯ͠͏ඞཁͳ͍Μ͡Όͳ͍ʁ
ͦͦFunction୯ҐͰࡉΕʹ͞Ε ͨΞϓϦέʔγϣϯΛ࡞Ε·͔͢ʁ
ͦͦFunction୯ҐͰࡉΕʹ͞Ε ͨΞϓϦέʔγϣϯΛ࡞Ε·͔͢ʁ • αʔόʔϨεͷগ͠લʹMicro Services͕ྲྀߦΓ·ͨ͠ΑͶʁ • ϞϊγϦοΫͳαʔϏε͡Όͳͯ͘ɺͬͱࡉ͔͍ػೳ୯ ҐͰαʔϏεΛ͚ͯɺαʔϏεؒREST APIͰૄ݁߹ʹ ͯ͠ʙ
• ͦͷྲྀΕʹ࣮ͬͯફͨ͠ਓ͕ͲΕ΄Ͳ͍Δͷ͔ • ͪΖΜͦͷޙͷγεςϜઃܭࢥʹେ͍ʹӨڹΛ༩͑ ͨͩΖ͏ • ׂ͕ͩ͢Δ΄Ͳେ͖ͳγεςϜ͡Όͳ͔ͬͨΓɺཧ͢ ͖γεςϜ͕૿͑Δ͜ͱʹΑΔίετ૿Λݒ೦ͯ͠Β ͳ͍ͱ͍͏அ͋ͬͨͣ
ͦͦFunction୯ҐͰࡉΕʹ͞Ε ͨΞϓϦέʔγϣϯΛ࡞Ε·͔͢ʁ • ҰͭͷαʔϏεΛෳͷαʔϏεʹ͚Δ͜ͱ͢Β͍͜͠ͱ ͋Δ • ·ͯͦ͠ͷαʔϏεΛϑΝϯΫγϣϯ୯ҐͰ͚ͯγεςϜ࡞ ΕΔͷ͔ʁ • MicroServicesͷͱ͖ཧ͖͢γεςϜ͕૿͑ͯਏ͘ͳͬͨ
έʔε͋ΔͷͰʁ • ࠓϑΝϯΫγϣϯ୯ҐͰͷཧ͕ٻΊΒΕΔΑ͏ʹͳΓɺ ΑΓਏ͘ͳΔέʔε͋ΔͷͰʁ • ϑϨʔϜϫʔΫʹ͔͓͍ͬͬͯͨํ͕͍͍͜ͱ͋ΔͩΖ͏
αʔόʔϨεΞʔΩςΫνϟ MicroServicesΛ࣮ݱ͢ΔͨΊͷ Ұͭͷखஈʹ͗͢ͳ͍
αʔόʔϨεΞʔΩςΫνϟMicroServices Λ࣮ݱ͢ΔͨΊͷҰͭͷखஈʹ͗͢ͳ͍ • ཻ͕ҧ͏͚ͩ • MicroServicesΑΓখ͞ͳαʔϏεΛΈ߹ΘͤͯҰͭͷ αʔϏεΛߏ • αʔόʔϨεΞʔΩςΫνϟϑΝϯΫγϣϯ୯Ґͷίϯϙʔ ωϯτΛΈ߹ΘͤͯαʔϏεΛߏ
• αʔόʔϨεΞʔΩςΫνϟͰߏ͞ΕͨαʔϏεಉ࢜ΛREST APIͰૄ݁߹ʹͭͳ͍ͩMicroServicesͳαʔϏεɺΈ͍ͨͳͷ Λߟ͑Δͱ͔Γ͍͔͢
αʔόʔϨεΞʔΩςΫνϟMicroServices Λ࣮ݱ͢ΔͨΊͷҰͭͷखஈʹ͗͢ͳ͍ • ͠ҎલʹαʔϏεͷMicroServicesԽΛݕ౼ͯ͠அ೦͍ͯ͠Δͱ ͨ͠ΒɺαʔόʔϨεΞʔΩςΫνϟϋϚΒͳ͍Մೳੑ͕͋Δ • ٕज़ϨϕϧͷͰͳ͘Ϛον͢ΔγεςϜ͔Ͳ͏͔ • εέʔϥϏϦςΟ͕ཉ͍͚ͩ͠Ͱ͋ΕɺطଘͷΞϓϦέʔγϣ ϯΛίϯςφԽͯ͠ίϯςφΫϥελϦϯάܥͷαʔϏεʹ
ͤΔ͚ͩͰेͳԸܙΛड͚ΕΔ߹͋ΔͩΖ͏ͦ͠Ε͕ϕ ετͩͬͯ͜ͱߟ͑ΒΕΔ
αʔόʔϨε·ͱΊ
αʔόʔϨεΞʔΩςΫνϟ·ͱΊ • αʔόʔϨεʹ2ͭͷଆ໘͕͋Δ • Function୯ҐͰίʔυΛ࣮ߦʹ͢Δ͜ͱͰɺΞϓϦέʔγϣϯ αʔόͷཧΛෆཁʹͨ͠ϑϧϚωʔδυͷΞϓϦέʔγϣϯ ࣮ߦڥ • ΠϕϯτυϦϒϯʹϑϧϚωʔδυαʔϏεΛͭͳ͙͜ͱͰɺ ͦΕΒΛͭͳׂ͙Λ͍ͯͨ͠ཧαʔόΛͳͨ͘͠(FaaSʹ
ஔ͖͑ͨ)γεςϜΞʔΩςΫνϟ • αʔόʔϨεΞʔΩςΫνϟʹͩ͜ΘΓ͗͢ͳ͍ • ͖ෆ͖Ͳ͏ͯ͋͠Δ • େͳͷ҆ఆͨ͠αʔϏεΛఏڙ͠ଓ͚Δ͜ͱ • ͦͷͨΊʹϕετͳγεςϜΞʔΩςΫνϟબΛ
ͬͯͨͪΌΜͱݟ͍ͯ͘ • AWS LambdaͷσϓϩΠͳΜ͔ΊΜͲ͍͘͞ • εςʔτϨεͳͷ͍͍͚ͲεςʔτϑϧͳͷΛѻ͏ͷ େมͦ͏ͩͳ͊ɻ͍ͯ͏͔ී௨ʹΞϓϦέʔγϣϯ࡞ͬͨ ΄͏ָ͕ͳ໘ଟ͍Μ͡Όͳ͍ʁ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ
ίʔυॻ͍ͯϩʔΧϧͰ࣮ߦ Ͱ͖ͳ͘ͳ͍ʁ • AWS Lambdaʹো͋ͬͨΒ…
ͬͯͨͪΌΜͱݟ͍ͯ͘ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ ίʔυॻ͍ͯϩʔΧϧͰ࣮ߦͰ͖ ͳ͘ͳ͍ʁ • ςετڥʹσϓϩΠ࣮ͯ͠ߦͯ͠ΈΕ͍͍͚ͩͰ͋ΔΜ ͚ͩͲɺखݩͰνϟνϟͬͱग़དྷͨํ͕خ͍͠ • AWS
Lambdaʹো͋ͬͨΒ… • ผͷΫϥυαʔϏε(CloudFunctions/AzureFunctions)͏ʁ • ࠓͷίʔυޓੑ͋Δʁ େৎʁ
None
IronFunctionsͱʁ • http://open.iron.io/ • αʔόʔϨεΞʔΩςΫνϟΛಛఆͷΫϥυϕϯμʔʹͱΒ ΘΕͣʹ࣮ߦ͢ΔͨΊͷɺΦʔϓϯιʔεͷϓϥοτϑΥʔϜ • Ͳ͜Ͱಈ͔ͤΔ • ͲΜͳݴޠͰ࣮Ͱ͖Δ
• AWS LambdaͷϑΥʔϚοταϙʔτͯ͠Δ(!)
IronFunctions͕՝ղܾͯ͘͠Εͦ͏
IronFunctions͕ͨΒ͢ͷ • ͜Εςετͱ͔Ͳ͏͢Μͷʁ ίʔυॻ͍ͯϩʔΧϧͰ࣮ߦͰ͖ ͳ͘ͳ͍ʁ • खݩʹIronFunctionsͷڥΛDockerͰ্ཱ࣮ͪ͛ͯߦ͢Ε ͍͍ • AWS
Lambdaʹো͋ͬͨΒ… • AWS Lambdaͷίʔυ͕ͦͷ··ಈ͘Μ͔ͩΒผͷΫϥυ ڥʹͰIronFunctionsڥ্ཱͪ͛ͯσϓϩΠ͢Ε͍͍ ˞ ͨͩ͠ΠϕϯτυϦϒϯͳγεςϜͲ͏͠Α͏ͳ͍ͷͰ Ұ୴ΕΔ
IronFunctions͕՝ղܾͯ͘͠Εͦ͏
IronFunctionsຊʹಈ͘ͷ͔ʁ • ͬͯΈͨΒͪΌΜͱಈ͍ͨ • FaasΛ࡞ΕΔOSS, IronFunctions৮ͬͯΈͨ http://qiita.com/youyo_/items/0b227438dcf775665e6c
IronFunctions·ͱΊ • ͍ΖΜͳݴޠ͕͑Δͷັྗత • AWS LambdaϑΥʔϚοτ͕Ͳ͜Ͱಈ͔ͤΔͱ͍͏ͷັྗత • AzureFunctionsCloudFunctionsͱͷޓੑʹظ͍ͨ͠ͱ͜Ζ • Triggerͱͯ͑͠ΔΠϕϯτͲ͏ͳΜͩΖ͏ʁ
Openstackͷ CeilometerʹରԠ͍ͯ͠ΔΈ͍ͨ • ServerlessΞʔΩςΫνϟʔͷಛͷҰͭͱͯ͠ɺΠϕϯτυϦϒϯͳ ͷΛ࡞ΕΔ͔ͱ͍͏ͷॏཁͳΣΠτΛΊΔͱࢥ͏ͷͰɺ͜ͷ ลΓʹظ͍ͨ͠ (ΠϕϯτൃߦଆԿऀʁͱ͍͏ͷஔ͍ͱ͍ͯ) • ҙͱͯ͠ࠓ·ͩα൛ͳͷͰϓϩμΫγϣϯಋೖආ͚ͨ΄͏͕Α ͦ͞͏ɻ࣮ࡍ৮ͬͯͯόά͋ͬͨ͠
·ͱΊ • αʔόʔϨε༻๏ɾ༻ྔΛक͍͍ͬͯײ͡ʹ͓͍͍ͩ͘͞