DynamoDB でネストされた JSON データを処理するように AWS AppSync スキーマを設定するにはどうすればよいですか。

最終更新日: 2022 年 3 月 3 日

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] を選択します。
[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 テーブルから取得できるようになりました。


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?