SymfonyのセッションにDynamoDBを利用する

Spread the love

こんにちは。clonedです。今日からすずな株式会社の開発者ブログを開始することになりました。今後ともよろしくお願いします。

SymfonyのセッションストレージにDynamoDBを使うというアイデアは目新しくないと思いますが、情報が少ないように思ったので書いてみます。

Symfony Session DynamoDB で検索すると gwkunze/dynamo-session-bundle が上位に出てきます。しかし、更新が止まっており最新の aws/aws-sdk-php が利用できないようです。

また、AWS公式の aws/aws-sdk-phpAws\DynamoDb\SessionHandler があるのにわざわざ他のライブラリを被せるのがスマートではありません。

そういうわけで、Symfonyの設定を楽にする aws/aws-sdk-php-symfony (こちらもAWS公式)を使って設定だけでDynamoDBをセッションに利用する方法を紹介します。

DynamoDBにテーブルを作成

paramters.ymlでテーブル名、プライマリキーの名称はどちらも設定可能なのでこの名前でなくても大丈夫です。

Symfonyを準備

$ symfony new my_project

aws/aws-sdk-php と aws/aws-sdk-php-symfony をインストール

$ cd my_project
$ composer require aws/aws-sdk-php aws/aws-sdk-php-symfony

app/AppKernel.php にAwsBundleを追加

<?php
...
    public function registerBundles()
    {
        $bundles = [
...
            new Aws\Symfony\AwsBundle(),

DynamoDBの設定をする

app/config/parameters.yml

app/config/paramters.yml にdynamodbの設定を追記する

parameters:
    dynamodb:
        table_name: session
        session_lifetime: 7776000

table_name にはDynamoDBで作成したテーブル名を設定します。
session_lifetime にはセッション保存期間を秒で設定します。

app/config/services.yml

services:
    dynamodb_session_connection:
        class: Aws\DynamoDb\StandardSessionConnection
        arguments: ["@aws.dynamodb", "%dynamodb%"]
    dynamodb_session_handler:
        class: Aws\DynamoDb\SessionHandler
        arguments: ["@dynamodb_session_connection"]

DynamoDBクライアントとparameters.ymlで設定したセッションに関する設定値を元にStandardSessionConnectionインスタンスが生成されます。
そして、そのStandardSessionConnectionインスタンスを元にSessionHandlerが生成されます。

app/config/config.yml

セッションのハンドラーをservices.ymlで追加した dynamodb_session_handler に設定します。

framework:
    session:
        handler_id: dynamodb_session_handler
        name: my_project
        cookie_lifetime: 7776000

そして、AWSユーザーであればおなじみの設定を追記します。

aws:
    version: "latest"
    region:  "ap-northeast-1"
    credentials:
        key:    "AWSのkey"
        secret: "AWSのsecret"

動作確認

サイトにアクセスしてみた後にDynamoDBでテーブルを確認するとセッションが保存されています。

まとめ

AWS公式ライブラリだけで対処できて素敵です。

動作環境
  • Amazon Linux
  • PHP 5.6.25
  • Symfony 3.1.5
  • aws/aws-sdk-php 3.19.13
  • aws/aws-sdk-php-symfony 1.2.0