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

最終更新日: 2021 年 1 月 11 日

AWS AppSync スキーマで、ネストされた JSON データを含む Amazon DynamoDB テーブルから応答を取得する必要があります。どうすればそれができますか?

簡単な説明

DynamoDB でネストされた JSON データを処理する AWS AppSync スキーマを取得するには、次の手順を実行します。

  • ネストされた JSON データ項目を DynamoDB テーブルに追加します。
  • AppSync API を作成してデータソースをアタッチします。
  • AppSync API で、ネストされた JSON スキーマを設定します。
  • getItems クエリにリゾルバーをアタッチします。
  • 新しいテストクエリを作成します。

重要: ネストされた JSON データにフィールド名がマッピングされていない場合、AWS AppSync スキーマは DynamoDB への応答で NULL 値を渡します。

解決方法

ネストされた JSON データ項目を DynamoDB テーブルに追加する

1.    AWS DynamoDB コンソールを開きます。

2.    [Create table] を選択します。

3.    [Table name] フィールドにわかりやすい名前を入力します。

4.    [Primary key] フィールドにフィールド名を入力します。たとえば、「Id」と入力します。

5.    [Create] をクリックします。

6.    [Item] タブを選択し、[Create item] を選択します。

7.    [Create item] ダイアログボックスの左上のドロップダウンリストから [Text] を選択します。

注意: [Tree] はドロップダウンリストのデフォルトの選択です。

8.    次のネストされた JSON レコードをコピーしてテキスト項目に貼り付け、[Save] を選択します。

重要: テキストボックスに入力されている内容をネストされた JSON レコードで上書きしてください。

ネストされた JSON レコードの例

{
    "id": "123",
    "product": {
        "model": {
            "property": {
                "battery": "li-ion",
                "device": "iOT-Device",
                "pressure": "1012",
                "up_time": "02:12:34"
            }
        }
    },
    "status": "In-Stock"
}

注意: 詳細については、テーブルの作成を参照してください。

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] をクリックします。

注記: 詳細については、「データソースをアタッチする」を参照してください。

ネストされた JSON スキーマを AppSync API で構成する

1.    AWS AppSync コンソールの左のナビゲーションペインで、[Schema] を選択します。

2.    次のネストされた JSON スキーマをコピーしてテキストボックスに貼り付け、[Save Schema] を選択します。

重要: テキストボックスに入力されている内容をネストされた 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
}

注意: 詳細については、「スキーマの設計」を参照してください。

getItems クエリにリゾルバーをアタッチする

1.    AWS AppSync コンソールで、API の [Schema] ページにある [Resolvers] の [Query] までスクロールします。または、[File types] フィールドに 「Query」と入力します。

2.    getItems(...): allData の横にある [Resolver] で [Attach] を選択します。

3.    [Create new Resolver] ページの [Data source name] で、前に作成した DynamoDB テーブルの名前を選択します。

重要:DynamoDB getItem オペレーションのデフォルトマッピングテンプレートを変更しないでください。

4.    [Save Resolvers] を選択します。

リクエストマッピングテンプレートの例

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "ID": $util.dynamodb.toDynamoDBJson($ctx.args.ID),
    }
}

レスポンスマッピングテンプレートの例

$util.toJson($ctx.result)

注意: 詳細については、「リゾルバーの設定」をご参照ください。

新しいテストクエリを作成する

1.    AWS AppSync コンソールの左のナビゲーションペインで、[Queries] を選択します。

2.    API の [Queries] ページのクエリエディタで次のクエリをコピーして貼り付けます。

テストクエリの例

query getItem {
    getItems(id:"123") {
      id
      product{
          model{
            property{
            pressure 
            device
            battery
            up_time
          }
        }
      }
      status
    }
  }

3.    再生アイコンを選択するか、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"
    }
  }
}

このようにして、AppSync GraphQL オペレーションを通じて、ネストされた JSON データを Amazon DynamoDB テーブルから取得できます。


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


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