このチュートリアルでは、一歩一歩、AWSでSticky Sessionを作成する方法を説明します。
このチュートリアルを進めるには、AWSのElastic Load Balancerのコンセプトに慣れている必要があります。
なぜSticky Sessionを使用し、それは何のためですか?
次の設定を使用するPHPアプリケーションがあるとします:
- アプリケーションロードバランサー
- 2つのEC2インスタンス
ユーザーがログインすると、弊社のElastic Load Balancerが2つのインスタンス間で負荷を分散します。
ユーザーは最初のインスタンスにアクセスします:
次に、2番目のインスタンスにアクセスします:
そして次々と続きます。
これはステートレスアプリケーションの場合には問題ありません。
Stateless Applicationとは、データやアプリケーションの状態をクラスタや永続ストレージに保存しないアプリケーションです。
ただし、アプリケーションがユーザーセッションを必要とする場合、問題が発生する可能性があります。実際に、商品をカートに追加してからリンクをクリックした後、カートが空になっていることに気付いたり、商品をカートから削除してからリンクをクリックした後に商品が削除されていないことに気付いたりするかもしれません。
この問題を解決するために、Sticky Sessionを使用できます。
Sticky Session以外にも、別の方法が存在することを知っておいてください。それについては別の日に説明します。
スティッキーセッションはどのように機能しますか?
これは非常に簡単に理解できます。ユーザーを1つのインスタンスにバインドするだけです。ユーザーがリクエストを行うと、ランダムに1つのインスタンスを使用します。例えば、2番目のインスタンス:
ユーザーが新しいリクエストを行う場合、引き続き2番目のインスタンスを使用します。
練習しよう!
2つのEC2インスタンスを起動してください。
アプリケーションロードバランサーをセットアップしてください。
分からない場合は、私のチュートリアルAWSでApplication Load Balancerの作成でこれらすべての手順を説明しています。
以下のコマンドを入力してください:
yum install -y php
systemctl stop httpd
systemctl start httpd
cd /var/www/html/
rm -f index.html
curl https://gist.githubusercontent.com/seikida/b7398ff4300ee88752ce7d8fa2874c77/raw/index.php -o index.php
ウェブサイトにアクセスすると、このページがあるはずだ:
ログインするには、「totoro」と入力し、「Submit」ボタンをクリックしてください。
プロフィールページが表示されます:
以下に2つの問題が発生する可能性があります:
- ページを更新すると、ログインフォームに戻されます。そして再度ページを更新すると、プロフィールページに戻ります。
- 「Logout」というリンクをクリックしても機能しません。
この問題の原因は非常に単純です。Elastic Load Balancerが存在するため、2つのインスタンス間を切り替えています。1つはログインしている場合、もう1つはログインしていない場合です。
この問題を解決するためには、Sticky Sessionを作成すれば十分です。
「ターゲットグループ」をクリックしてください。
ターゲットグループを選択してください:
「アクション」をクリックしてください。
「ターゲットグループ属性を編集」を選択してください。
ターゲットグループ属性を編集画面にターゲット選択設定のブロックを探してください。
「維持設定をオンにする」を選択してください。
クッキーの保存期間を設定できます。
「変更内容の保存」をクリックしてください。
ウェブページに戻ってください。
問題がありません。
動画
必要なら、Youtubeで動画を作成しました。