この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWS AppSyncを触ってみました
AWS re:Invent 2017で発表された、モバイルアプリのための期待のマネージドGraphQLサービス「AWS AppSync」。現在はパブリックプレビューとして提供されており、事前登録制となっています(2017年12月15日現在)。
- AWS AppSync – GraphQL を基盤として、データに基づいたアプリケーションをオフライン機能でリアルタイムに構築する
- AWS AppSyncの紹介 – リアルタイムおよびオフライン機能を備えたデータ駆動型アプリケーションの構築 | Amazon Web Services ブログ
プレビューが通過したので早速触ってみました。
APIを作成する
まず、マネジメントコンソールのサービス一覧から「AWS AppSync」を探します。モバイルサービスのカテゴリにあります。キーワード検索するとすぐ見つけられます。
「Create API」を選びます。
API nameは「ExampleAPI」、Select a template or custom schemaは「Sample schema」を設定します。Sample schemaでは、AppSyncのAPIに加えて、データソースとなるDynamoDB、および必要となるIAM Roleが自動生成されます。
また、Sample schemaでは下記のようなスキーマが定義されます。
type Comment {
# The id of the comment's parent event.
eventId: ID!
# A unique identifier for the comment.
commentId: String!
# The comment's content.
content: String!
# The comment timestamp. This field is indexed to enable sorted pagination.
createdAt: String!
}
type CommentConnection {
items: [Comment]
nextToken: String
}
type Event {
id: ID!
name: String
where: String
when: String
description: String
# Paginate through all comments belonging to an individual post.
comments(limit: Int, nextToken: String): CommentConnection
}
type EventConnection {
items: [Event]
nextToken: String
}
type Mutation {
# Create a single event.
createEvent(
name: String!,
when: String!,
where: String!,
description: String!
): Event
# Delete a single event by id.
deleteEvent(id: ID!): Event
# Comment on an event.
commentOnEvent(eventId: ID!, content: String!, createdAt: String!): Comment
}
type Query {
# Get a single event by id.
getEvent(id: ID!): Event
# Paginate through events.
listEvents(limit: Int, nextToken: String): EventConnection
}
type Subscription {
subscribeToEventComments(eventId: String!): Comment
@aws_subscribe(mutations: ["commentOnEvent"])
}
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
作成が終わると、APIにアクセスするためのいくつかの情報が閲覧できます。
サンプルアプリを動かしてみる
今回はJavaScript(React)のサンプルアプリから試してみたいと思います。手順はAPI詳細画面の一番下に記載されています。
ここから、予め AppSync.js
をダウンロードしておきます。
次に、サンプルアプリのプロジェクトをダウンロードします。なお、サンプルアプリはGitHubで公開されています。
なお、こちらからも参照できます。
次のコマンドでcloneします。
$ git clone git@github.com:aws-samples/aws-mobile-appsync-events-starter-react.git
次に、先ほどダウンロードしておいた AppSync.js
を src
ディレクトリの直下に置き、ライブラリをインストールします。
$ yarn
次に、サンプルアプリを実行します。
$ yarn start
下図のような画面が表示されます。
データを格納する
サンプルアプリは「イベント情報を共有するサービス」として作られています。イベントを作成したり、作成済みのイベントにコメントを投稿できたりします。
アプリ起動画面はイベント一覧です。やけに大きめな「Create new Event」ボタンを押します。
Name、When、Where、Descriptionを入力します。
作成できました!
イベントの詳細画面から、コメントを投稿することもできます!
格納されたデータをクエリで確認する
アプリで登録したデータが格納されているか、クエリを実行して確認します。マネジメントコンソールにはGraphQLのクエリのエディタが提供されており、こちらから実行もできます。
次のようなクエリを書きました。
query {
listEvents(limit: 100) {
items {
id
name
when
where
description
}
}
}
「Docs」を押すと、スキーマを元に生成されたAPIドキュメントを閲覧できます。非常に分かりやすいですね。
先ほどアプリから登録したイベントが検索できました!
DynamoDBにも格納されています。
GraphQLに詳しくなくても始められる!
「AppSyncを使うためには、まずはGraphQLを覚えないと」という先入観がありましたが、マネジメントコンソールも非常に分かりやすく作られているため「試しながら覚えられる!」という印象を受けました。今後もドキュメントを読みながら色々触れてみたいと思います。
参考
本記事の執筆にあたり、下記の公式情報を参考にしました。本記事とあわせてお読みいただくと、より理解できると思います。