aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

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のテーブルにデータがあるかも確認。

 

参考