Amazon Web Services ブログ

Amazon DynamoDBによるコールドストレージへのアーカイブ

Amazon DynamoDBはフルマネージド型のNoSQLデータベースであり、高速で予測可能なパフォーマンスとシームレスなスケーラビリティを提供します。さまざまな業界のお客様が最適なデータベースとしてDynamoDBを利用しています。

多くのEdTech企業が、試験の点数や講座の進捗状況を追跡するための永続的なデータストアとしてDynamoDBを利用しています。学生が進級していくにつれて、特定の教科の教材との関わり方や試験の得点が変化します。授業や課程を修了すると、学生が過去の教育リソースにアクセスする頻度は大幅に減りますが、コンプライアンスまたは契約上の義務により、EdTech企業は長期間(多くの場合5年以上)にわたって学生が利用できるようにしておく必要があります。このような、データアクセスパターンは教育分野にとどまらず、さまざまな業界のお客様に共通する課題です。そのため、DynamoDBのデータアクセシビリティを維持しつつコスト効率の良いストレージソリューションへの需要が高まっています。

DynamoDBはデータをテーブルに整理し、標準とStandard-Infrequent Access (標準 – IA)という 2 つの異なるストレージクラスを提供します。標準テーブルクラスはデフォルト設定で、一般的にほとんどのワークロードに適しています。一方で、標準-IA テーブルクラスは、アクセス頻度の低いデータを格納するテーブル専用に設計されています。標準-IAテーブルクラスでは、保存されているデータのギガバイト (GB) あたりのコスト効率が高まります。データが古くなり、アクセス頻度が低くなるにつれて、標準テーブルクラスから標準-IA テーブルクラスへの移行はコスト効率の高い戦略になります。組織は、標準テーブルクラスと同じパフォーマンスと統合機能を確保しながら、ストレージコストを節約できます。このアプローチにより、企業は DynamoDBのストレージ機能を効率的に利用しながら、コスト最適化とデータ可用性のバランスを取ることができます。ストレージがコストの約50%以上を占める DynamoDBテーブルを所有しているお客様は、データを標準-IAテーブルクラスに移行することを検討する必要があります。

DynamoDB標準テーブルクラスと標準-IAテーブルクラスの詳細な料金例については、料金ページのさまざまなテーブルクラスを使用した例をご覧ください。

このブログでは、Amazon DynamoDB StreamsDynamoDB 有効期限 (TTL)、およびAWS Lambdaを使用して標準テーブルクラスから標準-IAテーブルクラスにデータをアーカイブするためのカスタマイズされたソリューションを作成するためのプロセスについて説明します。

ソリューション概要

DynamoDB StreamsとLambdaの機能を組み合わせることで、標準テーブルクラスに加えられた変更をキャプチャし、それらの変更に基づいた特定のアクションをトリガーすることができます。TTLを使用すれば、データが一定の経過時間に達したときに標準テーブルクラスで自動的に期限切れとしてマークし、期限切れのデータを含むレコードをDynamoDB Streamsに生成することができます。その後、Lambdaのイベントフィルタリングにより、DynamoDB Streamsからの期限切れデータイベントのみを選択し処理することができます。このプロセスにより、不要な処理やコストを回避しながら、期限切れデータを効率的に処理することで、標準-IAテーブルクラスに移行することができます。

次の図はこのソリューションのアーキテクチャを示しています。

ワークフローには次のステップが含まれます:

  1. DynamoDB TTLは、アイテム属性に基づいて期限切れのアイテムを標準テーブルクラスから削除します。
  2. DynamoDB Streamsは、期限切れのアイテムを含むストリームレコードを生成します。
  3. Lambdaは DynamoDB Streamsからの削除イベントを処理します。Lambdaイベントフィルタリングでは、Lambdaは DynamoDB TTLからの削除イベントによってのみ呼び出されます。
  4. データは標準-IA テーブルクラスに書き込まれます。

DynamoDB TTL を使用したデータの削除

DynamoDB TTLは、DynamoDB内でデータのライフサイクルを管理する便利な方法を提供します。TTLを使用すると、テーブル内の各アイテムにタイムスタンプを割り当てて、そのアイテムがいつ期限切れになったか、不要になったかを示すことができます。指定したタイムスタンプが経過すると、DynamoDBはアイテムをテーブルから自動的に削除するため、手動で削除する必要がなくなります。TTLの主な利点は、運用上のオーバーヘッドなしに期限切れのアイテムや不要なアイテムを削除することで、保存されているデータ量を減らすことができることです。これは、時間経過とともに古くなる大量のデータがある場合など、前述のようなシナリオで特に役立ちます。期限切れのアイテムを自動的に削除することで、テーブルを整理し、ワークロードにとって最も関連性が高く最新のデータのみを保持するようにできます。

重要なことは、DynamoDB は書き込みスループットを消費せずに期限切れのアイテムを削除するため、古いデータを削除する際に追加コストが発生したり、パフォーマンスに影響を与えることはありません。TTL付きのDynamoDBグローバルテーブルを利用する場合では、DynamoDBは全てのレプリカに対してTTLによる削除を複製します。この際、各レプリカリージョンで複製されたTTLによる削除に対して、テーブルに設定されているキャパシティモードとテーブルクラスに応じた書き込みコストが発生します。

DynamoDB Streamsの概要

DynamoDB Streamsは、DynamoDB テーブルのアイテムへの変更を含む時系列ログを提供します。アプリケーションがテーブル内のアイテムを作成、更新、削除すると、変更の記録がテーブルの対応するストリームに書き込まれます。

デフォルトでは、DynamoDB Streamsは DynamoDBのアイテムに対して実行された以下のアクションを収集します。

  • INSERT – 新しいアイテムがテーブルに追加
  • MODIFY – 既存のアイテムの1つまたは複数の属性が変更
  • REMOVE – アイテムがテーブルから削除

ユーザーは、次のオプションからキャプチャするデータを選択できます。

  • Key attributes only – 変更されたアイテムのキー属性のみ
  • New image – 変更後に表示されるアイテム全体
  • Old image – 変更前に表示されていたアイテム全体
  • New and old images – アイテムの新しいイメージ (New image) と古いイメージ (Old image) の両方

DynamoDB Streamsを使用すると、TTLによって期限切れになったアイテムの情報をネイティブに収集し、さらなる処理に使用できます。

DynamoDB TTLでアイテムが期限切れになると、DynamoDB Streamsに次のフィールドを含むレコードが作成されます:

  • Records[<index>].userIdentity.type "Service"
  • Records[<index>].userIdentity.principalId "dynamodb.amazonaws.com"

次に、以下のように、これらのプロパティを Lambdaのイベントフィルターとして追加できます。

"Records": [
  ...
  {
    "userIdentity": {
      "type": "Service",
      "principalId": "dynamodb.amazonaws.com"
    }
  }
  ...
]
JSON
このイベントフィルタを利用することで、お客様は Lambda関数が DynamoDB TTL削除からのみ呼び出されるようにできます。これにより、関数の呼び出し回数が減り、コスト削減につながります。

Lambdaを利用した、DynamoDB Standard-IA テーブルクラスへの書き込み

Lambdaはコードを実行するためのコンピューティングサービスで、サーバーのプロビジョニングや管理は必要ありません。Lambdaはイベントに応じて可用性の高いコンピューティングインフラストラクチャ上でコードを実行し、消費したリソースに対してのみ課金されます。Lambdaは、DynamoDB Streamsを含むさまざまな AWS サービスとすぐに統合できます。DynamoDB Streamsを Lambda関数のトリガーとして追加することで、標準-IAテーブルクラスにデータを格納することができます。アイテムの挿入、更新、削除は DynamoDB Streamsに記録され、それに応じてLambda関数がトリガーされます。不要な処理を避けるため、Lambdaイベントフィルタリングを利用して、必要なイベントにのみ応答できます。DynamoDB StreamsはLambdaを含むさまざまな AWS サービスと統合できます。さらに、DynamoDB Streamsからデータを処理する際、Lambdaから呼びだされるGetRecords APIに料金はかかりません。ただし、AWS Lambda料金表に従って、Lambda関数の実行時間に応じた標準の料金が適用されます。

まとめ

この記事では、DynamoDB TTL、DynamoDB Streams、およびイベントフィルタリング付きの Lambda を使用して、DynamoDB標準テーブルクラスからDynamoDB標準-IA テーブルクラスにデータをアーカイブする方法について説明しました。AWS サービスとネイティブな統合を活用することで、DynamoDB 標準-IAテーブルクラス内にデータをアーカイブするためのフルマネージドで費用対効果の高いソリューションを構築できます。DynamoDB APIを使用してデータへのアクセスを維持しつつ、コールドデータの保存コストを節約したいお客様は、上記のソリューションを実装することが出来ます。

会話に参加しましょう!あなたのフィードバックと経験は私たちとコミュニティにとってかけがえのないものです。以下のコメント欄で洞察を共有したり、質問をしたり、別の視点を提供してください。協力して理解を深めていきましょう!DynamoDB の使用についてさらに詳しく知りたい場合は、開発者ガイドをご覧ください。

(本記事は 2023/10/13に投稿されたArchive to cold storage with Amazon DynamoDBを翻訳した記事です。)

著者について

Andrew Chenは、データ分析、機械学習、インフラストラクチャの仮想化に関心を持つEdtech Solutions Architectです。Andrewは以前、経営コンサルティングの経験があり、さまざまなクラウド移行プロジェクトのテクニカルリーダーとして働いていました。Andrewは自由時間には、釣り、ハイキング、カヤックを楽しんだり、金融市場の動向も追っています。

Lee Hanniganは、アイルランドのドニゴールを拠点とするSr. DynamoDB Specialist Solutions Architectです。ビッグデータと分析技術の強固な基盤に裏打ちされた分散システムに関する豊富な専門知識を持っています。DynamoDB Specialist Solutions Architectとして、DynamoDBの機能を活用したワークロードの設計、評価、最適化においてお客様を支援することに長けています。