Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

AppSync入門

はじめに

AppSync初心者向けの操作解説します。
この記事ではコンソール操作とcurl実行まで。

作る

とりあえず「ウィザードで作成」ではじめてみます。

スクリーンショット 2020-12-11 17.51.30.png

すべてデフォルトの状態で進めていくとAppSyncができあがっています。API名はデフォルトで「My AppSync App」となっています。
また同時にDynamoDBも「MyModelTypeTable」というテーブルが新規で作成されています。

デフォルトでDBもセットで作ってくれるようですね。

スキーマ画面の見方

作成したAppSyncに入ると左ペインに「スキーマ」というのがあります。(いっつも思うけど、ペインってなんだよ)
クリックすると下のような画面がでると思います。

スクリーンショット 2020-12-11 17.57.17.png

ここがまぁわかりにくいのですが、デフォルトでいろいろと書かれているのが確認できてると思います。
APIの命令郡なのかなぁと思っています。

「input」と「type」という宣言詞っぽいものがみえます。
・inputは変数のオブジェクトを定義するものです。
・typeは命令を定義するものです。

typeで定義されているものは大きく3つあるようです。

命令 意味
query 問合せ処理(GETっぽい)
mutation 登録、削除、更新(POSTっぽい)
subscription リアルタイム通信用?MQTTとか?

mutation

Mutationの書き方をみてみましょう。

type Mutation {
    createMyModelType(input: CreateMyModelTypeInput!): MyModelType
    updateMyModelType(input: UpdateMyModelTypeInput!): MyModelType
    deleteMyModelType(input: DeleteMyModelTypeInput!): MyModelType
}

ここでは3つの命令(create,update,delete)を作成しています。

各セットには(input: CreateMyModelTypeInput!)みたいな文字があります。
これは以下(⬇️)の定義のことを示すようで、インプットに「title」というString型の変数?カラム名を使うようです。

input CreateMyModelTypeInput {
    title: String
}

これは実際にコンソール上でクエリを作る工程でイメージがつくとおもいます。

もうひとつポイントがあります。
3つの命令の文末に「MyModelType」というものが記載されています。
これは以下(⬇️)の定義のことを示すようで、daynamoのテーブル構造を示しているようです。
なので「createMyModelType」を実行する場合は、下記の2つのパラメータを定義することができます。

type MyModelType {
    id: ID!
    title: String
}

ちなみに各スキーマ内に記述されている「!」マークは必須項目を示します。

query

Queryをみてみましょう。

type Query {
    getMyModelType(id: ID!): MyModelType
    listMyModelTypes(filter: TableMyModelTypeFilterInput, limit: Int, nextToken: String): MyModelTypeConnection
}

ここでは2つの命令を作っています。

ここでも文末にオブジェクトが記述されています。

listMyModelTypesではnextTokenという指定がありますが、どうやらリレーションやページ分割といったやや高度な設定になるらしい。
https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/using-your-api.html

listMyModelTypesでFilterと定義されている箇所も別オブジェクトを参照している。

リソルバの設定

ここはプチハマりしたのですが、リゾルバの設定について触れておきます。
下記の画面右側にresolversと記載されているのがあります。
ここにはSchema(画面左)で記述した命令が表示されています。

スクリーンショット 2020-12-11 17.57.17.png

ためしにmutationをコピペして「createMyModelType2」をつくってみましょう。

スクリーンショット 2020-12-11 18.59.17.png

すると右側にはcreateMyModelType2が表示されています。
ほかにMutationたちはResolverに「MyModelTypeTable2」と書かれています。(デフォルトだと2はついてないのですが、私のサンプル画面だとついちゃってます)
これはDynamoDBのテーブルになります。

なので、コピペしてつくったcreateMyModelType2にも同様のテーブルを付与することができますし、
「データソース」で追加した既存テーブルを使うことができます。
つまりMutationと紐づくテーブルは1:1のようです。

クエリしてみる

AppSyncにはコンソール上からスキーマで定義した命令を実行することが可能です。
やってみましょう。

まず空っぽのDynamoDBにデータを登録してみます。

スクリーンショット 2020-12-11 19.10.54.png

こんな感じで実行します。
Mutation選んで、createMyModelTypeを選んでtitleに「testdata1」といれています。
すべて左側のプルダウンしたのエリアで操作するこで、コードっぽいものが生成されました。

右側には実行結果がでてますね。IDは自動で付与されます。

ちゃんとDynamoにも入ってました。(ゴミデータがあってみづらいくてすいません)
スクリーンショット 2020-12-11 19.19.12.png

では、次にこの登録したデータを参照してみたいと思います。

スクリーンショット 2020-12-11 19.15.05.png

はい。こんな感じでとれますね。ID指定は必須なんでちょっと長いですが、コピペしました。

ちなみに listMyModelTypesでフィルター検索も試してみます。

スクリーンショット 2020-12-11 19.16.24.png

filterの箇所に検索条件っぽいものがあったので、今回「beginWith」にIDの頭3文字をいれて検索してみました。
インデックスが数字だったらここで不等式で検索とかできる感じですね。

curlからも実行してみる。

ということで、AppSyncのコンソール上では一応Dynamoに登録とか参照ができましたね。
実際にAPIとして操作していくことになるので、まずは初歩のCurlあたりを試してみましょう

AppSyncのAPIURlは「設定」から確認できます。

スクリーンショット 2020-12-11 19.21.38.png

APIキーめっちゃ表示されてますが、すぐに消すので、、、、

AppSyncの認証認可はいくつか用意されていますが、APIキーはあまり商用環境ではおすすめできないのでテストだけに留めてくれればと思います。
ちなみにAPIキーはデフォ有効期限が1週間、最大365日でexpireします。
実際はCognito連携とかが多いかもですね。
参考:https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/security.html

ということでAPI URLとAPIキーがそろったので実行してみます。

curl -XPOST -H "Content-Type:application/graphql" -H "x-api-key:da2-muv7xqwvurebzbknzk4e4uuw232" -d '{ "query": "query {getMyModelType(id:\"3aacd1c9-e0fc-402f-b923-83a45a6f8b54\"){ title } } " }' https://byink3pajrfl7fmtz2eppnmfhm.appsync-api.ap-northeast-1.amazonaws.com/graphql

まぁ、ちょっと細かい解説はおいておきますが、こんな感じでcloud9とかvscodeから実行すれば値がとれます。

まとめ

API-GatewayとLamdbaつかうより楽だけど、スキーマがまだちゃんと理解できていないですね。。
次回はAmplifyからcognito認証でたたいてみようと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?