0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel6/PHP7でのセッション管理をRedisからDynamoDBに変更する

Posted at

Laravel6/PHP7/Redisで構成されたシステムの、セッションストアで使用していたRedis部分をDynamoDB(AWSのNoSQLデータベース)に置き換えたときのメモです。

LaravelもPHPもバージョン古めですがごめんなさい。

terminal
% php artisan -V         
Laravel Framework 6.20.45

% which php
/usr/local/opt/php@7.3/bin/php

Laravel で DynamoDB を使うための AWS SDK for PHP は2024年11月時点での最新版(バージョン3.326.0)を入れています。
AWS SDK for PHP のインストール方法やAWSのアクセスキーID確認方法などは今回記載しません。

php
dd(\Aws\Sdk::VERSION);

"3.326.0"

セッションの保存先をRedisからDynamoDBへ変更

1) .env を修正

それではまず、 .env ファイルを修正していきます。

.env
# 中略

SESSION_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

↑これをこうします。↓

.env
# 中略

SESSION_DRIVER=dynamodb
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=your_aws_access_key_id
AWS_SECRET_ACCESS_KEY=your_aws_secret_access_key
DYNAMODB_SESSION_TABLE=table_name
DYNAMODB_PARTITION_KEY=partition_key_name

2) app/Providers/AppServiceProvider.php を修正

次に app/Providers/AppServiceProvider.php を修正します。

実際のコードでは .env の値をそのまま呼び出さずconfig挟んでから呼び出したりはしていますが、シンプルに書くと以下のような感じかと。

app/Providers/AppServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\UrlGenerator;
use Illuminate\Support\Facades\Session;
use Aws\DynamoDb\SessionHandler;
use Aws\DynamoDb\DynamoDbClient;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot(UrlGenerator $url)
    {
        $dynamoDb = new DynamoDbClient([
            'region'  => env('AWS_REGION'),
            'credentials' => [
                'key'    => env('AWS_ACCESS_KEY_ID'),
                'secret' => env('AWS_SECRET_ACCESS_KEY'),
            ],
            // PHP7でAWS SDK for PHPを使うと出てくる警告を抑制
            'suppress_php_deprecation_warning' => true,
        ]);

        $handler = SessionHandler::fromClient($dynamoDb, [
            'table_name' => env('DYNAMODB_SESSION_TABLE'),
            'hash_key' => env('DYNAMODB_PARTITION_KEY'),
        ]);

        Session::extend('dynamodb', function ($app) use ($handler) {
            return $handler;
        });
    }
}

基本これだけだったと思います。

いろいろな記事やサイトを見ているとカスタムのセッションハンドラーを自作してファイル配置しているような内容も多かったのですが、せっかくSDKを導入しているので一番シンプルな方法をメモしておこうと思いました。

変なところがあったらぜひ教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?