DynamoDBをPHP(AWS SDK)で使う


今回はDynamoDBというNoDBのサービスを使ってみたいと思います。

これまでConfigFile類のキャッシュをMemcacheにさせていたのですが、Memcacheだとそのままだと冗長性がないことがあり、他のサービスを検討していく中で、DynamoDBが適しているのでは?という記事などを多く見かけたので使ってみることにしました。

■DynamoDBでテーブル作成
まずはDynamoDBのメニューにアクセスし、「Create Table」を選択します。
Dynamo1

続いてTable Nameに「test」、Primary KeyのPrimary Key Typeを「Hash」、Hash Attribute Nameに「name」と入力します。
Dynamo2

今回Indexは特に追加せずに進めたいと思いますので、そのままContinueを押して進めましょう
Dynamo3

スループットについての設定もデフォルトのまま進めます。この値を変更すると料金が変わるようです。
Dynamo4

スループットアラームの設定ではアラームを受信するメールアドレスだけ入力して進めて下さい。
Dynamo5

確認画面で内容を確認し「Create」を選択して完了です。
Dynamo6

Dynamo7

■AWS SDK for PHP 2のインストール
・前準備
まずはEC2インスタンスを立ち上げ、PHPが実行できる環境を作っておいて下さい。
こちらが参考になるかと思います)

・PEARでインストール

# pear channel-update pear.php.net
# pear upgrade-all
# pear channel-discover pear.amazonwebservices.com
# pear channel-discover guzzlephp.org/pear
# pear channel-discover pear.symfony.com
# pear install aws/sdk
# pear list -a

・アクセスキーの設定

# vim /usr/share/pear/AWSSDKforPHP/Aws/Common/Resources/aws-config.php
        'default_settings' => array(
            'params' => array(),
        ),
                 ↓ ↓
        'default_settings' => array(
            'params' => array(
                        'key' => 'XXXXXXXXXXXXXXXXXXXX', //アクセスキー
                        'secret' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', //シークレットコード
                        'region' => 'ap-northeast-1', //リージョンコード
                ),
        ),

※リージョンコードはこちらを参考にして下さい。

■レコードの追加
・dynamo_put.phpとしてPHPファイルの作成

<?php
require_once 'AWSSDKforPHP/aws.phar';

use Aws\Common\Aws;
use Aws\DynamoDb\Exception\DynamoDbException;

$aws = Aws::factory('/usr/share/pear/AWSSDKforPHP/Aws/Common/Resources/aws-config.php');

try {
    $client = $aws->get('dynamodb');

    $result = $client->putItem(array(
        'TableName' => 'test',
        'Item' => $client->formatAttributes(array(
            'name'      => 'name1',
            'value'    => 'value1',
        )),
    ));

} catch (DynamoDbException $e) {
    echo 'NG';
}
?>

・dynamo_put.phpの実行

$ php dynamo_put.php

・結果表示
Dynamo8

■レコードの取得
・dynamo_pull.phpとしてPHPファイルの作成

<?php
require 'AWSSDKforPHP/aws.phar';

use Aws\Common\Aws;
use Aws\DynamoDb\Exception\DynamoDbException;

$aws = Aws::factory('/usr/share/pear/AWSSDKforPHP/Aws/Common/Resources/aws-config.php');

try {
    $client = $aws->get('dynamodb');

    $result = $client->getItem(array(

        'ConsistentRead' => true,
        'TableName'      => 'test',

        'Key' => array('name'=> array('S' => 'name1')
        ),
    ));

var_dump($result);

} catch (DynamoDbException $e) {
    echo "NG";
}
?>

・dynamo_pull.phpの実行

$ php dynamo_pull.php
object(Guzzle\Service\Resource\Model)#84 (2) {
  ["structure":protected]=>
  NULL
  ["data":protected]=>
  array(1) {
    ["Item"]=>
    array(2) {
      ["name"]=>
      array(1) {
        ["S"]=>
        string(5) "name1"
      }
      ["value"]=>
      array(1) {
        ["S"]=>
        string(6) "value1"
      }
    }
  }
}

■参考

投稿者:

nikuatsu

大学時代にWebアプリ開発を中心とした会社を企業し、約15年経営した末に倒産。現在はとあるインターネット上でのビジネスを展開する企業の開発部門で、あらゆる技術関連について対応している。 スキルの範囲: ・主にPHPを中心としたWebアプリケーション開発 ・Linuxサーバを中心としたインフラストラクチャー全般 ・MySQL、PostgreSQLを中心としたRDBMSの設計、運用 ・Objective-CによるiPhoneアプリの開発 などなど。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です