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
大正Geek Night 2018-08-27
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hiroshi Maekawa (a.k.a. Posaune)
August 27, 2018
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大正Geek Night 2018-08-27
Hiroshi Maekawa (a.k.a. Posaune)
August 27, 2018
More Decks by Hiroshi Maekawa (a.k.a. Posaune)
See All by Hiroshi Maekawa (a.k.a. Posaune)
「カスタマイズ」から「標準化」へ。 CI as a Service の考え方を取り入れて DevOps を加速させよう!
posaunehm
1
510
サーバーレス時代にこそ 身につけたいTDD入門
posaunehm
0
310
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
The Language of Interfaces
destraynor
162
27k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
740
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Transcript
͡Ίʹ
ΪϧυϫʔΫεʹ͍ͭͯ
None
None
αʔόʔαΠυʢϨεʣ։ൃͷ ࠷ۙͷࣄ ʙೝূαʔϏεɾ FaaSɾػցֶशʙ ΪϧυϫʔΫεגࣜձࣾ લ തࢤ
ࣗݾհ • ΪϧυϫʔΫεגࣜձࣾ ALMΤϯδχΞ • Application Lifecycle Management • ಘҙٕ
• ։ൃ • αʔόʔαΠυɿ Java • "OESPJE+BWB→,PUPMJO • iOS: Swift • Webϑϩϯτɿ Vuejs → Angular/Ionic • ͦͷଞɿ C# ͳͲͷ .NET ͖Ͱ͢ • Microsoft MVP for Visual Studio and Development • CI / CDͷඋ • ࠷ۙͬͺΒCircleCI
Agenda 1. ৽͍ٕ͠ज़ΛऔΓೖΕΔ͠͞ 2. ࠓճͷઓͷ֓ཁ 3. ઓᶃ Java / Go
on AWS Lambda 4. ઓᶄ ೝূαʔϏεͷࢼ༻ 5. ઓᶅ ػցֶशͷಋೖ 6. ·ͱΊͱࠓޙͷల
ࠓ͢͜ͱ • αʔόʔαΠυ·ΘΓͷ։ൃͰ৽ٕज़ΛऔΓೖΕ ͨࣄྫհ • ͲΜͳࣄΛߟ͑ͯࠓͷٕज़ΛબΜͩͷ͔ɺͳͲ
͜͏͍͏ײ͡Ͱͳ͍Ͱ͢ • AWSνϣοτσΩϧ • ػցֶशνϣοτσΩϧ
1. ࣗݾհ 2. ࠓճࢼͨ͜͠ͱͷ֓ཁ 3. ઓᶃ Java / Go on
AWS Lambda 4. ઓᶄ ೝূαʔϏεͷࢼ༻ 5. ઓᶅ ػցֶशͷಋೖ 6. ࠓޙͷల
৽ٕज़Λࢼ͢ͱ͖͋Δ͋Δ • νϡʔτϦΞϧݟͯྑͦ͞͏ʂʂ • ͪΐͬͱ৮ͬͯΈͯ؆୯ʂʂ • ӦۀͷσϞ͕༏लʂʂ
Γ͍ͨ͜ͱ
ࠓճͷઓͷૂ͍ • Γ͍ͨ͜ͱ 㱺 ࠜຊతͳసΛɺϦεΫΛ࣮͑ͯߦ͍ͨ͠ • ৽نࣗࣾϓϩμΫτͷMVP։ൃΛɺࠜຊతͳٕज़స Λߦ͍ͳ͕Βߦ͏ • ৽نࣗࣾϓϩμΫτ
= ೲظͷϓϨογϟʔ͕খ͍͞ • MVP։ൃ = খ͞ͳ࣮ݧϓϩμΫτͳͷͰɺ࡞Γͳ͓͠ʹͳͬ ͯίετ૿খ͍͞ • ࠷ѱʮ࡞Βͳ͍ʯͱ͍͏அͰ͖Δ ࠓճͷ࡞ઓ ϝϦοτ
͜Ε·ͰͷΪϧυϫʔΫεͷγεςϜߏ σʔλετΞ ΞϓϦέʔγϣϯ ϓϨθϯςʔγϣϯ AWSͷελοΫ ϑϨʔϜϫʔΫ
ݱঢ়ͷߏͷ՝ • ఆܗతͳίʔυ͕ଟ͘ɺ্ཱͪ͛ʹ͕͔͔࣌ؒΔ • σʔλͷCRUD • ೝূɾೝՄपΓ • ͬͱහডɾॊೈͳ։ൃΛߦ͏ํ๏Λݟ͚͍ͭͨ ྫ
ྫ
ࠓճͷઓ • ఆܗίʔυΛগͳ͘͠ɺϓϩδΣΫτͷਨ্ཱͪ ͛Λࢦ͢ 㱺 ೝূͳͲɺSaaSԽͯ͠֎ʹग़ͤΔͷग़͢ 㱺 େ͖ͳϑϨʔϜϫʔΫ͔Βɺؔ͝ͱͷύʔπԽ
•
ࠓճͷઓ σʔλετΞ ΞϓϦέʔγϣϯ ϓϨθϯςʔγϣϯ AWSͷελοΫ ϑϨʔϜϫʔΫ
ࠓճͷઓ σʔλετΞ ΞϓϦέʔγϣϯ ϓϨθϯςʔγϣϯ AWSͷελοΫ ϑϨʔϜϫʔΫ w "84-BNCEB +BWBͰؔ͝ͱͷ ύʔπԽɾϞδϡʔϧԽ
ࠓճͷઓ σʔλετΞ ΞϓϦέʔγϣϯ ϓϨθϯςʔγϣϯ AWSͷελοΫ ϑϨʔϜϫʔΫ w ϑϩϯτ࣮Λ*POJDʹҰຊԽ w 8FCϗετͱͯ͠4
$MPVE'SPOUΛར༻
ࠓճͷઓ σʔλετΞ ΞϓϦέʔγϣϯ ϓϨθϯςʔγϣϯ AWSͷελοΫ ϑϨʔϜϫʔΫ w -BNCEB͔Βར༻͍͢͠%ZOBNP%#Λ σʔλετΞʹར༻͢Δ
ࠓճͷઓ σʔλετΞ ΞϓϦέʔγϣϯ ϓϨθϯςʔγϣϯ AWSͷελοΫ ϑϨʔϜϫʔΫ w ϓϨθϯςʔγϣϯͱ-BNCEBͱͷؒΛ "1*(BUFXBZͰ݁߹͢Δ
ࠓճͷઓ σʔλετΞ ΞϓϦέʔγϣϯ ϓϨθϯςʔγϣϯ AWSͷελοΫ ϑϨʔϜϫʔΫ w ೝূɾೝՄ༻ͷαʔϏεͱͯ͠$PHOJUPΛར༻͢Δ
ࠓճͷઓ CloudFront Cognito ϓϨθϯςʔγϣϯ ΞϓϦέʔγϣϯ σʔλετΞ ଓ ೝূαʔϏε ήʔτΣΠ
1. ৽͍ٕ͠ज़ΛऔΓೖΕΔ͠͞ 2. ࠓճͷઓͷ֓ཁ 3. ઓᶃ Java / Go on
AWS Lambda 4. ઓᶄ ೝূαʔϏεͷࢼ༻ 5. ઓᶅ ػցֶशͷಋೖ 6. ࠓޙͷల
Java on AWS Lambda • ͳͥJava͔ʁ • ͜Ε·ͰऔΓΜͰ͖ͨɺೃછΈͷ͋Δݴޠ 㱺 αʔϏεΛ͘͢ϦϦʔε͢ΔͨΊ
㱺 ৽ٕज़ͷϦεΫݮͷͨΊ • AWS LambdaͰͷαϙʔτͷྺ࢙͘ɺαϙʔτπʔ ϧؚΊ࣮͕ͯ͋Δ 㱺 ࠔͬͨࡍͷϊϋ͋Δఔཷ·͍ͬͯΔ 㱺 πʔϧʹΑΔαϙʔτఏڙ͞Ε͍ͯΔ ཧ༝ᶃ ཧ༝ᶄ ͶΒ͍ ͶΒ͍ ͶΒ͍ ͶΒ͍
Java on AWS Lambda ʹ͓͚Δ՝ͱઓ • DynamoDB ΛͲͷΑ͏ʹར༻͢Δ͔ • RDBͱಉ༷ͷςʔϒϧϚοϐϯάΛߦ͏
• AWSͷσϓϩΠڥઃఆΛͲͷΑ͏ʹ͢Δ͔ • AWS Toolkit for Eclipse Λ༻͍Δ • ೝূɾೝՄΛͲͷΑ͏ʹղܾ͢Δ͔ • ֎෦αʔϏεԽʢCognitoʣΛࢼߦ͢Δ ՝ ํ ՝ ํ ՝ ํ
DynamoDBͱͷଓ • AWSඪ४ͰɺDynamoDBͱͷORM͕ఏڙ͞Εͯ ͍Δ • DynamoDBMapper: https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBMapper.html • Dynamoಛ༗ͷೖΕࢠߏɺIndexͷ࡞ͳͲ
αϙʔτ͍ͯ͠Δ • ඪ४తͳORMͱಉ͡Α͏ʹ͑Δ
DynamoDBMapper @DynamoDBTable(tableName = "Detail") public class MemoryDetailItem { @DynamoDBHashKey(attributeName =
"id") public String getId() { return childId; } @DynamoDBAttribute(attributeName = “Tag") public String getTag() { return title; } @DynamoDBAttribute(attributeName = "Item") public Item getItem() { return answer; } } @DynamoDBDocument public class Item { @DynamoDBAttribute(attributeName = "Title") public String getTitle() { return title; } @DynamoDBAttribute(attributeName = "Content") public String getContent() { return content; } } ೖΕࢠߏ
AWSͷσϓϩΠ • αʔόʔϨεͳܗࣜͰͷΞϓϦέʔγϣϯͷߏங Λߦ͑ΔπʔϧɺAWS Toolkit for EclipseΛར༻ • AWS SAMܗࣜͷςϯϓϨʔτ͔ΒɺEclipseΛ༻
͍ͯσϓϩΠ͢Δํࣜ • BluePrint͕͍͔ͭ͘༻ҙ͞Ε͓ͯΓɺΟβʔυ ܗࣜͰαʔόϨεϓϩδΣΫτ͕ߏஙՄೳ
AWS Toolkit for Eclipse ʙ৽ن࡞ʙ
AWS Toolkit for Eclipse ʙϒϧʔϓϦϯτͷબʙ
AWS Toolkit for Eclipse ʙߏʙ
AWS Toolkit for Eclipse ʙAWSͷσϓϩΠʙ
AWS Toolkit for Eclipse ʙAWSͷσϓϩΠʙ
Java্͍ͬͯ͘Ͱͷ • ىಈ͕͍ • JVMͷىಈ࣌ؒʢͱݴΘΕ͍ͯΔʣ • SpringͳͲͷϑϨʔϜϫʔΫΛ༻͍ͣɺͰ͖Δ͚ͩίϯύΫτʹͯ͠ ɺ10 ʙ 20ඵఔͷ͕ͪൃੜ͢Δ
• Ͳ͏͢Δ͖͔ʁ • ৗ࣌ىಈ͓͚ͯ͠ΔΑ͏ϙʔϦϯά͢Δ • ϩʔσΟϯάͷλΠϛϯάͳͲΛͯ͠ɺϢʔβʔଆͰͷͪ࣌ ؒΛͰ͖Δ͚ͩແ͘͢Λ͢Δ • ͦͦɺΫϥΠΞϯτ͔ΒΞΫηε͞ΕΔΑ͏ͳؔͰ Javaආ͚Δ͖ʁ ՝ ࠓޙͷํ
ͱ͍͏Θ͚ͰɺGoࢼ͢ • ͳͥpython / JSͰͳͯ͘Goʁ • 㱺 ίϯύΠϧͰ͖ΔݴޠͰ͋Δ͜ͱʹΑΔ҆શੑ • 㱺
Goࣗମͷݴޠͱͯ͠͠ͷՄೳੑݟ͔ͨͬͨ • 㱺 Lambda͜͏͍͏খ͞ͳ࣮ݧ͍͢͠
GoͰΔ্Ͱͷ࡞ઓ • JavaΈ͍ͨʹAWS༻ͷσϓϩΠπʔϧ͕ॆ࣮ͯ͠ ͍ΔΘ͚Ͱͳ͍ 㱺 AWS CLI + makefile ͰରԠ
• ݁ՌతʹIDEʹറΒΕͳ͘ͳͬͯɺ൚༻ੑ͕ ্͕ͬͨ
Goʹม͑ͨ݁Ռ • ىಈʹݟ͑ͯૣ͘ͳͬͨ • 30ඵ 㱺 2 ~ 3ඵ •
ωΠςΟϒίʔυΛు͔͘ɺVM্ཱͪ͛Δ͔ͷࠩʁ • ߏཧʢԿނ͔ʣָʹͳͬͨ • IDE͔ΒͰ͖Δͷ࠷ॳ͍͍ͷ͚ͩΕͲ͔ͬͨΔ͍ • Eclipse ͱ IntelliJ ͬͱྑͯ͘͠΄͍͠ɾɾɾ •
GoͰྑ͔ͬͨ͜ͱ • Goland ͕ઈ͍͍͢ • ಛʹϓϩδΣΫτ͝ͱͷύεઃఆΛؾʹ͠ͳͯ͘ྑ͘ͳͬ ͨͷେ͖͍ • ςετίʔυͱ࣮͕͍ۙͷྑ͍ •
ଞͷݴޠͰ͜Ε͘Β͍ۙʹॻ͚ͳ͍͔ͳ…ʁ • Lambda +Go ͩͱσϓϩΠͯ֬͠ೝ͕͔ͬͨΔ͍ ͷͰɺࣗવͱTDDʹͳΔ
1. ৽͍ٕ͠ज़ΛऔΓೖΕΔ͠͞ 2. ࠓճͷઓͷ֓ཁ 3. ઓᶃ Java / Go on
AWS Lambda 4. ઓᶄ ೝূαʔϏεͷࢼ༻ 5. ઓᶅ ػցֶशͷಋೖ 6. ࠓޙͷల
Ϣʔβʔೝূ • CognitoͰΫϥΠΞϯτೝূ • ೝূࡁΈτʔΫϯͷఆΛAPI GatewayͰߦ͏ • AWSଆʹΈͱͯ͠ଘࡏ͢Δ • JavaଆͷΞϓϦέʔγϣϯͱͯ͠ೝূͷΈ
͍࣋ͨͤͯͳ͍ • ϩάΠϯτʔΫϯͷಉҰੑνΣοΫߦ͏
ϢʔβʔೝূͷΈ
αʔόʔϨεΛߏங্͍ͯ͘͠Ͱͷ՝ • εςʔδϯάڥͳͲͷߏஙϊϋ͕ҟͳΔ • DynamoDBςʔϒϧ໊͕RegionϢχʔΫ • ؾܰʹΤϯυϙΠϯτΛม͑Δ͚ͩͰ͍͠ • DynamoDBMapper͕Ξϊςʔγϣϯϕʔεͱ͍͏͜ͱ͋ ΓɺΓସ͑ͷΈΛͲ͜ʹ࣋ͨͤΔ͔͕՝ʹͳͬͨ
• 㱺 ࠷ऴతʹɺϦʔδϣϯ͝ͱʹ։ൃڥΛ࡞ͨ͠ • มߋ͕ҰʹߜΕΔͷͰɺཧָ͕ʹ ՝ ղܾ
ઓᶃ ·ͱΊ • খنͳγεςϜʹͨ͜͠ͱ͋ΓɺߏஙࣗମඇৗʹεϜʔ ζʹͰ͖ͨ • ೝূαʔϏεͷ֎෦ԽͰɺσʔλͷΠϯ/ΞτͷΈʹJavaϓ ϩάϥϜʹઐ೦Ͱ͖ͨ • εςʔδϯάͳͲͷڥΓ͚ߋʹݕ౼ͷ༨͕͋Γͦ͏
• ىಈͷղܾʹɺJavaҎ֎ͷϓϥοτϑΥʔϜͷݕ౼ ඞཁʹͳΓͦ͏ (PPE 1SPCMFN 㱺 GoͰͷ࡞Γ͠Λܾஅ͠ɺݱࡏ࠶࣮த
1. ৽͍ٕ͠ज़ΛऔΓೖΕΔ͠͞ 2. ࠓճͷઓͷ֓ཁ 3. ઓᶃ Java on AWS Lambda
4. ઓᶄ Ionic Λ༻͍ͨPWAΞϓϦέʔγϣϯ։ൃ 5. ઓᶅ ػցֶशͷಋೖ 6. ࠓޙͷల
ࠓճͷઓ CloudFront Cognito ϓϨθϯςʔγϣϯ ΞϓϦέʔγϣϯ σʔλετΞ ଓ ೝূαʔϏε ήʔτΣΠ w
ػցֶशͷಋೖ
ػցֶशͷಋೖͷ͠͞ • σʔληοτΓͳ͍ • αʔϏεελʔτ࣌ʹػցֶशʹेͳσʔλͳ͍ • গͳ͘ͱ1kɺ߹ʹΑͬͯ1MͷΦʔμʔ͕ඞཁ • αʔϏεΛͤͯ͞ɺσʔλΛूΊͳ͕ΒػցֶशΛ ಋೖ͢Δͷ͕ཧ
• ͱ͍͑ɺػցֶशΛ෦తʹಋೖͯ͠ɺ׆༻͍ͯ͠ ͘Լ४උ͓͖͍͑ͯͨ •
ػցֶशͷಋೖͷ͠͞ • ٕज़తϋʔυϧߴ͍ • ͜Ε·ͰͷWebΞϓϦέʔγϣϯٕज़͔Βେ͖͘ҟ ͳΔ͕ࣝඞཁ • ࢝ΊΔʹͨΓͷ४උ͕େม ʢSupport Vector
Machine ͷղઆΑΓʣ
ࠓճͷελϯε • σʔληοτΓͳ͍ɿ طʹेͳσʔληοτ͕ू·͍ͬͯΔʹλʔήοτΛߜΔ • ը૾ೝࣝ • ݴޠੳ
• Իೝࣝ • ٕज़తϋʔυϧߴ͍ɿ લఏࣝෆཁͷSaaSܥαʔϏεΛϑϧ׆༻͢Δ ՝ ํ ՝ ํ
ࠓճͷελϯε • σʔληοτΓͳ͍ɿ طʹेͳσʔληοτ͕ू·͍ͬͯΔʹλʔήοτΛߜΔ • ը૾ೝࣝ • ݴޠੳ
• Իೝࣝ • ٕज़తϋʔυϧߴ͍ɿ લఏࣝෆཁͷSaaSܥαʔϏεΛϑϧ׆༻͢Δ ՝ ํ ՝ ํ ੵۃతʹڊਓͷݞʹ͍ͬͯ͘
SaaSܥػցֶशαʔϏε • AWS / Microsoft / Google ͕ͦΕͧΕఏڙ͍ͯ͠ Δͷ͕Ұ൪ϝδϟʔ •
ࠓճͷλʔήοτɺݴޠੳ • Google Natural Language API ͕Ұ൪༗ • AWS: ຊޠରԠͳ͠ • Microsoft: ຊޠ෦ରԠ • Google: ຊޠϑϧରԠ
Google Natural Language API • ࣗવݴޠʹର͢ΔॲཧΛϥοϐϯά͢ΔAPI • ఏڙ͞Ε͍ͯΔαʔϏε • ΤϯςΟςΟੳ
• ײੳ • จ๏ɾจܕੳ
Google Natural Language API - ΤϯςΟςΟੳ- • ग़ݱ͢Δݴ༿ΛϥϕϦϯά͠ɺॏཁ ʢSalienceʣΛ͚ͭΔ
Google Natural Language API - ײੳ- • จষͷ༰͕Positiveͳͷ͔Negativeͳͷ͔Λ ผ͠ɺScoreͱͯ͠ฦ͢ɻ ·ͨɺͦͷײͷڧ͞ΛMagnitudeͱͯ͠ฦ͢ɻ
ײੳΛ͏্Ͱͷίπ • ώϯτᶃ ͿͬͪΌ͚ຊޠղੳΤϯδϯͷੑೳ͕͍ • ώϯτᶄ Googleͷຊޠ༁ׂͱ༏ल • ݁
ӳ༁͔ͯ͠ΒɺӳޠͰղੳ͔͚ͨ΄͏͕ ੑೳ͕ྑ͍
Google Natural Language API - จܕੳ- • จষͷΓड͚ߏΛղੳ͢Δɻ
Google Natural Language API ʙඅ༻ʙ ※ 1,000ϦΫΤετ͋ͨΓ / Ұϲ݄͋ͨΓ 1ສϦΫΤετ
㱺 500ԁ 100ສϦΫΤετ 㱺 10ສԁ
Google Natural Language API ΛαʔϏεͰར༻͢Δ • ՝ۚϞσϧ՝ۚͳͷͰɺ APIͰͷΞΫηε ຖʹୟ͘ͱ༰қʹΕ্͕Δ
㱺 όονॲཧͷҰ෦ͱͯ͠ɺ࣮ߦճΛ੍ݶ • ΤϯςΟςΟੳ ʴ ײੳ ͰɺϢʔβʔσʔ λͷϥϕϦϯάΛߦ͏
ࠓޙͷల • จষͷྨࣅʢϕΫτϧڑ͕ओྲྀʣʹΑΔݕࡧ ͳͲಋೖ͍ͨ͠ • SaaSϨϕϧͰྑ͍αʔϏεͳͦ͞͏ • ͱࢥͬͯͨΒGo͕αʔϏε։࢝ͯͨ͠ʂʂ • ςΩετϖΞղੳཉ͔ͬͨ͠ͷͩͬͨ
Go ຊޠղੳαʔϏε
શମͷ·ͱΊ
ࠓճτϥΠͨ͜͠ͱ • খ͘͞ɺେ͖ͳ࣮ݧ • ϓϩδΣΫτͷنখ͍͕͞ɺϓϩδΣΫτશମ͕৽ ͍͠ઓʹͳ͍ͬͯΔ • ϦϦʔεΛલఏʹஔ͘͜ͱͰɺΑΓେ͖ͳͰ ׆༻͍ͯ͘͠ͷʹ༗༻ͳݟ͕ಘΒΕͨ •
Lambda ͷڥɺJava Lambda ͷ • ػցֶशSaaSͷ͍ॴ
࣍ʹͬͯΈ͍ͨ͜ͱ • αʔόʔଆɿ • Lambda ΑΓ͞ΒʹܰྔͳαʔόʔϞσϧΛࢼ͍ͨ͠ 㱺 MBaaS ͷࢼߦʹνϟϨϯδ͍ͨ͠ •
Google FireStore / AWS AppSync • ػցֶश • SaaS ͔Β PaaS ʹҰา౿Έग़͍ͨ͠ • AWS SageMaker ʹΑΔɺPaaSతͳػցֶशαʔϏε