Amazon DynamoDBは高速な完全マネージド型 NoSQL データベースサービスです。 DynamoDBのテーブルを作成する際、読み取り、書き込みのトラフィックの量と各アイテムの平均サイズを元に計算し、ご希望の量のリクエストキャパシティをプロビジョンします。アプリケーションの要求をより詳しく理解していくに従って、このキャパシティーを増やしたり、減らしたりすることができます。
多くの独立系デベロッパーは、多種多様な環境でのDynamoDBの使用を容易にするためのツールを構築し、公開しています。(DynamoDBのライブラリー、マッパー、およびモックの実装についてのかなり完全なリストについてはこの記事をご覧ください。)
今日は、独立系デベロッパーSebastian Dahlgrenによって作られたオープンソースのツール、Dynamic DynamoDBをご紹介したいと思います。 この柔軟で高度な設定が可能なツールは、DynamoDBのテーブルのプロビジョンドスループットをスケーリングする処理を管理します。
新しいCloudFormationテンプレート
Sebastianは、数クリックでDynamic DynamoDBを使いはじめることができるように、CloudFormationテンプレートを作成しました。
Dynamic DynamoDBを設定することで、テーブルのスケールアップ、スケールダウンを自動的に実行したり、特定のタイムスロットにスケーリングアクティビティーを制限することができます。
上限と下限のしきい値を使用して、読み込みと書き込みのスループットキャパシティーのスケーリングをそれぞれ別々に設定できます。また、各値に対して、最小値と最大値を設定することができます。最後に、Dynamic DynamoDBはcircuit-breakerをサポートします。任意のスケーリングアクティビティーを実行する前に、アプリケーションが起動していて実行されているかどうかを検証することができます。この最終チェックにより、アプリケーションに問題が生じている場合の誤ったスケールダウンアクティビティーを避けることができます。
このテンプレートは、https://raw.github.com/sebdah/dynamic-dynamodb/master/cloudformation-templates/dynamic-dynamodb.jsonからダウンロードいただけます。
テンプレートは、Dynamic DynamoDBパッケージがプリインストールされたt1.microのEC2インスタンスを起動します。このインスタンスはAuto Scaling Groupにより管理されているので、インスタンスに問題が発生した場合、新しいインスタンスにリプレースされる自動フェイルオーバーの仕組みが備わっています。Dynamic DynamoDBはDynamoDB APIをコールしますので、このテンプレートはAWSのクレデンシャルを要求します。:
Clik here to view.

いつものように、IAMユーザーの使用が推奨されます。DynamoDB APIとリソースへのフルアクセス権、および、CloudWatch APIとリソースへのリードオンリーのアクセス権が必要です。
テンプレートはSSHアクセスのためのEC2のキーペアとDynamic DynamoDBの設定を保存するためのS3バケット名も要求します。
Dynamic DynamoDBの設定
テンプレートからの起動が終わった後は、新しく作成されたEC2インスタンスにSSHし、ec2-userとしてログインしたら、/etc/dynamic-dynamodb/dynamic-dynamodb.confの設定ファイルを編集します。(豊富な設定オプションが用意されています。):
Clik here to view.

Dynamic DynamoDBはサービス (dynamic-dynamodb)として動作し、必要に応じて、起動、停止、再起動することができます。 設定ファイルは起動、再起動毎に、自動的にS3にバックアップされます。S3内に有効な設定ファイルが見つかった場合、サービスは自動的に起動されます。最初に設定ファイルを編集した後は、自分自身で起動する必要があります。 (sudo service dynamic-dynamodb start)
Dynamic DynamoDBは"dry run"モードで起動することができます。このモードでは、テーブルをチェックし、設定情報に基づいてスケーリングの決定を行いますが、実際にはプロビジョンドスループットにいかなる変更も行いません。
Dynamic DynamoDBの利用事例
AWSのお客様であるtadaa (利用事例) は、iPhoneのフォトアプリでDynamoDBをご利用いただいております。DynamoDBについて以下のようなコメントをいただいております。:
自分自身で運用管理するデータベースからAmazon DynamoDBに移行したことによって、スケーリングに関する大変な負担をなくすことができ、予測可能な応答時間と無制限のテーブルサイズを手にいれることができました。これは非常に簡単なビジネス上の意思決定でした。
tadaa社はDynamoDBのキャパシティーを自動的に調整するためにDynamic DynamoDbを利用しています。これに関して、今週はじめに、次のような画像をツイートされました。:
Clik here to view.

青いラインは消費されている書き込みキャパシティの平均を表しています。赤いラインはプロビジョンドされている書き込みキャパシティを表しています。 ご覧の通り、Dynamic DynamoDBは状況の変化に応じてプロビジョンドキャパシティの量を変化することができます。tadaaのデベロッパーがアップデートされたコードをデプロイした後、アプリケーションで消費される書き込みキャパシティの量が急激に減少しているところも見て取れます。Dynamic DynamoDBはこの変化を検出し、それに応じて書き込みキャパシティの量を削減しています。
SebastianはDynamic DynamoDBを有料化していませんが、t1.microインスタンスの通常の料金は支払う必要があります。また、既存のインスタンスにDynamic DynamoDBをインストールすることももちろん可能です。
Dynamic DynamoDBを使いはじめるには、SebastianのCloudFormation Template ドキュメントをご覧ください。
-- Jeff;
この記事はAWSシニアエバンジェリスト Jeff BarrのAmazon Web Services Blogの記事、 Auto Scale DynamoDB With Dynamic DynamoDBを 堀内康弘 (Facebook, Twitter)が翻訳したものです。