DynamoDB http://52.196.2.68 ITに関する様々な課題を解決します! Thu, 30 May 2024 23:16:30 +0000 ja hourly 1 https://wordpress.org/?v=6.7.5 http://52.196.2.68/wp-content/uploads/siteIcon512-150x150.png DynamoDB http://52.196.2.68 32 32 AppSyncのウィザードから作成したDynamoDBのIDフィールド http://52.196.2.68/blog/appsync%e3%81%ae%e3%82%a6%e3%82%a3%e3%82%b6%e3%83%bc%e3%83%89%e3%81%8b%e3%82%89%e4%bd%9c%e6%88%90%e3%81%97%e3%81%9fdynamodb%e3%81%aeid%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89/ Thu, 30 May 2024 23:13:37 +0000 https://f3i.biz/?p=6292  GraphQLでDynamoDBにクエリが上手くいかなった時があったのでメモ。今は改善されているのかな?  AppSyncのウィザードで作成する場合、モデルフィールドの設定においてタイプがIDとあります。実際タイプをI […]

The post AppSyncのウィザードから作成したDynamoDBのIDフィールド first appeared on アスキー(asQii).

]]>
 GraphQLでDynamoDBにクエリが上手くいかなった時があったのでメモ。今は改善されているのかな?

 AppSyncのウィザードで作成する場合、モデルフィールドの設定においてタイプがIDとあります。実際タイプをIDにしてDynamoDBのパーティションキーに設定するとクエリで取得できます。この場合でもDynamoDBのパーティションキーは「項目名(String)」と表示されています。
 DynamoDBコンソールから作成(デフォルト設定、カスタマイズ設定でも同じ)した場合、パーティションキーのタイプには数値、バイナリ、文字列しかなく、文字列で作成すると同様に「項目名(String)」となります。しかし、この場合クエリからは以下のようなエラーとなります。
 The provided key element does not match the schema (Service: DynamoDb, Status Code: 400, Request ID:〜)
IDとStringの違いと思うのですが、ウィザードでは可能なDynamoDBのタイプIDを、直接DynamoDB作成で指定する方法がわかりませんでした。ウィザードで作成したテーブルで運用できているので、以下をサポートへ質問しました。
————————————————————————–
AppSyncのウィザードで作成する場合、モデルフィールドの設定においてタイプがIDとあります。タイプをIDにしてDynamoDBのパーティションキーに設定してもDynamoDBのパーティションキーは「項目名(String)」と表示されています。違いは何でしょうか?
————————————————————————–

回答
 AppSync ではオブジェクトタイプのフィールドのスカラー型として、ドキュメント [1] の型を定義しております。その中でも ID 型はオブジェクトの一意な識別子を表しております。
[1]AWS AppSync のスカラー型 – AWS AppSync
 https://docs.aws.amazon.com/ja_jp/appsync/latest/devguide/scalars.html
 まとめると「IDはオブジェクトの一意な識別子。このスカラーは、String のようにシリアル化されますが、人間が読めることは意図していない、DynamoDB ではパーティションキーとソートキーは文字列、数値、またはバイナリとして定義される必要がある。そのため、AppSync における ID 型は DynamoDB では String 型として格納されている。」

[2] データ型 – Amazon DynamoDB でサポートされるデータ型と命名規則 – Amazon DynamoDB
 https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html#HowItWorks.DataTypes

 まとめると「テーブルまたはセカンダリインデックスを作成するときは、各プライマリキー属性 (パーティションキーとソートキー) の名前とデータ型を指定する必要があり、各プライマリキー属性は、文字列、数値、またはバイナリとして定義する必要がある。」

 ちょっと消化不良なのですが、特に問題は起こっていないので良しとしました。

The post AppSyncのウィザードから作成したDynamoDBのIDフィールド first appeared on アスキー(asQii).

]]>