【aws】phpからdynamodbを使う方法メモ
はじめに
awsのdynamodbをログ保存用として使用
今回は他の人が作った環境での作業だったのでコントロールパネル等の設定は記載しません
不慣れなのもあると思うけど、データの取得と登録する調査をするだけでけっこう時間かかってしまった、、、
今回はIAMロールを使っているのでAPIキーとシークレットはコードには書いていません
※IAMロールについてちゃんと理解できていないので意味不明だったらすみません、、、
実装
MyDynamoDB.php
require(AWS_SDK_PATH.'aws/aws-autoloader.php');
use Aws\Common\Aws;
use Aws\DynamoDb\DynamoDbClient;
class MyDynamoDB
{
// aws設定
public static $config = array(
"region" => "ap-northeast-1",
"version" => "latest",
"endpoint" => "http://dynamodb.ap-northeast-1.amazonaws.com/", // http://dynamodb.[リージョン名].amazonaws.com
);
// データの登録
public function putItem($table, $data)
{
$client = new DynamoDbClient(self.$config);
$client->putItem(array(
"TableName" => $table,
"Item" => $data,
));
}
// 条件を指定してスキャン
public function scan($table, $kind)
{
$client = new DynamoDbClient(self.$config);
$iterator = $client->getIterator('Scan', array(
'TableName' => $table,
'ScanFilter' => array(
'type' => array(
'AttributeValueList' => array(
array('N' => $kind)
),
'ComparisonOperator' => 'EQ' // イコール
),
)
));
return $iterator;
}
public static function query($table, $type, $fromDate, $toDate)
{
$client = new DynamoDbClient(self.$config);
$iterator = $client->getIterator('Query', array(
"TableName" => $table,
"KeyConditions" => array(
"datetime" => array(
"AttributeValueList" => array(
array('S' => $fromDate),
array('S' => $toDate
),
'ComparisonOperator' => 'BETWEEN'
),
"id" => array(
"AttributeValueList" => array(
array('N' => $type),
),
"ComparisonOperator" => "EQ",
),
),
));
return $iterator;
}
}実際に呼び出す
// 登録
MyDynamoDB::putItem("tablename", array(
"id" => array("N" => 1),
"name" => array("S" => "山田花子"),
));
// スキャンして検索
MyDynamoDB::scan("tablename", $kind = 1);
// クエリで検索
MyDynamoDB::query("tablename", $type = 1, $fromDate = "2016-01-01 00:00:00", $toDate = "2016-12-31 23:59:59");普段、MySQL使っているので同じようなイメージで使えるようにしてみました。
ちなみに最初に理解しておけばよかった点は
Scan(スキャン)は全データをなめるので低速(かどうかはわかりませんが、、、)
Queryはテーブルのスキーマでキーが定義されているカラムが対象
あとは、項目を指定するときにカラム名だけでなく型も渡してあげないとダメなことでした
以上です