Slide 1

Slide 1 text

AmplifyͷAPIػೳΛ࢖͏ࡍͷTips Amplify Meetup #01 LT ηογϣϯ #05

Slide 2

Slide 2 text

ࣗݾ঺հ • Taewoo Kim (ΩϜς΢ʣɺؖࠃਓͰ͢ʂ • AWS Solutions Architect at • 2020 APN AWS Top Engineers ʹ౰બ • ޷͖ͳAWSαʔϏε͸ AWS AppSync ͱ AWS Amplify

Slide 3

Slide 3 text

ຊηογϣϯͷର৅ • AWS Amplify API ػೳΛҰ౓Ͱ΋࣮ࡍʹࢼͯ͠Έͨํ • AWS Amplify νϡʔτϦΞϧΛΫϦΞʔͨ͠ํ • AWS Amplify Λຊ൪؀ڥͰಋೖ͍ͨ͠ͱࢥ͏ํ

Slide 4

Slide 4 text

ૣ଎Ͱ͕͢

Slide 5

Slide 5 text

օ͞Μ͸ Amplifyͳͥ࢖ͬͯ·͔͢ʁ

Slide 6

Slide 6 text

AmplifyΛ࢖͏ཧ༝ • ָ͍͔͠Β • όοΫΤϯυଆͷ࣮૷΋ศརͩ͠ɺϑϩϯτଆͷ࣮૷΋ָʹͳΔ͔Β •ϏδωεΞΠσΟΞΛ۩ମԽͨ͠ॳظMVPΛ ര଎Ͱ࣮૷Ͱ͖Δ͔Βʂ

Slide 7

Slide 7 text

AmplifyΛ࢖͏ཧ༝ • ָ͍͔͠Β • όοΫΤϯυଆͷ࣮૷΋ศརͩ͠ɺϑϩϯτଆͷ࣮૷΋ָʹͳΔ͔Β •ϏδωεΞΠσΟΞΛ۩ମԽͨ͠ॳظMVPΛ ര଎Ͱ࣮૷Ͱ͖Δ͔Βʂ

Slide 8

Slide 8 text

AmplifyΛ࢖͏ཧ༝ • ָ͍͔͠Β • όοΫΤϯυଆͷ࣮૷΋ศརͩ͠ɺϑϩϯτଆͷ࣮૷΋ָʹͳΔ͔Β •ϏδωεΞΠσΟΞΛ۩ମԽͨ͠ॳظMVPΛ ര଎Ͱ࣮૷Ͱ͖Δ͔Βʂ ݸਓతʹ͸͜ͷཧ༝(↑)͕Ұ൪େࣄͩͱࢥ͍·͢

Slide 9

Slide 9 text

AmplifyΛ࢖͏ཧ༝ • ָ͍͔͠Β • όοΫΤϯυଆͷ࣮૷΋ศརͩ͠ɺϑϩϯτଆͷ࣮૷΋ָʹͳΔ͔Β •ϏδωεΞΠσΟΞΛ۩ମԽͨ͠ॳظMVPΛ ര଎Ͱ࣮૷Ͱ͖Δ͔Βʂ ݸਓతʹ͸͜ͷཧ༝(↑)͕Ұ൪େࣄͩͱࢥ͍·͢ MVP࣮૷ͰAmplify͕Ұ൪໾ʹཱͭػೳ͸ API

Slide 10

Slide 10 text

Amplify API Λ࢖͍࢝Ίͨࡍʹ ඞͣ஌͓͍ͬͯͨํ͕ྑ͍ ϊ΢ϋ΢Λڞ༗͠·͢

Slide 11

Slide 11 text

όοΫΤϯυϓϩδΣΫτ͸ ϑϩϯτ͔Β෼཭ͨ͠ํ͕ྑ͍

Slide 12

Slide 12 text

Ϟνϕʔγϣϯ • Amplify ެࣜυΩϡϝϯτΛݟΔͱɺϑϩϯτΤϯυϓϩδΣΫτͰ όοΫΤϯυϓϩδΣΫτΛҰॹʹ؅ཧ͢Δํ๏Λ঺հ͍ͯ͠·͢ɻ • ͭ·ΓɺϑϩϯτΤϯυϓϩδΣΫτͷதʹɺamplify/ ͱ͍͏ϑΥ ϧμʔ͕ଘࡏ͢Δͱ͍͏ܗʹͳΓ·͢ɻ • Ͱ͕͢ɺෳ਺ͷϓϩδΣΫτͰߏ੒͞Εͨ৔߹͸ɺ֤ϓϩδΣΫτʹ όοΫΤϯυઃఆΛೖΕΔͷ͕ਖ਼͍͠ͷ͔ɺͱ͍͏೰Έ͕͔ͪͱࢥ͍ ·͢ɻ

Slide 13

Slide 13 text

Ϟνϕʔγϣϯ • Amplify ެࣜυΩϡϝϯτΛݟΔͱɺϑϩϯτϓϩδΣΫτͰόο ΫΤϯυϓϩδΣΫτΛҰॹʹ؅ཧ͢Δํ๏Λ঺հ͍ͯ͠·͢ɻ • ͭ·ΓɺϑϩϯτΤϯυϓϩδΣΫτͷதʹɺamplify/ ͱ͍͏ ϑΥϧμʔ͕ଘࡏ͢Δͱ͍͏ܗʹͳΓ·͢ɻ • Ͱ͕͢ɺෳ਺ͷϓϩδΣΫτͰߏ੒͞Εͨ৔߹͸ɺ֤ϓϩδΣΫτ ʹόοΫΤϯυઃఆΛೖΕΔͷ͕ਖ਼͍͠ͷ͔ɺͱ͍͏೰Έ͕͔ͪͱ ࢥ͍·͢ɻ ͏Μ….. όοΫΤϯυ͸ผ్Ͱ؅ཧ͠·͠ΐ͏ʂ

Slide 14

Slide 14 text

όοΫΤϯυϓϩδΣΫτΛ෼཭͢Δ͜ͱͰಘΔϝϦοτ 1. όοΫΤϯυͱϑϩϯτͷSeparation of ConcernΛ࣮ݱ͠΍͍͢ 2. ෳ਺ͷϝϯόʔ͕Ұॹʹ࡞ۀ͠΍͘͢ͳΔ 3. কདྷతʹόοΫΤϯυϓϩδΣΫτΛϚΠάϨʔγϣϯ͢Δʹ΋ ΋ͬͱָʹͳΔ

Slide 15

Slide 15 text

όοΫΤϯυͱϑϩϯτΤϯυ͸෼཭͠·͠ΐ͏ʂ https://dev.classmethod.jp/articles/amplify-tips-series-1/

Slide 16

Slide 16 text

GraphQL Schemaͷ type ʹ @model Λ෇͚ͳ͔ͬͨ࣌ͷ ஫ҙ͢΂͖͜ͱ

Slide 17

Slide 17 text

GraphQL Schemaͷ type ʹ @model Λ෇͚ͳ͔ͬͨ࣌ͷ஫ҙ͢΂͖͜ͱ https://dev.classmethod.jp/articles/amplify-tips-series-3/

Slide 18

Slide 18 text

ͦ΋ͦ΋ @model Λͳ͚ͥͭͳ͍ΜͰ͔͢ʁʁ @model σΟϨΫςΟϒΛ͚ͭΔ͜ͱͷϝϦοτ 1. σʔλιʔε(DynamoDB) Λੜ੒͠ɺ AppSync ͱ࿈ܞͯ͘͠ΕΔɻ 2. Create/Read/Update/Delete/List ΦϖϨʔγϣϯΛಈ࡞ͤ͞ΔͨΊͷ Query ΍ Mutation ͱɺͦΕͧΕ͕ඞཁͱ͢Δ input ౳ͷλΠϓΛࣗಈͰੜ੒ͯ͘͠ΕΔɻ 3. ੜ੒͞Εͨ Query ΍ MutationɺλΠϓϑΟʔϧυresolver౳ͷͨΊͷ Request/Response Mapping TemplatesΛࣗಈͰੜ੒ͯ͘͠ΕΔɻ 4. ͜ͷΑ͏ʹੜ੒͞Εͨ CRUD(L) API ΛɺΫϥΠΞϯτιʔείʔυଆͰ΋ΞΫηεͰ͖Δ API ϥΠϒϥϦʔΛࣗಈͰੜ੒ͯ͘͠ΕΔɻ (amplify codegen)

Slide 19

Slide 19 text

@connection ͱ depth ͋ͨΓ • యܕతͳΞϓϦ͸σʔλεΩϚʔͰඞཁͳλΠϓ਺͕਺ेʙ਺ඦ • λΠϓ͝ͱͷؔ܎ੑΛ࡞ΔͨΊʹ @connection ͕ඞཁ • codegen ͷ depth ΛݮΒ͢··ҡ࣋͢ΔͨΊɺˏmodel Λফ͢ • ݁Ռతʹ @connection ແ͠Ͱ΋௚઀σʔλʹΞΫηεՄೳ

Slide 20

Slide 20 text

@model Λ͚ͭͳ͔ͬͨࡍͷ஫ҙ఺͸ʁ • @model Λ͚ͭͳ͍ͱɺͦͷ DynamoDB ςʔϒϧ͕ੜ੒͞Εͳ͍ • ଞͷ type ͷςʔϒϧʹ JSON ܗࣜͰอଘ͞ΕΔ • DynamoDB ͸ JSON ಺෦ͷϑΟʔϧυʹରͯ͠ͷ Query ͸αϙʔτ͠ ͯ͘Ε͍ͯͳ͍

Slide 21

Slide 21 text

@model Λ͚ͭͳ͔ͬͨࡍͷ஫ҙ఺͸ʁ • ͳͷͰɺdepth ͋ͨΓͷ೰ΈͰ ˏmodel Λ͚ͭͨ͘ͳ͍ͳΒ͹ɺ
 depth ઃఆ͸ؾʹͤͣɺ௚઀ query ίʔυΛ࡞੒͢Ε͹ྑ͍
 
 
 
 
 
 
 
 
 
 https://dev.classmethod.jp/articles/amplify-tips-series-4/

Slide 22

Slide 22 text

Custom Resolver ͷ໋໊نଇΛ ઌʹܾΊΑ͏

Slide 23

Slide 23 text

Custom Resolver ͕ඞཁͷ৔߹ͬͯʁ • ECαΠτͷ஫จAPIɿ
 - ܾࡁαʔϏεͱ஫จαʔϏεͷ࿈ܞ
 - ঎඼৘ใαʔϏεͱσϦόϦʔαʔϏε
 - શͯΛ߹ΘͤͯτϥϯβΫγϣϯॲཧ • SNSͷྑ͍Ͷʂɿ
 - ୭͔ྑ͍Ͷʂ͔ͨ͠ʢϢʔβʔςʔϒϧʣ
 - ྑ͍Ͷʂͷτʔλϧ਺
 - ౤ߘσʔλςʔϒϧ
 - શͯ߹ΘͤͯτϥϯβΫγϣϯॲཧ

Slide 24

Slide 24 text

schema.graphql

Slide 25

Slide 25 text

custom_resolver.yaml 1 2 3

Slide 26

Slide 26 text

custom_resolver.yaml

Slide 27

Slide 27 text

custom_resolver.yaml

Slide 28

Slide 28 text

custom_resolver.yaml

Slide 29

Slide 29 text

VTL ϑΝΠϧ Query.myCustomLambdaExecution.req.vtl

Slide 30

Slide 30 text

Custom Resolver ʹ͍ͭͯͷࢲͷߟ͑ • ϓϩδΣΫτ಺Ͱඞཁͳ Custom Resolver ͕਺ݸఔ౓ͳΒ໰୊ແ͠ • ϓϩδΣΫτ಺Ͱඞཁͳ Custom Resolver ͕਺ेݸҎ্ͳΒɺ
 Custom Resolver ͷ؅ཧίετ΍։ൃίετ͕ߴ͘ͳΔ • ΋ͬͱָʹ͢Δʹ͸ Serverless Framework ͷ serverless-appsync- plugin Λར༻ͯ͠ AppSync Λߏங͢Δ
 → amplify codegen ΋Ͱ͖Δ͠ɺcustom resolver ͷ࣮૷΋ָʹͳΔ
 → Ͱ΋ɺAmplify ͷ σΟϨΫςΟϒ͸࢖͑ͳ͍

Slide 31

Slide 31 text

ϒϩά΋ಡΜͰΈ͍ͯͩ͘͞ :D

Slide 32

Slide 32 text

https://dev.classmethod.jp/tag/aws-amplify/

Slide 33

Slide 33 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ