プレイヤーズ・ハイ

 雑多な日記

Dynamic DynamoDB のインストールと使用

Dynamic DynamoDB とは?

DynamoDB をオートスケールできるツールです。

DynamoDB テーブルのプロビジョンドスループットをスケーリングする処理を管理します。

詳しくは以下の記事を参照ください。

Amazon Web Services ブログ: DynamoDBをオートスケールできるDynamic DynamoDBのご紹介

Dynamic DynamoDB 自体は無料で使えます。

Dynamic DynamoDB を構築する環境

Amazon Linux AMI 2014.03.1 - ami-c9562fc8 (64-bit)

Dynamic DynamoDB の構築方法は 3 種類あります。

  1. pip でインストールして設定などは自分で構築
  2. git でインストールして設定などは自分で構築
  3. AWS CloudFormation の Template が準備されているのでそれを使って構築

本エントリーでは「1. pip でインストールして設定などは自分で構築」の方法で構築を行います。

Dynamic DynamoDB のインストール

pip で Dynamic DynamoDB をインストール

$ sudo easy_install pip
$ sudo pip install dynamic-dynamodb
確認
$ pip freeze | grep dynamic-dynamodb
dynamic-dynamodb==1.12.1

Dynamic DynamoDB の設定

Dynamic DynamoDB 設定ファイルの設置

$ sudo mkdir /etc/dynamic-dynamodb
$ sudo vi /etc/dynamic-dynamodb/dynamic-dynamodb.conf

設定ファイルのサンプルは以下のページにあります。

Example configuration files — Dynamic DynamoDB 1.13.0 documentation

Dynamic DynamoDB 設定項目の日本語訳

以下のページにてわずかですが解説しています。

Dynamic DynamoDB 設定値の日本語訳 - 限りなくクラウドに近いオンプレミス

Dynamic DynamoDB の設定で気を付けた方がよさそうな点

check-interval

監視間隔ですね。求められるキャパシティがめぐるましく変わる環境では短めにしておいた方がいいかもしれません。

しかしそうするとスケールダウンの制限 (1 日 4 回) に早めに引っかかってしまう可能性も高まります。

監視の時間帯を制限する maintenance-windows と併せて使うと吉かもしれません。

他のパラメーターもそうですが,環境に応じた適切な設定値をがんばって導き出す必要がありますね。

ちなみに maintenance-windows は UTC ですので JST を想定して使う場合は -9:00 した時刻を設定しなければならない点に注意です。

Dynamic DynamoDB ログ用ディレクトリーの作成

$ sudo mkdir /var/log/dynamic-dynamodb

ログファイルは以下の 2 種類です。

  • service.log
    • 起動したとか停止したなどが書き込まれます。
  • dynamic-dynamodb.log
    • プロビジョニングの変更結果などが書き込まれます。

Dynamic DynamoDB の起動

Dynamic DynamoDB 起動スクリプトの作成

$ sudo vi /etc/rc.d/init.d/dynamic-dynamodb
#!/usr/bin/env bash
### BEGIN INIT INFO
# Provides:        dynamic-dynamodb
# Required-Start:  $remote_fs $sysa
# Required-Stop:   $remote_fs $syslog
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
### END INIT INFO

NAME=dynamic-dynamodb
DAEMON=/usr/bin/dynamic-dynamodb
DRY_RUN=$2
DAEMON_START_ARGS="--config /etc/dynamic-dynamodb/dynamic-dynamodb.conf --daemon start"
DAEMON_STOP_ARGS="--config /etc/dynamic-dynamodb/dynamic-dynamodb.conf --daemon stop"
SCRIPTNAME=/etc/init.d/$NAME
SERVICE_LOG_FILE=/var/log/dynamic-dynamodb/service.log

if [ "$DRY_RUN" == "--dry-run" ]; then
   DAEMON_START_ARGS="--config /etc/dynamic-dynamodb/dynamic-dynamodb.conf --dry-run --daemon start"
   DAEMON_STOP_ARGS="--config /etc/dynamic-dynamodb/dynamic-dynamodb.conf --dry-run --daemon stop"
elif [ "$2" != "" ]; then
   echo $2
   echo "Second parameter has to be --dry-run and is used only when running start/restart/force-reload commands"
   exit 1
fi

# Exit if the package is not installed
[ -x $DAEMON ] || exit 1

. /etc/rc.d/init.d/functions

log(){
    timenow=`date +%Y-%m-%dT%H:%M:%S.%N`
    echo "$timenow: $1"
    echo "$timenow: $1" >> $SERVICE_LOG_FILE
}

error_exit(){
  log "$1"
  exit 1
}


do_start()
{
   if [ "$DRY_RUN" == "--dry-run" ]; then
      log "do_start:Dry run mode"
   else
      log "do_start:Firstly"
   fi
   log "do_start:Starting $NAME"
   daemon $DAEMON $DAEMON_START_ARGS  || error_exit "Failed in starting $NAME service"
}

do_stop()
{
   log "do_stop:Stopping $NAME"
   daemon $DAEMON $DAEMON_STOP_ARGS || error_exit "Failed in stopping $NAME service"
}


case "$1" in
  start)
  do_start
  ;;
  stop)
  do_stop
  ;;
  status)
  status "$DAEMON" "$NAME" && exit 0 || exit $?
  ;;
  restart|force-reload)
  do_stop
  do_start
    #*)
  ;;
  *)
  echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
  exit 3
  ;;
esac

:
$ sudo chmod 700 /etc/rc.d/init.d/dynamic-dynamodb

Dynamic DynamoDB のサービス登録

$ sudo chkconfig --add dynamic-dynamodb

Dynamic DynamoDB の起動

$ sudo service dynamic-dynamodb start

Dynamic DynamoDB の起動 (dry-run モード)

$ sudo service dynamic-dynamodb start --dry-run

dry-run モードで動かすと,スケーリング結果がログファイルに書きだされるだけの動きになります。設定した値で想定どおりの動きをしているか確認後に本番投入したい場合に使えます。

Amazon Web Services クラウドデザインパターン 設計ガイド

Amazon Web Services クラウドデザインパターン 設計ガイド

Amazon Web Services クラウドデザインパターン実装ガイド

Amazon Web Services クラウドデザインパターン実装ガイド

Amazon DynamoDB Developer Guide

Amazon DynamoDB Developer Guide