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
4.1k
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.5k
HIGOBASHI.AWS 第12回「AWS CDKのConstruct Libraryを作って 公開してみよう」
ynishimura
0
620
Angularを使って爆速で管理画面を作る
ynishimura
0
2.9k
サーバーレスアーキテクチャで作ったIoTのバックエンドシステムで遭遇したエラーと対処法
ynishimura
0
2.1k
HIGOBASHI.AWS 第10回「サーバーレスとデータ分析 ~AWS Lambdaを活用して効率化しよう~」
ynishimura
0
1.4k
re:Invent2018 IoT系の新サービス・アップデート
ynishimura
0
1.4k
【Developers.IO 2018】IoTを実現するためのAWSのIoT系サービス:分析、セキュリティ管理、組み込み向けサービスもあるで!
ynishimura
2
1.1k
HIGOBASHI.AWS 第6回「Amazon Route53で ドメインを購入して、設定してみよう」
ynishimura
0
1.8k
higobashi.aws 第2回「IoTとサーバーレスとラズパイ」
ynishimura
1
1.6k
Other Decks in Technology
See All in Technology
プロダクト成長を支える開発基盤とスケールに伴う課題
yuu26
4
1.4k
Context Engineeringの取り組み
nutslove
0
380
M&A 後の統合をどう進めるか ─ ナレッジワーク × Poetics が実践した組織とシステムの融合
kworkdev
PRO
1
510
Cosmos World Foundation Model Platform for Physical AI
takmin
0
980
インフラエンジニア必見!Kubernetesを用いたクラウドネイティブ設計ポイント大全
daitak
1
390
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
220
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
350
Agile Leadership Summit Keynote 2026
m_seki
1
670
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.4k
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
190
コスト削減から「セキュリティと利便性」を担うプラットフォームへ
sansantech
PRO
3
1.6k
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
270
Featured
See All Featured
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
110
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
Claude Code のすすめ
schroneko
67
210k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
250
ラッコキーワード サービス紹介資料
rakko
1
2.3M
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.1k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.4k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
52k
Paper Plane
katiecoart
PRO
0
46k
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