GraphQL APIを利用してエラーを発生させ、そのときにAppSyncのログなどがどのような内容で出力されるのが確認してみました。
ソースコードは以下記事で作成したTodoアプリを利用し、
AppSyncのログ設定は以下で行なっています。

認証エラーを発生させた際のログ
IAM認証が必要なところ、API Keyを認証の手段として使用してエラーが発生した際のログです。
コンソールログ
POST https://xxx.appsync-api.ap-northeast-1.amazonaws.com/graphql 401
単にリクエスト先とステータスコード401(認証エラー)のみが確認できました。
レスポンス内容
{
"errors" : [ {
"errorType" : "UnauthorizedException",
"message" : "You are not authorized to make this call."
} ]
}
コンソールログよりは詳細なエラー内容が確認できました。
AppSyncのログ
関係場所のみ抜粋しました。
{
"logType": "RequestSummary",
"requestId": "xxx-c09a-4a1c-825a-c88d7326e1d4",
"graphQLAPIId": "xxx",
"statusCode": 401,
"latency": 21361907
}
Response Headers: {x-amzn-ErrorType=UnauthorizedException}
リクエストIDは確認できますが、レスポンス内容より詳細な情報はありませんでした。
スキーマエラーを発生させた際のログ
スキーマと一致しないリソースの作成を試みてエラーが発生した際のログとなります。
コンソールログ
App.js:29 Uncaught (in promise) {data: null, errors: Array(1)}
レスポンスの内容
{
"data": null,
"errors": [
{
"path": null,
"locations": null,
"message": "The variables input contains a field name 'hoge' that is not defined for input object type 'CreateTodoInput' "
}
]
}
エラーのレスポンスが返却され、定義していないフィールドが含まれていると怒られました。
ただし、ステータスコードは 200 でした。
AppSyncのログ
関係箇所のみ抜粋しました。
GraphQL Query: mutation CreateTodo($input: CreateTodoInput!, $condition: ModelTodoConditionInput) {
createTodo(input: $input, condition: $condition) {
id
name
description
createdAt
updatedAt
}
}
, Operation: null, Variables: {
"input": {
"hoge": "value"
}
}
{
"logType": "RequestSummary",
"requestId": "xxx-d0e7-499e-9036-a1f734870ea8",
"graphQLAPIId": "xxx",
"statusCode": 200,
"latency": 16854000
}
レスポンス内容以上に有用な情報はありませんでした。
なぜエラーでステータスコード200が返却されたのか
GrapuQL API はエラー時も 200 を返却するのが一般的だからと思われます。
200以外のステータスコードが返却されるのは、認証エラーくらいでしょうか。
まとめ
AppSyncを利用してのGraphQL APIのエラーのトラブルシューティングは、レスポンス内容が一番有用であることがわかりました。
AppSyncのログからもGraphQL APIリクエストの内容は確認できますが、レスポンスのようにエラーメッセージが確認できないため、AppSyncのログ確認はレスポンス内容が確認できなかったときに役立つ立ち位置でしょうか。