もはやC++Builder XE4 棚上げです。
いま、興味のあるままにわがままに Amazon EC2でサーバを起ち上げて、NoSQLの一つ、DynamoDBに挑戦しています。ええ、キミだけじゃなく、自分も傷つきまくってます。
「夏だ、クラウドだ!」的な、Amazonでキャッチーな「無料キャンペーン」バナーをたまたま目にしちゃって、をを、これが「お・も・て・な・し」的なお誘いか!とばかり、「じゃあ、やっちゃおうか、今でしょ!」ってサインイン。
もはやブログを開設する感覚でしたよ。ええ、とてもお気軽な感じ。
ところが実際、インスタンスを起ち上げていくと、「じぇじぇじぇ・・・これって完全にイチからサーバ立ち上げるのと一緒じゃ・・・」チョウン、チョモッド?・・・Linuxのコマンドなんて、ほとんど知らねー。めっちゃ、ハードル高杉。
こうなったら、なにがなんでも「倍返しだ!」(無料なのに)とばかりに、DynamoDBでお気軽にKVSでデータベースを組んじゃうぞ!って勢いづいたら、そこでもめっちゃつまずく。大コケ。逆にハードル増し増し。
どうも、データの作成日時をmicrotime(true)で格納しているところでコケているっぽい。
まずは、DynamoDB接続用の設定ファイル、config.phpを別途用意しておきましょう。
config.php
[php]
<?php
return array(
‘includes’ => array(‘_aws’),
‘services’ => array(
‘default_settings’ => array(
‘params’ => array(
‘key’ => ‘********************’,
‘secret’ => ‘********************’,
‘region’ => ‘ap-northeast-1’
)
)
)
);
[/php]
ここからが、そのputItemのコード↓
[php highlight=”16,17″]
//DynamoDBの準備
require_once ‘/var/tmp/inc/vendor/autoload.php’;
use Aws\Common\Aws;
$aws = Aws::factory(‘/var/tmp/inc/config.php’);
$dynamodb = $aws->get(‘dynamodb’);
//データ書き込み
$result =
$dynamodb->putItem(
array(
‘TableName’ => "person",
‘Item’ => array(
‘uuid’ => array( ‘S’ => "hibara" ),
/* ↓ここでコケてるっぽいエラーが返ってくる… */
‘date_create’ => array( ‘N’ => microtime(true)),
‘first_name’ => array( ‘S’ => "Mitsuhiro" ),
‘last_name’ => array( ‘S’ => "Hibara" )
),
‘Expected’ => array(
‘uuid’ => array(
‘Exists’ => false,
),
‘date_create’ => array(
‘Exists’ => false,
)
)
)
);
echo $result;
[/php]
で、いろいろ試行錯誤してみると、めちゃくちゃ初歩的なところでした。
[php]
‘date_create’ => array( ‘N’ => (string)microtime(true)),
[/php]
Number型であっても、値は文字列でないといけない。
そのために、連想配列のKeyに「N」が指定されているというわけ。なに、その仕様。。。
たぶん基本のキでしょうけども、ここでハマっている人がいるかもしれないので、一応メモとして残しておきます。
このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。
日々の開発作業で気づいたこと共有を。同じところで躓いている人が、 検索で辿り着けたら良いな、というスタンスで記事を書くので不定期更新になります。
1 Trackback or Pingback