DynamoDB : PHPのセッション管理に使う
AWS SDK for PHPには、DynamoDBSessionHandlerというセッションを管理するクラスがあるので、比較的楽に導入が可能。
Amazon Linuxでの環境設定
パッケージインストール(DynamoDBアクセス用のCacheとしてAPCも入れる)
$ sudo yum install php php-pear php-xml httpd php-pecl-apc $ sudo pear channel-discover pear.amazonwebservices.com $ sudo pear install aws/sdk
次に、セッション管理ハンドラーを用意
$ sudo vi /var/www/html/dynamosessions.php $ sudo cat /var/www/html/dynamosessions.php <?php date_default_timezone_set('UTC'); require_once '/usr/share/pear/AWSSDKforPHP/sdk.class.php'; $credential = array( 'key' => 'xxxxxxx', 'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 'default_cache_config' => 'apc', ); $dynamodb = new AmazonDynamoDB($credential); $dynamodb->set_region('dynamodb.ap-northeast-1.amazonaws.com'); $handler = $dynamodb->register_session_handler(array( 'table_name' => 'php_session', //デフォルト 'sessions' 'hash_key' => 'id', // デフォルト 'id' 'session_lifetime' => 0, // デフォルト0 'consistent_reads' => true,//デフォルト true(強一貫性) 'session_locking' => false,//デフォルト true (falseにするとI/Oが減る) 'max_lock_wait_time' => '15',// デフォルト30(秒) 'min_lock_retry_utime' => 5000,//デフォルト10000(マイクロ秒) 'max_lock_retry_utime' => 5000,//デフォルト100000(マイクロ秒) )); ?>
上記のスクリプトにあわせて、DynamoDBに、ハッシュキー 「id(String)」を持つテーブル「php_session」を作成する。(スループットは適宜調整)
セッションハンドルとして、作成したDynamoDB用セッションスクリプトをPHPに登録する
$ sudo cp /etc/php.ini /etc/php.ini.bak $ sudo vi /etc/php.ini $ sudo diff /etc/php.ini /etc/php.ini.bak 764c764 < auto_prepend_file = /var/www/html/dynamosessions.php --- > auto_prepend_file = 1248c1248 < session.save_handler = user --- > session.save_handler = files
httpdサーバを再起動する
$ sudo service httpd restart
セッションを使うサンプルコードで確認、DynamoDBのテーブルにデータがあるかも確認。
参考
- DynamoDB for PHP sessions
- Amazon Web Services Blog: Scalable Session Handling in PHP Using Amazon DynamoDB
- 10日で覚えるPHPのキソ 第 10 回 セッション(SESSION) | バシャログ。
- PHP:セッション情報をDBに持つ
- AWS SDK for PHP 1.5.4
- PHP: 実行時設定 - Manual session.save_handler
- PHP: session_set_save_handler - Manual