omuronの備忘録

個人的な備忘録

AWS AppSync で GraphQL API 作成

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

GraphQL API 作成

AWS AppSync で API 作成

AppSync サービスを検索して、 API を作成 をクリック。

f:id:omron:20200809123626p:plain

ウィザードで作成

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

f:id:omron:20200809123853p:plain

モデルを作成

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

f:id:omron:20200809124011p:plain

リソースを作成

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

f:id:omron:20200809124445p:plain

クエリを作成、検証、およびテスト

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

f:id:omron:20200809125016p:plain

Documentos

右側中程の Documentos をクリックすると、利用できるクエリが確認できます。
GraphQL では以下の3種類のクエリが発行できます。

  • query : レコードの select ができます
  • mutation : レコードの insert / delete / update ができます
  • subscription : レコードが更新された場合に通知を受け取ることができます

mutation

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

f:id:omron:20200809125801p:plain

### request
mutation createMyModelType($createmymodeltypeinput: CreateMyModelTypeInput!) {
  createMyModelType(input: $createmymodeltypeinput) {
    id
    title
  }
}

$createmymodeltypeinput には、クエリ変数の内容が入ります。
具体的には、titleHello, world が設定されていることが確認できます。

{
  "createmymodeltypeinput": {
    "title": "Hello, world!"
  }
}

右側のペインに実行結果が表示されます。

### respons
{
  "data": {
    "createMyModelType": {
      "id": "e65f3628-947d-4e53-a0d2-125cce675132",
      "title": "Hello, world!"
    }
  }
}

DynamoDB リソースを確認するとデータが挿入されていることが確認できます。

f:id:omron:20200809130626p:plain

query

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

f:id:omron:20200809144628p:plain

### 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 は、設定メニューで確認できます。

f:id:omron:20200809145306p:plain

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 とかを利用しているんだろうか...?
アクセス数の制限事項やスケール特性など、大規模利用の場合は調べる必要がありそうです。