こんにちは!
今日も 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」にある3つのパラメータで、何を指定しなければいけないのかを説明いたします。
差分テーブルとなる DynamoDB のテーブル名を指定してください。
差分テーブルに項目を保持する分数を指定してください。
削除済み項目をベーステーブルに保持する分数を指定してください。値を 0 にすると、削除された項目はすぐに完全に削除されます。
差分テーブルには必要なスキーマがあります。これらを必ず作成してください。
データソース名と変更が発生した日付を連結した文字列を作成します。
ソートキーとして使用される文字列となります。
差分テーブルから項目を削除する時刻のタイムスタンプです。
いくつかクエリを実行してみて DynamoDB のテーブルを確認してみましょう。差分テーブルにてバージョンが管理されていることがわかります。
バージョン管理の有効化にひと手間かかりますが、仕組みを知っていれば簡単に設定できるかと思います。要件でデータソースにバージョン管理が必要な場合は、こちらの記事を参考にしていただければ幸いです。
このブログでは、GraphQL や GraphQL のマネージドサービスである AWS AppSync の記事をどんどん公開しておりますので、ご興味のある方はほかの記事もご覧いただければと思います。
AppSync に関する開発は、お気軽にお問い合わせください。