JSON データをネストしている Amazon DynamoDB テーブルから、AWS AppSync スキーマで応答を取得する必要があります。どうすればそれができますか?
簡単な説明
DynamoDB にネストされた JSON データを処理する AWS AppSync スキーマを取得するには、次の手順を実行します。
- ネストされた JSON データ項目を DynamoDB テーブルに追加します。
- AWS AppSync API を作成してデータソースを添付します。
- ネストされた JSON スキーマを AWS AppSync API に設定します。
- getItems クエリにリゾルバーを添付します。
- 新しいテストクエリを作成します。
重要: ネストされた JSON データにフィールド名がマッピングされていない場合、AWS AppSync スキーマは DynamoDB への応答で NULL 値を渡します。
解決方法
ネストされた JSON データ項目を DynamoDB テーブルに追加する
1. Amazon DynamoDB コンソールを開きます。
2. [Create table] を選択します。
3. [Table name] フィールドにわかりやすい名前を入力します。
4. [Partition key] フィールドに、フィールド名を入力します。例えば、「id」と入力します。
5. [Create table] を選択します。新しいテーブルがコンソールの [Tables] ページに表示されます。
6. [Name] 列で、新しいテーブルの名前を選択します。テーブルの「Overview」ページが開きます。
7. [Actions] ドロップダウンリストをクリックします。次に、[Create item] を選択します。[Create item] ページが開きます。
8. [JSON] ボタンをクリックします。
9. 次のネストされた JSON レコードをコピーして JSON エディタに貼り付け、[Save] をクリックします。
重要: JSON エディタの事前入力されたコンテンツは、ネストされた JSON レコードで必ず上書きしてください。
ネストされた JSON レコードの例
{
"id": "123",
"product": {
"model": {
"property": {
"battery": "li-ion",
"device": "iOT-Device",
"pressure": "1012",
"up_time": "02:12:34"
}
}
},
"status": "In-Stock"
}
詳細については、「テーブルの作成」を参照してください。
AWS AppSync API を作成してデータソースを添付する
1. AWS AppSync コンソールを開きます。
2. [API を作成] を選択します。
3. [Getting Started] ページの [Customize your API or import from Amazon DynamoDB] で、[Build from scratch] を選択します。
4. [Start] を選択します。
5. [API name] フィールドに API の名前を入力します。
6. [Create] をクリックします。
7. 左ナビゲーションペインで、[Data Sources] を選択します。
8. [Create data source] を選択します。
9. [New Data Source] ページの [Create new Data Source] で、[Data source name] にわかりやすい名前を入力します。[Data source type] (データソースタイプ) で、[Amazon DynamoDB table] (Amazon DynamoDB テーブル) を選択します。[Region] (リージョン) で、目的の DynamoDB テーブルを含むリージョンを選択します。[Table name] (テーブル名) で、作成したテーブルを選択します。
重要: 他のすべてのオプションはデフォルトのままにします。
10. [Create] をクリックします。
詳細については、「Attaching a data source 」を参照してください。
ネストされた JSON スキーマを AWS AppSync API に設定する
1. AWS AppSync コンソールを開きます。
2. ナビゲーションペインで、[スキーマ] を選択します。
3. 次に記すネストされた JSON スキーマをコピーして JSON エディタに貼り付け、[Save Schema] をクリックします。
重要: JSON エディタの事前入力されたコンテンツは、ネストされた JSON スキーマで上書きしてください。
ネストされた JSON スキーマの例
type Query {
getItems(id: String!): allData
}
type allData {
id: String!
product: toModel
status: String
}
type items {
battery: String
device: String
pressure: String
up_time: String
}
schema {
query: Query
}
type toModel {
model: toProperties
}
type toProperties {
property: items
}
詳細については、「Designing your schema」 を参照してください。
getItems クエリにリゾルバーを添付する
1. AWS AppSync コンソールを開きます。
2. API の [Schema] ページの [Resolvers] で、[Query] までスクロールします。
注: または、[Filter types] フィールドに [ Query] と入力することもできます。
3. getItems(...): allData の横にある [Resolver] で [Attach] を選択します。
4. [Create new Resolver] ページの [Data source name] で、作成した DynamoDB テーブルの名前を選択します。
重要: DynamoDB GetItem オペレーションのデフォルトマッピングテンプレートを変更しないでください。
5. [Save Resolvers] を選択します。
リクエストマッピングテンプレートの例
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
}
}
レスポンスマッピングテンプレートの例
$util.toJson($ctx.result)
詳細については、「Configuring resolvers」 を参照してください。
新しいテストクエリを作成する
1. AWS AppSync コンソールを開きます。
2. 左のナビゲーションペインで、[Queries] をクリックします。
3. API の [Queries] ページのクエリエディタで次のクエリをコピーして貼り付けます。
テストクエリの例
query getItem {
getItems(id:"123") {
id
product{
model{
property{
pressure
device
battery
up_time
}
}
}
status
}
}
4. テストクエリを実行するには、再生アイコンをクリックするか、Ctrl/Cmd + Enter キーを押します。
テストクエリ結果の例
{
"data": {
"getItems": {
"id": "123",
"product": {
"model": {
"property": {
"pressure": "1012",
"device": "iOT-Device",
"battery": "li-ion",
"up_time": "02:12:34"
}
}
},
"status": "In-Stock"
}
}
}
AWS AppSync GraphQL オペレーションを通じて、ネストされた JSON データを Amazon DynamoDB テーブルから取得できるようになりました。
関連情報
Amazon DynamoDB でサポートされるデータ型と命名規則
getPost リゾルバー (DynamoDB GetItem) のセットアップ