2013年10月23日

DynamoDB Localを触ってみた

【AWS発表】 デスクトップ開発を可能にする DynamoDB Local
というのが発表されています。

簡単に言うと「DynamoDBの開発をDynamoDBにアクセスしないでできるぜ!」という類のものになります。
AWSは重量課金なので、意味なくアクセスするとお金かかりますものね。

動かし方は簡単。ダウンロードして実行するだけ。JRE 7以上である必要があります。
c:\dynamodb_local_2013-09-12>java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b16)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

c:\dynamodb_local_2013-09-12>java -Djava.library.path=. -jar DynamoDBLocal.jar
2013-10-23 02:33:16.574:INFO:oejs.Server:jetty-8.y.z-SNAPSHOT
2013-10-23 02:33:16.825:INFO:oejs.AbstractConnector:Started SelectChannelConnector@0.0.0.0:8000

立ち上げた後はEndPointを「http://localhost:8000」にすることで、DynamoDB Localへアクセス出来ます。

注意点としては、
・DynamoDB LocalはSSLに対応していないので、EndPointの設定は「localhost:8000」ではなく「http://localhost:8000」とすること
・JavaSDKの場合、Regionはus-east-1となってしまうこと
でしょうか。
ClientConfiguration clientConfiguration = new ClientConfiguration().withMaxErrorRetry(20);
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

AmazonDynamoDBClient ddb = new AmazonDynamoDBClient(credentials, clientConfiguration);
ddb.setRegion("ap-northeast-1");
ddb.setEndpoint("http://localhost:8000");

Regionがus-east-1となるのはAwsHostNameUtilsでEndPointが".amazonaws.com"で終わっていない場合に"us-east-1"としているからかもしれません。
どうしても"us-east-1"が嫌で嫌でしょうがない場合はhostsに".amazonaws.com"で終わるテキトウなリージョンを登録してみると変更できるかもしれません。
(存在するリージョンを設定してしまうと接続できなくなる恐れがありますが)

DynamoDB Localのディレクトリにあるthird party licenseを見るとjettyやsqliteで動作しているようです。
簡単なテストアプリだけならDynamoDB Localで十分作れそうですね。

ホンモノのDynamoDBとの違いはドキュメントにかかれておりますが、
・スループットの設定を無視する
・読み込みおよび書き込み量の制限を行わない
・キャパシティを消費しない
などなど、DynamoDBをマジで使おうとする人には注意すべき点があります。
(周回遅れエンジニアはDynamoDBをマジで使った事はありません。。。。)

ともあれ、これを使って「通勤中の電車の中でも、海外出張の飛行機の中でも、休暇中のビーチでも、コードを書くことができます」ね!

2013年10月2日

巨大ファイルの作り方

転送速度を計測する際に巨大なファイルが必要になる場合があります。
以前は自分でプログラムを作成していたのですが、実はよく知られた作る方法がありました。
使うたびにぐぐっていたのでこの際メモ。

Linuxの場合

こんな感じで1GBのファイルを作れます。
dd if=/dev/zero of=test.bin.$1 bs=1M count=1024

よくループを回して1個のファイルというよりは、複数ファイルを作ります。
$ for i in `seq 0 3` ;do sudo dd if=/dev/zero of=test.bin.$i bs=1M count=1024 ; done;
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 40.3002 s, 26.6 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 44.088 s, 24.4 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 34.7547 s, 30.9 MB/s
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 30.1857 s, 35.6 MB/s
$ ll
total 4194320
-rw-r--r-- 1 root root 1073741824 Oct  1 16:37 test.bin.0
-rw-r--r-- 1 root root 1073741824 Oct  1 16:38 test.bin.1
-rw-r--r-- 1 root root 1073741824 Oct  1 16:39 test.bin.2
-rw-r--r-- 1 root root 1073741824 Oct  1 16:39 test.bin.3
$

参考:ITmedia エンタープライズ : Linux Tips「容量指定のダミーファイルを作成したい」

Windowsの場合

Windowsの場合もコマンドがありました。
C:\>fsutil file
---- サポートされる FILE コマンド ----

findbysid               セキュリティ識別子でファイルを検索
queryallocranges        ファイルに割り当てられた範囲の照会
setshortname            ファイルの短い名前の設定
setvaliddata            ファイルの有効なデータ長の設定
setzerodata             ファイルのゼロ データの設定
createnew               指定されたサイズの新しいファイルを作成
queryfileid             指定されたファイルをファイル ID で照会
queryfilenamebyid       ファイル ID のランダム リンク名を表示

C:\>fsutil file createnew
使用法 : fsutil file createnew <ファイル名> <長さ>
    例 : fsutil file createnew C:\testfile.txt 1000

C:\>fsutil file createnew test.bin 1073741824
ファイル c:\test.bin が作成されました

参考:巨大なサイズのファイルを簡単に作る方法 - @IT

このコマンドを実行する場合は管理者特権が必要なようです。コマンドプロンプトを開く際に「管理者として実行」を右クリックより選んでください。
C:\>fsutil
FSUTIL ユーティリティには管理者特権が必要です。

ちなみにこのファイル、圧縮するとサイズがかなり小さくなります。
$ zip test.zip *
  adding: test.bin.0 (deflated 100%)
  adding: test.bin.1 (deflated 100%)
  adding: test.bin.2 (deflated 100%)
  adding: test.bin.3 (deflated 100%)
$ ll
total 4198392
-rw-r--r-- 1 root     root     1073741824 Oct  1 16:37 test.bin.0
-rw-r--r-- 1 root     root     1073741824 Oct  1 16:38 test.bin.1
-rw-r--r-- 1 root     root     1073741824 Oct  1 16:39 test.bin.2
-rw-r--r-- 1 root     root     1073741824 Oct  1 16:39 test.bin.3
-rw-rw-r-- 1 user     user        4168818 Oct  1 16:48 test.zip
間違っても人に送り付けちゃダメですよ。