読者です 読者をやめる 読者になる 読者になる

テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

S3: s3cmd mb失敗

現在開発しているS3ストレージ(in Scala)は, インメモリで実行するモードを実装している. これは, 主に,

  1. I/Oを除いた性能を測定する
  2. 試しやすくする: ストレージの設定が必要なもの・副作用を発生し得るものは気軽に試せない(私は特に, スクリプト言語で書かれたソフトウェアは信用出来ない)

ためである. このモードはまた, テストでも使われており, 開発に使っているマシンのSSDに与えるダメージを少なくすることが出来る.

サーバを立ち上げるアプリケーションは, 何の設定もいらずコマンド一発で実行出来る.

$ sbt
> run RunInMemory
Successfully bound to /127.0.0.1:8080

このモードでは, アクセスキーmyid, シークレットキーmykeyがあらかじめ登録されている. ユーザ管理の方法は, RiakCSを参考にして作ってある. 使い方を, 良くドキュメントされた標準的なソフトウェアに似せることは, 自分のドキュメント作業量を減らすことが出来るので良い戦略だと思う.

試しにmyidに関するアカウント情報をGETしてみる.

$ curl -X GET http://localhost:8080/admin/user?id=myid
<User>
   <Email>hoge@hoge.com</Email>
   <DisplayName>foobar</DisplayName>
   <KeyId>myid</KeyId>
   <KeySecret>mykey</KeySecret>
   <Name>foo bar</Name>
   <Id>abc</Id>
</User>

POSTすることで新しいユーザを作ることも出来る. データは今のところでたらめである.

$ curl -X POST http://localhost:8080/admin/user
<User>
   <Email>bpxIzysV@</Email>
   <DisplayName>III7aGvl</DisplayName>
   <KeyId>84svtqOcNqRqsjLh</KeyId>
   <KeySecret>FHO7bQcrSscymBY6Bk6aF9F9LOMcCTdEwPtMELZlAth8C1PsagCv1AOfzk5AOOGg</KeySecret>
   <Name>KSvLBVjZ</Name>
   <Id>1T0mt8SOGaFI4OvFKVvSmcyk3Y1xDpYhAGArrDzqsMbS3puJqr6hyHx8rMzjWaFM</Id>
</User>

さっそくs3cmdを使ってバケットを作ってみようと思う. s3cmd --configureとして対話的に作成することが出来る. しかしそれでは不十分だ. その後, signature_v2 = Trueを設定する. 私の調査では, 野良S3ではv4は実装出来ない.

バケットの作り方は, s3cmd mb s3://hogeとすると, 名前hogeのバケットを作る. しかし, 失敗する.

デバッガでリクエストを覗くと原因はすぐに分かる. バケット名が仮想ホスト方式になっているからである. AWS SDK Javaを使った場合だと, パス方式のリクエストしか飛んでこなかったので安心していたのだが, 仮想ホスト方式をパス方式に修正するDirectiveが必要になったかも知れない(修正すること自体は簡単だが, どうやって仮想ホスト方式であることを判定すればいいのか?).

HttpRequest(PUT,http://hoge.localhost/,List(Host: hoge.localhost, Accept-Encoding: identity, Content-Length: 0, Authorization: AWS myid:SP/ShNFNl3O1u6uD01PTMlA9I7o=, x-amz-date: Sun, 06 Sep 2015 11:08:51 +0000),Empty,HTTP/1.1)

ドッグフーディング重要.

次回は, s3cmdで少し遊んだ結果を報告出来ると思う.

広告を非表示にする