iOSDC Japan 2018のトラックCでお話させていただいた資料です。 なお、セッションではデモを行いましたがその動画ならびに作成したアプリのURLは割愛しています。代わりにアプリのソースコードへのリンクを載せています。
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Keisuke Nishitani, Specialist SA, AWS Japan K.K31 Aug, 2018ٔ،ٕة؎يꬠㄏ- Building real-time app with GraphQL and AWS AppSync -
View Slide
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Who am I ?Keisuke NishitaniSpecialist Solutions ArchitectAmazon Web Service Japan K.K@Keisuke69 Keisuke69 Keisuke69 Keisuke69Keisuke69x
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.ְֶׁ: ٔ،ٕة؎ي鸐⥋הכ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.ٔ،ٕة؎ي鸐⥋הכؙٓ؎،ٝزה؟٦غ٦ָ㶷㖈׃הֹח؟٦غ٦⩎ד涪欰׃չ⡦ַպָؙٓ؎،ٝز⩎פהչּׅחպؿ؍٦سغحׁؙ״ֲז鸐⥋Ⳣ椚ךֿהؙٓ؎،ٝزـٓؐؠծط؎ذ؍ـ،فٔ⡦ַ⚺חر٦ةך刿倜
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.ٔ،ٕة؎ي鸐⥋ךⰩ㘗⢽ثٍحزوٕثفٖ؎َ٦٦يتحءُن٦س،ٓ٦زِ٦ؠדךر٦ةず劍
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.״ֻ֮㹋鄲ػة٦ٝ1. Polling2. Long Polling3. Serve-Sent Events4. WebSocket
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Polling〢ֹ葺ֹ儗➿ך䩛岀ؙٓ؎،ٝزָ㹀劍涸חؙٔؒأز涪遤׃ر٦ةך㢌刿ָזְַثؑحؙ• ♧殢ءٝفٕז㹋鄲כJS⢪㹀劍涸זل٦آٔٗ٦س• Ajax涫㜥⟃꣬כAPIפךPollingָ⚺崧• ءٝفַٕאأذ٦زٖأٔ،ٕة؎ي䚍כه٦ؚٔٝꥫ⣛㶷• 㹋ךהֿٔ،ٕة؎يדכזְ⸬桦涸דכזְ• 刿倜ָזֻג،ؙإأָ涪欰ׅ• 刿倜ָ걼籕דזְ㜥さװ✮庠♶〳腉ז㜥さ刿倜ָ걼籕ֺׅה؟٦غ٦頾蚚ָ넝תָ• ٓ٦آأ؛٦ٕחזהٖ؎ذٝءך㉏겗⳿גֻ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Long PollingְײComet؟٦غ٦ָ「ֽ《ؙٔؒأزח㼎ׅٖأهٝأ鹼䒀ׇׁהְֲ鷞鯄ך涪䟝• ر٦ةָ涪欰ׅתדٖأهٝأ⥂殅׃ծ涪欰׃ٖأهٝأׅٔ،ٕة؎ي䚍כPolling״כ넝ְ瀉儗ַא넝걼䏝כ蕱䩛• ➬穈♳ծٖأهٝأ䖓חؙٓ؎،ٝزַךⱄؙٔؒأزָ䗳銲ז
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Server-Sent Events (SSE)؟٦غ٦⩎ַر٦ة涪欰ךןחPushׅ• Chunkر٦ةה׃גⳢ椚ֿׅהד㹋植• ر٦ةכٖأهٝأך♧鿇זךד鸐⥋笝䭯ׁ• ؟٦غ⩎ַ鸐⥋ָⴖ倖ׁזְ• Cometה殯זⱄ䱸竲؝أز⡚ְٔ،ٕة؎ي䚍ָ넝ְؙٓ؎،ٝز⩎ַכر٦ة鷏זְ• ؟٦غ٦ַؙٓ؎،ٝزפך⽃♧倯ぢ鸐⥋
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.WebSocket植儗挿דך劤ㄏה鎉ִ倯ぢ鸐⥋ךח瘻㹀ׁHTTPהכⴽך鋉呓• 傀㶷ך鸐⥋堣㐻鸐麓דֹזְ〳腉䚍• قحت鯪ꆀד؟٦غ٦ך頾蚚⡚ְٔ،ٕة؎ي䚍ָ넝ְNode.js + Socket.ioָًآٍ٦• Swift欽ךؙٓ؎،ٝز䲿⣘ׁגְ• Socket.ioכWebSocketꬊ㼎䘔橆㞮ך㜥さכLong Pollingחⴖ剏ִגؿؓ٦ٕغحؙ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.HTTP/2 ؟٦غ٦فحءُHTTPך倜鋉呓• 剑㣐ך暴䗙כ1אך؝طؙءّٝⰻדず儗ח⚛遤׃ג醱侧ךؙٔؒأز/ٖأهٝأⳢ椚• أزٔ٦يהأزٔ٦ي㢳ꅾ⻉ؙٔؒأزׁגְזְ؝ٝذٝخ؟٦غ٦ָؙٓ؎،ٝزח鷏⥋gRPCכֿךHTTP/2ך暴䗙剑㣐ꣲח崞ַ׃➬穈如ך劤ㄏ…?
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.ֿֿתדכ⚺חفٗز؝ٕך鑧
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.➙傈ך劤겗
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.GraphQL
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.GraphQLהכAPI 欽ךؙؒٔ鎉铂• 㘗ءأذيחהבְؙؒٔ㹋遤ךך؟٦غ٦⩎ٓٝة؎يؙٓ؎،ٝزָ؟٦غ٦ַر٦ة《䖤ծ㢌刿ծ飑铣דֹ״ֲחׅךر٦ة鎉铂GraphQLؙؒٔ• ؙٓ؎،ٝزָٖأهٝأך䕎䒭䭷㹀• ؙٓ؎،ٝزכ䗳銲זر٦ةך䗳銲ז䕎䒭ד撑⠓〳腉
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.GraphQLהכ{"id": "1","name": "Get Milk",“priority": "1"},{"id": "2","name": "Go to gym","priority": "5"},…type Query {getTodos: [Todo]}type Todo {id: ID!name: Stringdescription: Stringpriority: Intduedate: String}query {getTodos {idnamepriority}}،فٔךأؗ٦وהٌرٕر٦ةؙٓ؎،ٝزָ䗳銲זךֽؙٔؒأزؙٔؒأز׃ر٦ةָֽ鵤ׁ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.REST APIה嫰鯰׃גREST APIכؙٔؒأزָ㢳ֻזָ• ل٦آ邌爙ׅךח⡦⦐ API 〨ַזֽלזזְREST APIכٖأهٝأח♶銲זر٦ةָろתAPI ➬圫ךسًُؗٝز盖椚ָ㣐㢌
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.GraphQL Subscription
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.GraphQL Subscriptionקרٔ،ٕة؎يדךر٦ة飑铣Mutationزٔؖ٦ח׃؎كٝزك٦أ• ؟٦غ٦؟؎سך㢌刿ؙٓ؎،ٝز⩎ד「ֽ《mutation addPost( id:123title:”New post!”author:”Nadia”){idtitleauthor}data: [{id:123,title:”New Post!”author:”Nadia”}]
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.أؗ٦و㹀纏type Subscription {addedPost: Post@aws_subscribe(mutations: ["addPost"])deletedPost: Post@aws_subscribe(mutations: ["deletePost"])}type Mutation {addPost(id: ID! author: String! title:String content: String): Post!deletePost(id: ID!): Post!}subscription NewPostSub {addedPost {__typenameversiontitlecontentauthorurl}}
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.GraphQL㹋遤橆㞮GraphQLכֻ֮תדر٦ةח㼎ؙׅؒٔװ乼⡲ך؎ٝة٦ؿؑ٦أ➬圫• ֻ֮תדؙؒٔ鎉铂ה׃גך➬圫• 䔲搫ְֲֲせך醡ㅷծاؿزؐؑ،ծ؟٦ؽأָֽ֮דכזְ• SQLָⰧ⡤涸ז醡ㅷדכזֻծRDBMS瘝ךر٦ةك٦أך㉏ְさׇ鎉铂ה׃גⵃ欽ׁגְךח鵚ְ• GraphQLָ䪔ֲر٦ةךأزٖ٦آחאְג暴ח鋉㹀ׁגְזְGraphQL鍑ꅸ׃גر٦ة鵤ׅ؟٦غ٦ָ䗳銲؟٦غ٦㹋鄲ׅךٓ؎ـָٓٔ圫ղז鎉铂ד㹋鄲٥Ⱅׁגְ• 崞欽׃גؙؒٔⰻ㺁הח׃ر٦ةإحزפך㉏ְさׇⳢ椚㹋鄲ׅ荈㹋鄲הזח㣐㢌• ⽃秪ח鏣鎘ֶ״ן㹋鄲ח儗ַַָ• أ؛٦ٕ،ؐزך㼎䘔זו؎ٝؿٓךֶ㸚铩ַָ׃זְהְֽזְ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS AppSync
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS AppSyncؿٕوط٦آسזGraphQL ؟٦ؽأ• ּׅחGraphQLⵃ欽〳腉ٔ،ٕة؎ي堣腉הؔؿٓ؎ٝ堣腉• Ⱏ剣ر٦ةٔ،ٕة؎يח剑倜⻉• ؔؿٓ؎ٝ儗ךر٦ة刿倜הؔٝٓ؎ٝ儗ךؙٓؐسפךず劍醱侧ךر٦ةا٦أ؟ه٦ز• DynamoDB / Elastic Search / Lambda• Lambdaָ⢪ִךד㹋颵⡦דדֹկ㢩鿇APIOK
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.ِ٦أ؛٦أٔ،ٕة؎ي• 剑倜ך䞔㜠ؐؓحثׅتحءُن٦س• קרٔ،ٕة؎يדر٦ة刿倜؝ٓنٖ٦ءّٝ• 醱侧ِ٦ؠ٦ָⰟず箟꧊遤ֲ،فٔ؛٦ءّٝ• سًُؗٝزծ歗⫷ծذؗأزًحإ٦آזוծׁתׂתז؝ٝذٝخة؎ف荈⹛刿倜ا٦ءًٍٕر؍،• ا٦ءًٍٕر؍،װثٍحز• 醱侧ِ٦ؠ٦דךًحإ٦آؚٝ盖椚؟ه٦ز• ؔؿٓ؎ٝ儗ד،فٔ؛٦ءّٝ乼⡲דֹծⱄ䱸竲儗ח荈⹛ Sync
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AppSyncך؝ٝإفزAWS App Sync Client• 钠鏾ծؔؿٓ؎ٝٗآحؙזוろClientData Source• DynamoDB / Elasticsearch / LambdaIdentity• GraphQL Proxy פךؙٔؒأزך钠鏾GraphQL Proxy• ؙٔؒأزךوحؾؚٝծ؝ٝؿؙٔزךعٝسؚٔٝծ،ؙإأ؝ٝزٗ٦ٕOperation• Query / Mutation / Subscription זו GraphQL ךؔلٖ٦ءّٝAction• GraphQL ַ Subscriber פך鸐濼Resolver• ؙٔؒأز / ٖأهٝأךⳢ椚鎸鶢ׅꟼ侧
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AppSync OverviewAWS AppSyncAmazonDynamoDBAWSLambdaElasticsearchsubscriptions/graphqlResolversDataSources
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Amazon DynamoDBהAmazon Elasticsearch ServiceAmazonDynamoDBElasticSearch/addPost/searchPostsر٦ةا٦أ穈さׇֿהד넝䏝ז嗚稊ח㼎䘔〳腉կؗ٦ٙ٦س嗚稊ծؿ؋آ٦嗚稊ծ㖑椚瑞嗚稊ծe.t.c
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Lambdaה3rdPartyAPI/searchPosts㢩鿇BQJ-BNCEB%BUB4PVSDFה׃ג䪔ִծזדדֹ㢩鿇ך8FC"1*〨ֻֿה〳腉
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AppSyncחֶֽGraphQL SubscriptionMutationח㼎ׅٖأهٝأה׃גㄎן⳿ׁ• אתApp Syncהאזָ֮ײر٦ةا٦أָٔ،ٕة؎ي鸐⥋דⵃ欽〳腉חז• GraphQLךأؗ٦و㹀纏ד㹑鎉Subscriptionך؝طؙءّٝ盖椚כAppSync client SDKח״ג荈⹛涸ח遤• ؙٓ؎،ٝزה؟٦ؽأךفٗز؝ٕה׃גכMQTT overWebSocketָ⢪
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS Amplify
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS Amplify• ؿٗٝزؒٝسֶ״ןٌغ؎ٕ涪罏ぢֽךؔ٦فٝا٦أךJavaScriptٓ؎ـٓٔ• AWSך؟٦ؽأ⢪ג㹋鄲ׅꥷח״ֻⵃ欽ׁةأؙ،فٔ؛٦ءّٝח知⽃ח穈鴥• https://github.com/aws/aws-amplify• ؎ٝأز٦ٕ$ npm install aws-amplify$ npm install aws-amplify-react
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.⚺銲זJavaScriptؿٖ٦يٙ٦ؙ؟ه٦زReact Angular Vue.js(soon)
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS AmplifyדדֹֿהAuth• Amazon Cognito User Poolⵃ欽׃♧菙涸ז؟؎ٝ؎ٝח䗳銲זⳢ椚؟؎ٝ؎ٝծ؟؎ٝ،حفծػأٙ٦س䘌• MFAAnalytics• ،فٔךⴓ匿湡涸ה׃Amazon Pinpointפךر٦ة鷏⥋• ؕأةي㾩䚍⦼װؕأةيًزؙٔأח㼎䘔API• Amazon API GatewayפךؙٔؒأزⳢ椚• AWS Signature Version 4欽ְؙٔؒأزפך縭せ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS AmplifyדדֹֿהGraphQLؙٓ؎،ٝز• AWS AppSync׃ֻכך➭ךGraphQL؟٦غⵃ欽ׅꥷךؙٓ؎،ٝزStorage• Amazon S3ח㼎ِׅ٦ؠ؝ٝذٝخך،حفٗ٦سծتؐٝٗ٦سהְ堣腉ךءٝفٕזㄎן⳿׃• Public/Protected/Privateך3珏겲ך،ؙإأٖكٕך盖椚Push鸐濼• Amazon Pinpoint欽ְة٦ذ؍ֶؚٝ״ןٍؗٝل٦ٝفحءُ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS Amplifyדדֹֿה؎ٝةؙٓءّٝ• Amazon Lexⵃ欽׃堣唒㷕统ك٦أה׃⠓鑧㘗نحزך⡲䧭PubSub• AWS IoT׃ֻכ♧菙涸זMQTT欽ְPubSubך㹋鄲Caching• ر٦ةأز،欽ְ♧菙涸זLRUٍؗحءُ堣圓ך㹋鄲㕂ꥷ⻉㼎䘔
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.Demo
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.،٦ؗذؙثٍ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.תהPolling ։ WebSocketפה竲ֻٔ،ٕة؎ي鸐⥋ך娖〷• 㛇劤涸חفٗز؝ٕٖكٕך鑧GraphQLהGraphQL Subscription• API欽ךؙؒٔ鎉铂ד֮GraphQL• ؎كٝزك٦أךٔ،ٕة؎يⳢ椚㹋植ׅךGraphQL Subscription• GraphQLכך➬圫• RESTח➿ַ濼זְGraphQL⢪ٔ،ٕة؎يז،فٔ知⽃ח涪דֹAWS AppSync• ؿٕوط٦آسזךד؟٦غ٦ךإحز،حفזו♶銲דأ؛٦ٓـٕ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AppendixAWS AppSync Developer Guidehttps://docs.aws.amazon.com/appsync/latest/devguide/welcome.htmlAWS Amplifyhttps://aws-amplify.github.io/GraphQLⰕ䒭https://graphql.org/Demoד⢪欽׃،فٔhttps://github.com/aws-samples/aws-mobile-appsync-chat-starter-angular
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved."84%FW%BZ 5PLZP⪵寸㹀⯓遤歍׃鴥㹋倵⚥"84%FW%BZ כծ،فٔ؛٦ءّٝ涪遤ֲركٗحػ٦ך涺圫ךךծؚٗ٦غٕذؙظٗآ٦؎كٝزדׅկ،فٔ涪חꟼ鸬ׅ"84ך㹋騧涸ז䞔㜠כծ㕂ⰻ㢩ך✲⢽鸐ׄكأزفؙٓذ؍أծذؙصٕؕإحءّٝծعٝؤؔٝծعحؕاٝծٙ٦ؙءّحفծٓ؎زصؚٝز٦ؙזו圫ղז䕎דֶ㾈ֽ׃תׅկ䎃剢傈 剢։剢傈 ꆃ،وبٝ ؐؑـ ؟٦ؽأ آٍػٝ 匌❨٥湡랲أزٔ٦ىؚٝ⚥竰㹋倵✮㹀דׅ⯓遤涫ꐮ갥ְ倯חכծ姻䒭歍鴥㨣儗חծְ傍ֻ׀涫ꐮ갥ֽ״ֲ׀鸬窃ְ׃תׅկIUUQTBN[OUPEFWEBZDEVDAY"84%FW "84%FW%BZ
© 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.AWS⢪ג،فٔ涪ׅ 㼰➂侧ד؝٦س剅ְծֻֻ׃ծٌـفٗ׃ծ㹋ꥷח䩛⹛ַ׃https://meguro-dev.connpass.com/