AWS Amplify Meetup #01 で LT 発表したスライドです。
AmplifyͷAPIػೳΛ͏ࡍͷTipsAmplify Meetup #01 LT ηογϣϯ #05
View Slide
ࣗݾհ• Taewoo Kim (ΩϜςʣɺؖࠃਓͰ͢ʂ• AWS Solutions Architect at• 2020 APN AWS Top Engineers ʹબ• ͖ͳAWSαʔϏε AWS AppSync ͱ AWS Amplify
ຊηογϣϯͷର• AWS Amplify API ػೳΛҰͰ࣮ࡍʹࢼͯ͠Έͨํ• AWS Amplify νϡʔτϦΞϧΛΫϦΞʔͨ͠ํ• AWS Amplify Λຊ൪ڥͰಋೖ͍ͨ͠ͱࢥ͏ํ
ૣͰ͕͢
օ͞ΜAmplifyͳͥͬͯ·͔͢ʁ
AmplifyΛ͏ཧ༝• ָ͍͔͠Β• όοΫΤϯυଆͷ࣮ศརͩ͠ɺϑϩϯτଆͷָ࣮ʹͳΔ͔Β•ϏδωεΞΠσΟΞΛ۩ମԽͨ͠ॳظMVPΛരͰ࣮Ͱ͖Δ͔Βʂ
AmplifyΛ͏ཧ༝• ָ͍͔͠Β• όοΫΤϯυଆͷ࣮ศརͩ͠ɺϑϩϯτଆͷָ࣮ʹͳΔ͔Β•ϏδωεΞΠσΟΞΛ۩ମԽͨ͠ॳظMVPΛരͰ࣮Ͱ͖Δ͔Βʂݸਓతʹ͜ͷཧ༝(↑)͕Ұ൪େࣄͩͱࢥ͍·͢
AmplifyΛ͏ཧ༝• ָ͍͔͠Β• όοΫΤϯυଆͷ࣮ศརͩ͠ɺϑϩϯτଆͷָ࣮ʹͳΔ͔Β•ϏδωεΞΠσΟΞΛ۩ମԽͨ͠ॳظMVPΛരͰ࣮Ͱ͖Δ͔Βʂݸਓతʹ͜ͷཧ༝(↑)͕Ұ൪େࣄͩͱࢥ͍·͢MVP࣮ͰAmplify͕Ұ൪ʹཱͭػೳAPI
Amplify API Λ͍࢝Ίͨࡍʹඞ͓͍ͣͬͯͨํ͕ྑ͍ϊϋΛڞ༗͠·͢
όοΫΤϯυϓϩδΣΫτϑϩϯτ͔Βͨ͠ํ͕ྑ͍
Ϟνϕʔγϣϯ• Amplify ެࣜυΩϡϝϯτΛݟΔͱɺϑϩϯτΤϯυϓϩδΣΫτͰόοΫΤϯυϓϩδΣΫτΛҰॹʹཧ͢Δํ๏Λհ͍ͯ͠·͢ɻ• ͭ·ΓɺϑϩϯτΤϯυϓϩδΣΫτͷதʹɺamplify/ ͱ͍͏ϑΥϧμʔ͕ଘࡏ͢Δͱ͍͏ܗʹͳΓ·͢ɻ• Ͱ͕͢ɺෳͷϓϩδΣΫτͰߏ͞Εͨ߹ɺ֤ϓϩδΣΫτʹόοΫΤϯυઃఆΛೖΕΔͷ͕ਖ਼͍͠ͷ͔ɺͱ͍͏Έ͕͔ͪͱࢥ͍·͢ɻ
Ϟνϕʔγϣϯ• Amplify ެࣜυΩϡϝϯτΛݟΔͱɺϑϩϯτϓϩδΣΫτͰόοΫΤϯυϓϩδΣΫτΛҰॹʹཧ͢Δํ๏Λհ͍ͯ͠·͢ɻ• ͭ·ΓɺϑϩϯτΤϯυϓϩδΣΫτͷதʹɺamplify/ ͱ͍͏ϑΥϧμʔ͕ଘࡏ͢Δͱ͍͏ܗʹͳΓ·͢ɻ• Ͱ͕͢ɺෳͷϓϩδΣΫτͰߏ͞Εͨ߹ɺ֤ϓϩδΣΫτʹόοΫΤϯυઃఆΛೖΕΔͷ͕ਖ਼͍͠ͷ͔ɺͱ͍͏Έ͕͔ͪͱࢥ͍·͢ɻ͏Μ…..όοΫΤϯυผ్Ͱཧ͠·͠ΐ͏ʂ
όοΫΤϯυϓϩδΣΫτΛ͢Δ͜ͱͰಘΔϝϦοτ1. όοΫΤϯυͱϑϩϯτͷSeparation of ConcernΛ࣮ݱ͍͢͠2. ෳͷϝϯόʔ͕Ұॹʹ࡞ۀ͘͢͠ͳΔ3. কདྷతʹόοΫΤϯυϓϩδΣΫτΛϚΠάϨʔγϣϯ͢ΔʹͬͱָʹͳΔ
όοΫΤϯυͱϑϩϯτΤϯυ͠·͠ΐ͏ʂhttps://dev.classmethod.jp/articles/amplify-tips-series-1/
GraphQL Schemaͷ type ʹ@model Λ͚ͳ͔ͬͨ࣌ͷҙ͖͢͜ͱ
GraphQL Schemaͷ type ʹ @model Λ͚ͳ͔ͬͨ࣌ͷҙ͖͢͜ͱhttps://dev.classmethod.jp/articles/amplify-tips-series-3/
ͦͦ @model Λͳ͚ͥͭͳ͍ΜͰ͔͢ʁʁ@model σΟϨΫςΟϒΛ͚ͭΔ͜ͱͷϝϦοτ1. σʔλιʔε(DynamoDB) Λੜ͠ɺ AppSync ͱ࿈ܞͯ͘͠ΕΔɻ2. Create/Read/Update/Delete/List ΦϖϨʔγϣϯΛಈ࡞ͤ͞ΔͨΊͷ Query MutationͱɺͦΕͧΕ͕ඞཁͱ͢Δ input ͷλΠϓΛࣗಈͰੜͯ͘͠ΕΔɻ3. ੜ͞Εͨ Query MutationɺλΠϓϑΟʔϧυresolverͷͨΊͷ Request/ResponseMapping TemplatesΛࣗಈͰੜͯ͘͠ΕΔɻ4. ͜ͷΑ͏ʹੜ͞Εͨ CRUD(L) API ΛɺΫϥΠΞϯτιʔείʔυଆͰΞΫηεͰ͖ΔAPI ϥΠϒϥϦʔΛࣗಈͰੜͯ͘͠ΕΔɻ (amplify codegen)
@connection ͱ depth ͋ͨΓ• యܕతͳΞϓϦσʔλεΩϚʔͰඞཁͳλΠϓ͕ेʙඦ• λΠϓ͝ͱͷؔੑΛ࡞ΔͨΊʹ @connection ͕ඞཁ• codegen ͷ depth ΛݮΒ͢··ҡ࣋͢ΔͨΊɺˏmodel Λফ͢• ݁Ռతʹ @connection ແ͠ͰσʔλʹΞΫηεՄೳ
@model Λ͚ͭͳ͔ͬͨࡍͷҙʁ• @model Λ͚ͭͳ͍ͱɺͦͷ DynamoDB ςʔϒϧ͕ੜ͞Εͳ͍• ଞͷ type ͷςʔϒϧʹ JSON ܗࣜͰอଘ͞ΕΔ• DynamoDB JSON ෦ͷϑΟʔϧυʹରͯ͠ͷ Query αϙʔτͯ͘͠Ε͍ͯͳ͍
@model Λ͚ͭͳ͔ͬͨࡍͷҙʁ• ͳͷͰɺdepth ͋ͨΓͷΈͰ ˏmodel Λ͚ͭͨ͘ͳ͍ͳΒɺ depth ઃఆؾʹͤͣɺ query ίʔυΛ࡞͢Εྑ͍ https://dev.classmethod.jp/articles/amplify-tips-series-4/
Custom Resolver ͷ໋໊نଇΛઌʹܾΊΑ͏
Custom Resolver ͕ඞཁͷ߹ͬͯʁ• ECαΠτͷจAPIɿ - ܾࡁαʔϏεͱจαʔϏεͷ࿈ܞ - ใαʔϏεͱσϦόϦʔαʔϏε - શͯΛ߹ΘͤͯτϥϯβΫγϣϯॲཧ• SNSͷྑ͍Ͷʂɿ - ୭͔ྑ͍Ͷʂ͔ͨ͠ʢϢʔβʔςʔϒϧʣ - ྑ͍Ͷʂͷτʔλϧ - ߘσʔλςʔϒϧ - શͯ߹ΘͤͯτϥϯβΫγϣϯॲཧ
schema.graphql
custom_resolver.yaml1 2 3
custom_resolver.yaml
VTL ϑΝΠϧQuery.myCustomLambdaExecution.req.vtl
Custom Resolver ʹ͍ͭͯͷࢲͷߟ͑• ϓϩδΣΫτͰඞཁͳ Custom Resolver ͕ݸఔͳΒແ͠• ϓϩδΣΫτͰඞཁͳ Custom Resolver ͕ेݸҎ্ͳΒɺ Custom Resolver ͷཧίετ։ൃίετ͕ߴ͘ͳΔ• ͬͱָʹ͢Δʹ Serverless Framework ͷ serverless-appsync-plugin Λར༻ͯ͠ AppSync Λߏங͢Δ → amplify codegen Ͱ͖Δ͠ɺcustom resolver ͷָ࣮ʹͳΔ → ͰɺAmplify ͷ σΟϨΫςΟϒ͑ͳ͍
ϒϩάಡΜͰΈ͍ͯͩ͘͞ :D
https://dev.classmethod.jp/tag/aws-amplify/
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ