menu
Webを活用してお客様のビジネス課題を解決します。札幌・東京を拠点にWebコンサルティングをコアにした、Web制作・システム開発・サーバ構築会社です。
現場ブログ > Tech Blog

AWS EC2 + PHP 環境のセッションストアとして DynamoDB を採用するメリット

シェア
ツイート
シェア
ブックマーク
タイトルとURLをコピー

最終更新日:2024/07/08   公開日:2024/07/07

はじめに

PHPでウェブアプリケーションを開発する際、セッション管理はユーザーの状態を維持するために重要です。初期設定では、PHPはセッションデータをサーバーのローカルディスクに保存しますが、これは単一サーバー環境での運用を前提としています。しかし、可用性や負荷分散を考慮して複数のサーバーでアプリケーションを運用する場合、ローカルのセッションストアでは対応が困難になります。サーバー間でセッションを共有するには、アクセス可能な共有ストレージにセッションを保持する必要があります。

これを解決するためには、主に以下のような手段が用いられます。

 

共有ディスク: 全てのサーバーで同じディスクを共有し、セッションをファイルとして扱います。設定が容易で、既存の設定をほとんど変更せずに導入できるため、理解しやすいことが特徴です。しかし、サーバーの台数が増えすぎるとディスクへのアクセス負荷が増え、I/O速度の低下が発生する可能性があります。

リレーショナルデータベース(RDBMS): 多くのウェブアプリケーションはMySQLなどのRDBMSを利用しています。これらの既存のデータベースをセッション管理にも利用することがあります。追加のインフラを用意する必要がないため、利用が簡単な手段の一つです。しかし、利用者が増えると大量のデータベースアクセスが発生するモデルのため、セッション操作が多くなるとデータベースのパフォーマンスが低下することがあります。

オンメモリキャッシュサーバー: MemcachedやRedisなどのオンメモリキャッシュサーバーは、データをメモリ内に保存し管理します。そのため、ディスクに保存するよりも高速なアクセスが可能であり、リード/ライト操作に対して非常に高いパフォーマンスを発揮します。この性質がキャッシュの管理に良い方向で働き、効率的なセッション管理を可能にします。ただし、要件に応じてこれらのサーバー、もしくはクラスタを管理する必要があるため、インフラを追加で用意し管理する必要があり、全体的に複雑で金銭的コストのかかる構成となります。

 

しかし、AWSのVPC上でウェブアプリケーションを運用する場合、DynamoDBをセッションストアとして利用するという選択肢が存在します。もちろん、それ以外の環境からもDynamoDBをセッションストアとして使用することは可能ですが、VPC上からアクセスした場合には追加のメリットを享受できます。この記事では、具体的な設定方法や得られるメリットについて詳しく説明します。

DynamoDB をセッションストアとして利用する

基本設定

 

DynamoDBはAWSが提供する完全マネージド型のNoSQLデータベースサービスで、高い可用性、耐久性、およびスケーラビリティを提供します。サービスリリース時には、利用するスループット(使用量)を事前に計算し設定する必要がありましたが、現在では動的にスループットを調整できるため、具体的な利用シナリオが未定でも効率的にサービスを利用することが可能です。
ウェブアプリケーションでは、DynamoDB上に事前にテーブルを作成し、そのテーブルをセッションストアとして使用します。PHPアプリケーションにおいては、AWSから提供されている専用ライブラリを利用することができます。 以下のリンク先には、このライブラリを使ってDynamoDBをセッションストアとして設定する方法が詳細に説明されています。

https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/service_dynamodb-session-handler.html

PHPでは、auto_prepend_fileという設定ディレクティブを利用して、特定のスクリプトファイルを他のすべてのスクリプトの実行前に自動的に読み込むことができます。この機能は、アプリケーション全体で共通して必要な設定や関数を一箇所に集約し、コードの重複を避けながら、すべてのスクリプトで一貫した初期化処理を保証するために役立ちます。
AWS SDK for PHPのセッションハンドラ設定を含むファイルを作成し、php.ini や .htaccess ファイルでauto_prepend_fileディレクティブを設定することで、PHPアプリケーションが起動する際に自動的にDynamoDBにセッション情報が保存されるようになります。

 

AWS 特有の設定

 

DynamoDBを利用するためには、IAM (Identity and Access Management) による適切な権限設定が必要です。 例えば、EC2インスタンス上でアプリケーションを運用する場合、IAM Roleを割り当てることにより、アプリケーションコード内に具体的なクレデンシャル情報を含めることなく、安全にDynamoDBへのアクセスを実現できます。この方法により、セキュリティが大幅に向上し、管理も簡素化されます。
さらに、AWS VPC(Virtual Private Cloud)内でEC2インスタンスを運用している場合、標準的な設定ではEC2とDynamoDB間の通信はHTTPSを介して行われ、データがVPCの外部に一時的に出ることになります。これに対し、VPC Endpointを設定することで、インターネットを介さずにAWSの内部ネットワークを通じてDynamoDBに直接アクセスすることが可能となります。この設定は、サービスの応答速度を向上させると同時に、データのプライバシーとセキュリティをさらに強化する効果があります。
VPC内から DynamoDB を利用する場合、これらのメリットがあります。 これらの設定により、DynamoDBを使用する際のパフォーマンスとセキュリティが大きく向上し、AWSリソースの運用効率が高まります。

 

DynamoDB を利用する場合のメリットとデメリット

 

実際に AWS VPC 環境化で動作するウェブアプリケーションのセッションストアとして DynamoDB を利用すると以下のようなメリットがあります。

高可用性と耐久性: DynamoDBはマネージドサービスであり、AWSが自動的にデータのレプリケーションとバックアップを管理します。これにより、高い可用性とデータの耐久性が保証されます。
高パフォーマンス: VPC Endpointを利用することで、低遅延のリード/ライトが可能となります。また、DynamoDBは並列アクセスに強く、利用者数が増えても性能を維持しやすいです。
コスト効率の良さ: MemcachedやRedis を利用する場合、サーバーを用意するので利用せずとも課金されます。 一方、DynamoDBは使用した分だけ課金されます。テーブルのリード/ライトの回数に基づく課金のため、適度な利用量の場合、オンメモリデータベースサーバーよりもコストが抑えられる可能性があります。

 

一方で、以下のようなデメリットがあります。

学習曲線: DynamoDBは非常に独自の特性を持つデータベースで、特有のデータモデリングやパフォーマンスチューニングを理解するためには、一定の学習が必要です。新しいユーザーにとっては、その複雑さが障壁となることがあります。

 

まとめ

この記事では、AWSのVPC環境で動作するウェブアプリケーションのセッションストアとしてDynamoDBを利用する際のメリット、必要な設定、そしてPHPでの具体的な設定方法について解説しました。特にPHPにおいては、auto_prepend_file設定を利用することで、AWS SDK for PHPのセッションハンドラを簡単に統合できます。この仕組みは、公式から提供されているライブラリを活用することで、セットアップの手間を大幅に削減し、利用しやすい環境を整えることができます。

弊社には DynamoDB をセッションストアとして採用している環境もあり、その環境では Memcached などを使用するよりもコストを抑えられています。 セッション管理のための方法として、条件が合えばDynamoDBの採用を検討する価値があるでしょう。