PHPでAWS DynamoDBにアクセスする方法(使用例)
PHP で AWS DynamoDB にアクセスする方法(使用例)をご紹介します。
(なお、カンマ前置でコードを記載しています。)
共通部
require 'vendor/autoload.php'; $sdk = new Aws\Sdk([ 'region' => 'ap-northeast-1' // 東京リージョンの場合。 ,'version' => 'latest' ]); $dynamodb = $sdk->createDynamoDb();
putItem
この例では、プライマリキーは 'ID' のみとします(パーティションキーのみでソートキー無し)。以下同様です。
$param = [ 'TableName' => 'Table1' ,'Item' => [ 'ID' => [ 'S' => 'ID_001' ] ,'foo' => [ 'S' => 'value1' ] ,'bar' => [ 'S' => 'value2' ] ,'baz' => [ 'S' => 'value3' ] ] ]; try { $response = $dynamodb->putItem($param); } catch(Exception $e) { // エラーハンドリングを行う }
上記で、'S' は String(文字列) の S です。
上書き禁止にする場合:
$param = [ 'TableName' => 'Table1' ,'Item' => [ 'ID' => [ 'S' => 'ID_001' ] ,'foo' => [ 'S' => 'value1' ] ,'bar' => [ 'S' => 'value2' ] ,'baz' => [ 'S' => 'value3' ] ] ,'ConditionExpression' => 'attribute_not_exists(#ID)' ,'ExpressionAttributeNames' => ['#ID' => 'ID'] ]; try { $response = $dynamodb->putItem($param); } catch(Exception $e) { // エラーハンドリングを行う }
updateItem
$param = [ 'TableName' => 'Table1' ,'Key' => [ 'ID' => [ 'S' => 'ID_001' ] ] ,'UpdateExpression' => 'SET foo = :value100, bar = :value200' ,'ExpressionAttributeValues' => [':value100' => [ 'S' => 'value100' ] ,':value200' => [ 'S' => 'value200' ]] ]; try { $response = $dynamodb->updateItem($param); } catch(Exception $e) { // エラーハンドリングを行う }
getItem
$param = [ 'TableName' => 'Table1' ,'Key' => [ 'ID' => [ 'S' => 'ID_001' ] ] ]; try { $response = $dynamodb->getItem($param); } catch(Exception $e) { // エラーハンドリングを行う } echo $response['Item']['foo']['S']; // 参照例
deleteItem
$param = [ 'TableName' => 'Table1' ,'Key' => [ 'ID' => [ 'S' => 'ID_001' ] ] ]; try { $response = $dynamodb->deleteItem($param); } catch(Exception $e) { // エラーハンドリングを行う }
scan
例として、属性 foo が存在する項目を全て取得したい場合とします。
$param = [ 'TableName' => 'Table1' ,'FilterExpression' => 'attribute_exists(#foo)' ,'ExpressionAttributeNames' => ['#foo' => 'foo'] //,'ProjectionExpression' => ... // 一部の属性のみ欲しい場合はProjectionExpressionを指定する ]; do { try { $response = $dynamodb->scan($param); } catch(Exception $e) { // エラーハンドリングを行う } foreach($response['Items'] as $res) { echo $res['foo']['S']."\n"; // 参照例 } $param['ExclusiveStartKey'] = $response['LastEvaluatedKey']; } while ($param['ExclusiveStartKey']);
上記で、do~whileを行っているのは、scan および query では一度に最大1MBの取得になるためです(デフォルトの場合)。
query
ソートキー無しの例ですので操作としてはあまり意味がありませんが query の例です。
ソートキー有りの場合は KeyConditionExpression に '#ID = :val AND begins_with(#sortKey, :val2)' のような指定が可能になります。
$param = [ 'TableName' => 'Table1' ,'KeyConditionExpression' => '#ID = :val' ,'ExpressionAttributeNames' => ['#ID' => 'ID'] ,'ExpressionAttributeValues' => [':val' => ['S' => 'ID_001']] //,'ProjectionExpression' => ... // 一部の属性のみ欲しい場合はProjectionExpressionを指定する ]; do { try { $response = $dynamodb->query($param); } catch(Exception $e) { // エラーハンドリングを行う } foreach($response['Items'] as $res) { echo $res['foo']['S']."\n"; // 参照例 } $param['ExclusiveStartKey'] = $response['LastEvaluatedKey']; } while ($param['ExclusiveStartKey']);