AWS AppSync で GraphQL API 作成メモです。
ウィザードに沿って、DynamoDB をデータソースにして、API キーでのアクセスならサクッとできてしまいました。
GraphQL API 作成
AWS AppSync で API 作成
AppSync サービスを検索して、 API を作成 をクリック。

ウィザードで作成
ウィザードで作成が選択されているので、そのまま右上の 開始 をクリック。

モデルを作成
DynamoDB のテーブルの新規作成処理になります。
テーブル名とカラムを決めて Create をクリック。

リソースを作成
API 名称を確定して 作成 をクリック。

クエリを作成、検証、およびテスト
クエリメニューを利用して、データの挿入や呼び出しなどを簡単に行うことができます。

Documentos
右側中程の Documentos をクリックすると、利用できるクエリが確認できます。
GraphQL では以下の3種類のクエリが発行できます。
- query : レコードの select ができます
- mutation : レコードの insert / delete / update ができます
- subscription : レコードが更新された場合に通知を受け取ることができます
mutation
mutation を利用して、データの作成を行います。
デフォルトで createMyModelType クエリが作成されているので、 ▶ - createMyModelType をクリックして実行します。

### request
mutation createMyModelType($createmymodeltypeinput: CreateMyModelTypeInput!) {
createMyModelType(input: $createmymodeltypeinput) {
id
title
}
}
$createmymodeltypeinput には、クエリ変数の内容が入ります。
具体的には、title に Hello, world が設定されていることが確認できます。
{
"createmymodeltypeinput": {
"title": "Hello, world!"
}
}
右側のペインに実行結果が表示されます。
### respons
{
"data": {
"createMyModelType": {
"id": "e65f3628-947d-4e53-a0d2-125cce675132",
"title": "Hello, world!"
}
}
}
DynamoDB リソースを確認するとデータが挿入されていることが確認できます。

query
query を利用して、データの取得を行います。
デフォルトで listMyModelTypes クエリが作成されているので、 ▶ - listMyModelTypes をクリックして実行します。

### request
query listMyModelTypes {
listMyModelTypes {
items {
id
title
}
}
}
右側のペインに実行結果が表示されます。
### respons
{
"data": {
"listMyModelTypes": {
"items": [
{
"id": "e65f3628-947d-4e53-a0d2-125cce675132",
"title": "Hello, world!"
}
]
}
}
}
API KEY
エンドポイントとなる API URL や API KEY は、設定メニューで確認できます。

curl を利用して、呼び出す場合の例です。
$API_KEY と $API_URL は設定メニューの内容で置き換えてください。
$ curl -XPOST -H "Content-Type:application/graphql" -H "x-api-key:$API_KEY" -d '{ "query": "query { listMyModelTypes { items { id title } } }" }' $API_URL | jq .
{
"data": {
"listMyModelTypes": {
"items": [
{
"id": "e65f3628-947d-4e53-a0d2-125cce675132",
"title": "Hello, world!"
}
]
}
}
}
所感
最初に書いたとおりウィザードに沿って、DynamoDB をデータソースにして、API キーでのアクセスならサクッとできてしまいます。
API キー方式なので、クローズドな環境向けになりますが、社内向けなどのバックエンドの処理を作るのであればすぐにできそうな雰囲気をつかめました。
Cognito や OpenID Connect を利用してして認証を行うこともできたので、パブリックな API の場合はその辺りとの連携が必須になりそうです。
マネージドで簡単な分、実装が見えないので不安もありますが、裏では Lambda とかを利用しているんだろうか...?
アクセス数の制限事項やスケール特性など、大規模利用の場合は調べる必要がありそうです。