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

最終更新日: 2022 年 10 月 7 日

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