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
大正Geek Night 2018-08-27
Search
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
Site-Speed That Sticks
csswizardry
13
1.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
Tell your own story through comics
letsgokoyo
1
980
Fireside Chat
paigeccino
42
4k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
140
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
2
250
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
440
Marketing to machines
jonoalderson
1
5.5k
Side Projects
sachag
455
43k
GraphQLとの向き合い方2022年版
quramy
50
15k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
340
Amusing Abliteration
ianozsvald
1
210
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తͳػցֶशαʔϏε