AppSyncでデータソースのバージョン管理!設定方法を解説😎

AppSyncでデータソースのバージョン管理!設定方法を解説😎

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

今日も AppSync について語ります!今回のテーマは、データソースのバージョン管理!ぜひここで AppSync の知識をアップデートしていってください。よろしくお願いいたします!

想定する読者

  • AppSync の知識をアップデートしたいヒト
  • AppSync でデータソースのバージョン管理をしたいヒト

はじめに

AppSync に限らず AWS のサービスはドキュメントを隅々まで読んでいると、「こんな機能があったんだ」といろいろな気づきがあります。データソースのバージョン管理も、人によってはそういった部類のひとつになるかと思います。

まだ知らない方も知っている方も、この記事で AppSync の機能をご確認していただければ幸いです。

バージョン管理の利点

AppSync では記事の執筆時点で、DynamoDB のバージョン管理のみがサポートされています。バージョン管理を有効にした場合は、以下の処理が AppSync によって自動的に実行されます。

・オブジェクトのバージョン管理メタデータを使用して項目を強化します。
・AWS AppSync ミューテーションで項目に加えられた変更を差分テーブルに記録します。
・「廃棄」を使用して、ベーステーブル内の削除済み項目を、設定可能な期間保持します。

競合の検出と同期

これにより競合の検出、競合の解決、同期が行いやすくなります。

バージョン管理の有効化

バージョン管理の有効化は GUI のコンソール画面ではできないので、AWS CLI や CloudFormation などで作成し有効化しましょう。今回は CloudFormation を用いた例をご紹介します。

Resources:
  DataSource:
    Type: AWS::AppSync::DataSource
    Properties:
      ApiId: !GetAtt GraphQLApi.ApiId
      Name: AppSyncDemoDataSource
      Description: This is demo.
      Type: AMAZON_DYNAMODB
      ServiceRoleArn: DYNAMODB_ROLE_ARN
      DynamoDBConfig:
        AwsRegion: ap-northeast-1
        TableName: AppSyncDemoTable
        Versioned: true
        DeltaSyncConfig:
          DeltaSyncTableName: !Ref DynamoDBTableDeltaSyncDeltaTable
          DeltaSyncTableTTL: 60
          BaseTableTTL: 0

  DynamoDBTableDeltaSyncDeltaTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: AppSyncDemoTable-deltasync
      AttributeDefinitions:
        - AttributeName: ds_pk
          AttributeType: S
        - AttributeName: ds_sk
          AttributeType: S
      KeySchema:
        - AttributeName: ds_pk
          KeyType: HASH
        - AttributeName: ds_sk
          KeyType: RANGE
      ProvisionedThroughput:
        ReadCapacityUnits: '5'
        WriteCapacityUnits: '5'
      TimeToLiveSpecification:
        AttributeName: "_ttl"
        Enabled: true

バージョン管理の有効化には、2つのことが必要です。

1つ目は、リソースタイプ「AWS::AppSync::DataSource」にて、パラメータ「Versioned」とパラメータ「DeltaSyncConfig」を含め、適切な値を記述することです。

これを記載すると、バージョン管理が有効化されます。「Versioned」は true にするだけですが、「DeltaSyncConfig」には3つのパラメータを指定しなければなりませんのでご注意ください。

2つ目は、差分を保存する DynamoDB のテーブルが必要となります。

これがなければバージョン管理ができないため、AppSync で DynamoDB データソースを作るのとは別に、DynamoDB のテーブルを1つ作成することが必須となります。なお、必要となるスキーマを作成しなければいけませんので、こちらもご注意ください。

次に上述したバージョン管理の有効化に必要な、2つのことをそれぞれ説明していきます。

「DeltaSyncTableName」のパラメータについて

「DeltaSyncTableName」にある3つのパラメータで、何を指定しなければいけないのかを説明いたします。

DeltaSyncTableName

差分テーブルとなる DynamoDB のテーブル名を指定してください。

DeltaSyncTableTTL

差分テーブルに項目を保持する分数を指定してください。

BaseTableTTL

削除済み項目をベーステーブルに保持する分数を指定してください。値を 0 にすると、削除された項目はすぐに完全に削除されます。

差分テーブルの作り方

差分テーブルには必要なスキーマがあります。これらを必ず作成してください。

ds_pk

データソース名と変更が発生した日付を連結した文字列を作成します。

ds_sk

ソートキーとして使用される文字列となります。

_ttl

差分テーブルから項目を削除する時刻のタイムスタンプです。

バージョン管理できているかどうか確認してみる

いくつかクエリを実行してみて DynamoDB のテーブルを確認してみましょう。差分テーブルにてバージョンが管理されていることがわかります。

データソースの DynamoDB テーブル
差分テーブル

関連記事

まとめ

バージョン管理の有効化にひと手間かかりますが、仕組みを知っていれば簡単に設定できるかと思います。要件でデータソースにバージョン管理が必要な場合は、こちらの記事を参考にしていただければ幸いです。

このブログでは、GraphQL や GraphQL のマネージドサービスである AWS AppSync の記事をどんどん公開しておりますので、ご興味のある方はほかの記事もご覧いただければと思います。

AppSync に関する開発は、お気軽にお問い合わせください。