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
HIGOBASHI.AWS 第5回「AngularとAWS AppSyncで作るサーバーレスア...
Search
yuji nishimura
July 27, 2018
Technology
0
3.7k
HIGOBASHI.AWS 第5回「AngularとAWS AppSyncで作るサーバーレスアプリケーション」
HIGOBASHI.AWSで発表したスライドです。
yuji nishimura
July 27, 2018
Tweet
Share
More Decks by yuji nishimura
See All by yuji nishimura
Kinesis Video Streams 最新アップデートの紹介 #reinvent #cmregrowth
ynishimura
0
1.4k
HIGOBASHI.AWS 第12回「AWS CDKのConstruct Libraryを作って 公開してみよう」
ynishimura
0
530
Angularを使って爆速で管理画面を作る
ynishimura
0
2.6k
サーバーレスアーキテクチャで作ったIoTのバックエンドシステムで遭遇したエラーと対処法
ynishimura
0
2k
HIGOBASHI.AWS 第10回「サーバーレスとデータ分析 ~AWS Lambdaを活用して効率化しよう~」
ynishimura
0
1.2k
re:Invent2018 IoT系の新サービス・アップデート
ynishimura
0
1.2k
【Developers.IO 2018】IoTを実現するためのAWSのIoT系サービス:分析、セキュリティ管理、組み込み向けサービスもあるで!
ynishimura
2
1k
HIGOBASHI.AWS 第6回「Amazon Route53で ドメインを購入して、設定してみよう」
ynishimura
0
1.6k
higobashi.aws 第2回「IoTとサーバーレスとラズパイ」
ynishimura
1
1.4k
Other Decks in Technology
See All in Technology
Lexical Analysis
shigashiyama
1
150
TypeScript、上達の瞬間
sadnessojisan
46
13k
Lambdaと地方とコミュニティ
miu_crescent
2
370
Zennのパフォーマンスモニタリングでやっていること
ryosukeigarashi
0
170
CDCL による厳密解法を採用した MILP ソルバー
imai448
3
170
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.4k
ドメインの本質を掴む / Get the essence of the domain
sinsoku
2
160
VideoMamba: State Space Model for Efficient Video Understanding
chou500
0
190
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
420
Adopting Jetpack Compose in Your Existing Project - GDG DevFest Bangkok 2024
akexorcist
0
110
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
180
ISUCONに強くなるかもしれない日々の過ごしかた/Findy ISUCON 2024-11-14
fujiwara3
8
880
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
4
130
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Building Your Own Lightsaber
phodgson
103
6.1k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
The Cult of Friendly URLs
andyhume
78
6k
Designing for Performance
lara
604
68k
How to Ace a Technical Interview
jacobian
276
23k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Typedesign – Prime Four
hannesfritz
40
2.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Transcript
2018/7/27 西村祐二 AngularとAWS AppSyncで作る サーバーレスアプリケーション
♣自己紹介 • 西村祐二(27) • サーバーレス開発部所属 • 元情シス、インフラエンジニア •
入社1年2ヶ月 • AWS歴1年2ヶ月 • 東京から大阪にUターン転職 • 前職はISPの会社で顧客システムの運用・保守
Angular 使ったことある人✋
GraphQL 使ったことある人✋
AWS AppSync 使ったことある人✋
簡単なAWS AppSyncの説明 ✦GraphQLのマネージドサービス ✦GraphQLを通してAWSサービスを使える ✦複数人リアルタイム、オフライン対応アプリ作れる ✦コンフリクトもクラウドで解消できる ✦エンタープライズレベルのセキュリティ機能
簡単なAWS AppSyncの説明 ✦GraphQLのマネージドサービス ✦GraphQLを通してAWSサービスを使える ✦複数人リアルタイム、オフライン対応アプリ作れる ✦コンフリクトもクラウドで解消できる ✦エンタープライズレベルのセキュリティ機能
デモアプリ作ってきました!
作ったデモアプリ ✦リアルタイムいいね!アプリ ‣をタップすると「いいね!」が増えます ‣他の人がタップした値も反映されます
みんなも触ってみてね http://ux.nu/Y4Fic ✦数字が更新されないときはリロードしてね ✦発表で「いいね!」と思ったら都度タップしてね σϞΞϓϦൃද࣌ͷΈެ։ͱͳΓ·͢ɻ "OHVMBSͷιʔε(JUIVCʹެ։͍ͯ͠ΔͷͰ ͦͪΒΛ֬͝ೝ͍ͩ͘͞ɻ IUUQTHJUIVCDPNOJTIJNVSBZVKJ%FNP"QQ4ZOD"OHVMBS"QQ
‣シンプルな構成で実現 ‣API Gatewayの代わりにAppSync ‣クライアントはGraphQLでリクエスト 構成図 S3 Amazon DynamoDB
Amazon CloudFront AWS AppSync query subscription mutation
‣シンプルな構成で実現 ‣API Gatewayの代わりにAppSync ‣クライアントはGraphQLでリクエスト 構成図 S3 Amazon DynamoDB
Amazon CloudFront AWS AppSync query subscription mutation
GraphQLの概要 ‣API用のクエリ言語 ‣クライアントがサーバからデータを •Query(取得) •Mutation(追加、変更) •Subscription(購読) できるようになる ‣クライアント側がレスポンス形式指定
•必要データだけ取得(メモリ、帯域節約)
APIの形式 /blogs /commentsOnBlog /blogByAuthor /blogInfo 従来:サーバ主体 GraphQL:クライアント主体 やりたいこと
ほしい情報をリクエスト
リクエスト例 query { getBlog( id:”1” ){ title category
} } サーバ側 クライアント レスポンス type Query { getBlog(id:ID):[blog] } type blog { id: ID! author: String title: String category: String createdAt: Int! } } スキーマ、型定義 { “title”: “hoge”, “category”: “AWS” } 必要な情報だけ リクエスト リクエストした データのみ返却
‣ほぼリアルタイムでのデータ購読 ‣Mutationをトリガーに通知 Subscription mutation { addBlog( title:”test” author:”hoge”
category:”AWS” ){ title author category } } AWS AppSync push
実際の実装をみていこう AWS AppSync
作業内容 ✦AppSyncでやること ‣データソースの設定 ‣スキーマ設定 ‣リゾルバ設定
データソースの設定 ✦設定できるデータソース(現在時点) ‣DynamoDB、ES、Lambda、HTTP endpoint Amazon ES AWS Lambda
Amazon DynamoDB Amazon API Gateway
スキーマ設定 ‣サーバの機能を記述し、リクエストが有効か どうかを判断するために使用 ‣SDL(Schema Definition Language)で記述 •json形式 type
Query { getBlog(id:ID):[blog] } type blog { id: ID! author: String title: String category: String createdAt: Int! } }
スキーマの型定義 ✦型定義の書き方 ‣スカラー型、オブジェクト型、列挙型など利用可能 ‣Not Null制約は感嘆符「!」で表現 •ID! ‣リストは角括弧で表現 •[String]
type Todo { id:ID! name: String status: TodoStatus } enum TodoStatus { done pending } type Query { getTodos:[Todo] }
Subscriptionのスキーマ設定 ‣購読したいmutationを@aws_subscribe()で 囲むだけ type Subscription { addedPost:Post @aws_subscribe(mutations:[addPost])
} type Mutation { addPost(id:ID!): Post }
リゾルバ設定 ‣データソースとの接続可能にする設定 •GraphQLリクエストをデータソースの命令 に変換 •リゾルバマッピングテンプレートを記載 •Apache Velocoty Template
Lang(VTL) •2種類のテンプレートを設定 リクエストテンプレート レスポンステンプレート
例 ‣デモアプリのリゾルバ(リクエスト) ‣mutationがきたら、DynamoDBで UpdateItemするようにリゾルバ設定してい るだけ { "version" :
"2017-02-28", "operation" : "UpdateItem", "key" : { "id" : { "S" : "${context.arguments.id}" } }, "update" : { "expression" : "ADD #votefield :plusOne", "expressionNames" : { "#votefield" : "vote" }, "expressionValues" : { ":plusOne" : { "N" : 1 } } } }
動作確認 ✦マネージメントコンソールからテスト ‣subscriptionのテストもできる
クライアント側の実装
Angular ✦Angularの概要 ‣フルスタックフレームワーク ‣TypeScript標準 ‣RxJS標準 フルスタックだけど GraphQLのクライアントライブラリは デフォルトではない
GraphQLクライアントライブラリ
AWS Amplify ✦GraphQLのクライアントとして使用 ‣他にいろんな機能盛りだくさん •Analytics系 •API系 •Authentication系 •chatbot系
•PubSub、PushNotifications系 •strage系 •など
どう使うのか ‣基本の流れは同じ •environmentにAppSyncの情報 •Serviceでリクエストのロジック記載 •Componentでロジックを利用し、レスポン スを画面に表示
Service ‣AWS AmplifyのGraphQLリクエストの基本形 ‣API.graphql(graphqlOperation(リクエスト)) ‣基本これでGraphQLリクエストできる ‣リクエストもそのまま渡せばOK
Service ‣従来のAPIリクエストより簡単にかける
ちょっとした罠 ‣subscriptionときだけObservableでかえっ てくる ‣Angularで扱いやすいけどイレギュラー https://aws-amplify.github.io/amplify-js/api/classes/apiclass.html#graphql
AWS Amplifyの中身を調査 ‣どうやってsubscriptionを実現してるのか •ソースをみると •paho-mqtt、zen-observable •RxJSじゃなくzen-observableなので、pipe メソッドなど使えないので注意 https://github.com/aws-amplify/amplify-js/blob/400b1cb2f393d33efe5aa824f730b3155a2f9822/packages/
pubsub/src/Providers/AWSAppSyncProvider.ts
AppSyncを使ってアプリ 作ってみた所感
予想以上に簡単に実装できた
簡単なCRUD操作は API Gateway → AppSync に置き換えて良さそう
本番投入時に 気になること 使えそうなこと
AWS AppSyncの制限
AWS AppSyncの制限(2018/7/27時点) リソース デフォルト制限 リージョンあたりのAPIの最大数 アカウントあたり25 APIキーの最大数 APIあたり50
スキーマドキュメントの最大サイズ 1MB GraphQLクエリの最大実行時間 10秒(APG29秒) req/resのマッピングテンプレートの 最大サイズ 64KB サブスクリプションの 最大ペイロードサイズ 128KB マッピングテンプレートにおける foreach…endループの最大数 1,000
デプロイ
AWS CloudFormation
‣AWS CloudFormationテンプレートをサポート •スキーマ •データソース •リゾルバ 定義することができる
ϦιʔελΠϓ આ໌ "84"QQ4ZOD(SBQI2-"QJ σʔλιʔεͷ؍Ͱɺ"QQ4ZOD"1*Λఆٛ "84"QQ4ZOD"QJ,FZ σʔλιʔεʹΞΫηε͢ΔͨΊʹඞཁͳ ΞΫηεΩʔΛఆٛ "84"QQ4ZOD(SBQI2-4DIFNB
(SBQI2-εΩʔϚΛఆٛ "84"QQ4ZOD%BUB4PVSDF σʔλιʔεΛఆٛ "84"QQ4ZOD3FTPMWFS εΩʔϚͱσʔλιʔεΛࢀর͢Δ͜ͱʹ ΑΓϦκϧόΛఆٛ
‣テンプレートの中にスキーマが混在するので メンテナンス時のことを考慮する必要あり AppSyncSchema: Type: "AWS::AppSync::GraphQLSchema" DependsOn: - AppSyncGraphQLApi
Properties: ApiId: !GetAtt AppSyncGraphQLApi.ApiId Definition: | schema { query: Query mutation: Mutation } type Query { singlePost(id: ID!): Post allPosts: [Post] } type Mutation { putPost(id: ID!, title: String!): Post }
ログ・監視
Amazon CloudWatch
ログの設定 ‣マネージメントコンソールから簡単に設定で きる ‣ログレベルの設定も可能 •ALL、Error、Noneの3段階
ログの設定 ‣Cloudformationでも有効にできるので設定 にしておく ‣ログレベルも設定可能 Type: "AWS::AppSync::GraphQLApi" Properties: UserPoolConfig:
UserPoolConfig OpenIDConnectConfig : OpenIDConnectConfig Name: String AuthenticationType: String LogConfig: LogConfig CloudWatchLogsRoleArn: String FieldLogLevel: String
メトリック ✦サポート内容 ‣HTTPステータスコード •4XX:無効なリクエスト関係 •5XX:GraphQLクエリの実行中のエラー ‣レイテンシー •クライアントから要求を受信してからクライ アントに応答を返すまでの時間
認証
認証 ✦設定できる認証 ‣API_KEY ‣AWS_IAM ‣COGNITO_USER_POOL
API_KEY ‣認証設定せずにGraphQLを作成すると自動 的に設定される
AWS_IAM ‣Cognito Federated Identitiesの一時トーク ンを使用してアクセス。 ‣IAM Policyを使って認可 https://www.slideshare.net/AmazonWebServicesJapan/20180523-aws-black-belt-online-seminar-aws-appsync
COGUNITO_USER_POOL ‣ユーザグループで制御可能 ‣@aws_auth(cognito_group:[グループ名]) https://www.slideshare.net/AmazonWebServicesJapan/20180523-aws-black-belt-online-seminar-aws-appsync
APIドキュメントの管理
APIドキュメント ‣SchemaファイルからAPIドキュメント生成 できるソフトウェアがいくつかある ‣graphdocが良さそう https://github.com/2fd/graphdoc
AppSyncで大変だったこと
大変だったこと ‣AppSyncのリゾルバ設定 •リゾルバマッピングテンプレートをドキュメ ント参照しながら書く •でも、API Gatewayよりわかりやすい印象 ‣正直それぐらいです ‣デモアプリ1時間ぐらいで作れました
さいごに
AWS AppSync 新しいサービスどんどん使っていきましょう!
We Are Hiring !!! Ϋϥεϝιουͷձࣾઆ໌ձΓ·͢ʂ 2018.8.22(ਫ)
None