DynamoDB でネストされた JSON データを処理するように AWS AppSync スキーマを設定するにはどうすればよいですか?
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 テーブルから取得できるようになりました。
関連情報
関連するコンテンツ
- 質問済み 4ヶ月前lg...
- 質問済み 1年前lg...
- 質問済み 10ヶ月前lg...
- 質問済み 5年前lg...
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前
- AWS公式更新しました 2年前