カテゴリー
AWS EC2 ElastiCache Redis

AWS ElastiCache for RedisでWEBアプリケーション用の高速セッションストアを構築する

今回のゴール

WEBアプリのセッション情報を保管する方法として、スケーラビリティーとレスポンス性を考慮してElastiCache for Redisを使用していきます。

下記のAWSサイトを参考にしました。

Amazon ElastiCache for Redis を使い、オンラインアプリケーション用の高速セッションストアを構築する

下準備

WEBサーバー用のEC2インスタンスの作成

詳細は省略しますが、Flaskアプリケーションがポート5000番で起動しますので、セキュリティーグループでインバウンドのTCP 5000番の許可します

セキュリティーグループの作成

ElastiCacheにアタッチするセキュリティーグループを作成します。

[セキュリティグループ名]:任意
[説明]:任意

【インバウンドルール】
[タイプ]:TCP
[VPC]:ElastiCacheを配置するVPC
[ポート番号]:6379
[ソース]:カスタム 上記で作成したEC2のセキュリティーグループを選択

設定

ElastiCacheサービスで「今すぐ始める」をクリック

[クラスタエンジン]:Redis

【Redisの設定】
[名前]:任意
[ノードのタイプ]:今回はテストなのでt2.microを選択
[レプリケーション数]:1

【Readisの詳細設定】
[名前]:任意
[VPC ID]:任意のVPCを選択
[サブネット]:キャッシュクラスターを構成するサブネットを指定

【セキュリティー】
[セキュリティーグループ]:下準備で作成したセキュリティーグループを選択
[保管時の暗号化]:チェック

【バックアップ】
[自動バックアップの有効化]:今回はテストなのでチェックを外しました。

【メンテナンス】
[メンテナンスウィンドウ]:今回はテストなので”指定なし”を選択しました。


作成までに少し時間がかかります。
作成後、後で使用しますので、”プライマリエンドポイント”をコピーします。

確認

確認の下準備

EC2インスタンスにサンプル動作環境を構築してきます。

sudo yum install git
sudo yum install python3
sudo pip3 install virtualenv
git clone https://github.com/aws-samples/amazon-elasticache-samples/
cd amazon-elasticache-samples/session-store

続いてvirtualenvで仮想環境を作成してFlaskを実行します。

virtualenv venv
source ./venv/bin/activate
pip3 install -r requirements.txt

export REDIS_URL="redis://[プライマリエンドポイント]:6379"
export FLASK_APP=example-1.py
export SECRET_KEY=[任意の文字列]
flask run -h 0.0.0.0 -p 5000 --reload

ブラウザからEC2のFlaskにアクセスします。
http://[EC2のパブリック IPv4 DNS]:5000

“You are not logged in”の画面がでれば成功です。

サンプルについて

このサンプルでは、「/」、「/login」、「/logout」の 3 つのルートを使用できます。

各ルートの動作をブラウザで確認してください。

また、サンプルソースは
example-1.py~example-4.pyまであります。

  • example-1.py:radis不使用
  • example-2.py:訪問回数の保存(以下全てradis使用)
  • example-3.py:上記にTTLを追加(10秒)
  • example-4.py:上記をSessionStoreClassを使用して書き換えたもの

ソースは下記URLを参照
https://github.com/aws-samples/amazon-elasticache-samples/tree/master/session-store

サンプル3の動作確認

サンプル3を動作させてみましょう。

Ctrl+CでFlaskを停止して、下記コマンドを実行してブラウザでアクセスします。

export FLASK_APP=example-2.py
flask run -h 0.0.0.0 -p 5000 --reload

すると、リロードするたびにVisits回数がインクリメントされることが確認できます。

また、10秒以上アクセスがないと、キーが削除されますのでVisits回数が1になります。

Redisの中身を確認

Radisの実際の中身を確認するために、EC2にredis-cliをインストールして接続します。

sudo amazon-linux-extras install redis4.0

redis-cli -h [プライマリエンドポイント]

接続できたら次のコマンドを実行して中身を確認します。

#キーを全て取得(全てにロックが掛かるので本番では使用しない)
>keys *
2) "aaa"

#キーの値の型を取得
>type aaa
hash

#Hashのキーを取得
>hkeys aaa
1) "visits"

#Hashの値を取得
>hget aaa visits
"4"

駆け足でしたが、一通りのサンプル検証ができました。