AWS AppSync でのトラブルシューティングと一般的な誤り - AWS AppSync GraphQL

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS AppSync でのトラブルシューティングと一般的な誤り

このセクションでは、いくつかの一般的なエラーとそのトラブルシューティング方法について説明します。

DynamoDB キーのマッピングが正しくない

GraphQL 処理が次のエラーメッセージを返した場合、リクエストマッピングテンプレートの構造が Amazon DynamoDB のキーの構造と一致していない可能性があります。

The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code

たとえば、DynamoDB テーブルに "id" というハッシュキーがあり、テンプレートが次の例のように "PostID" を指示している場合、"id""PostID" と一致しないため上記のようなエラーになります。

{ "version" : "2017-02-28", "operation" : "GetItem", "key" : { "PostID" : $util.dynamodb.toDynamoDBJson($ctx.args.id) } }

リゾルバーがない

クエリといった GraphQL 処理を実行して null レスポンスを受信した場合は、リゾルバーを設定していない可能性があります。

たとえば、getCustomer(userId: ID!): フィールドを定義するスキーマをインポートし、このフィールドにリゾルバーを設定しなかった場合、getCustomer(userId:"ID123"){...} などのクエリを実行すると、次のようなレスポンスを受信します。

{ "data": { "getCustomer": null } }

マッピングテンプレートのエラー

マッピングテンプレートが正しく設定されていない場合、errorTypeMappingTemplate の GraphQL レスポンスを受信します。message フィールドには、マッピングテンプレートに問題があることが示されます。

たとえば、リクエストマッピングテンプレートに operation フィールドがない場合、または operation フィールド名が正しくない場合、次のようなレスポンスを受信します。

{ "data": { "searchPosts": null }, "errors": [ { "path": [ "searchPosts" ], "errorType": "MappingTemplate", "locations": [ { "line": 2, "column": 3 } ], "message": "Value for field '$[operation]' not found." } ] }

戻り値の型が正しくない

データソースからの戻り値の型は、スキーマに定義したオブジェクトの型と一致している必要があります。一致しない場合、次のような GraphQL エラーが表示されます。

"errors": [ { "path": [ "posts" ], "locations": null, "message": "Can't resolve value (/posts) : type mismatch error, expected type LIST, got OBJECT" } ]

このような状況は、たとえば次のようなクエリ定義により発生します。

type Query { posts: [Post] }

これは [Posts] オブジェクトのリストを期待します。たとえば次のように、Node.JS に Lambda 関数があるとします。

const result = { data: data.Items.map(item => { return item ; }) }; callback(err, result);

result はオブジェクトであるため、エラーがスローされます。result.data へのコールバックを変更するか、リストを返さないようにスキーマを変更する必要があります。

無効なリクエストの処理

AWS AppSync が (無効な構文などの不適切なデータが原因で) フィールドリゾルバーにリクエストを処理および送信できない場合、レスポンスペイロードは、null に設定された値と関連するエラーを含むフィールドデータを返します。