tsumiki-media logo

tsumiki-media

Command Palette

Search for a command to run...

AWSベストプラクティス
約10分
中級
6/10
2025年8月18日

AWS ANS-C01 対策 ALB スティッキーセッション(セッション維持)

ALBの背後でセッションが切れる問題の解決策「スティッキーセッション」を解説。なぜこの問題が起きるのか、そして期間ベースとアプリケーションベースの2種類のセッション維持機能の使い分けを、実践的な問題を通じて学びます。

この記事のポイント

  • 1
    ステートフルなアプリケーションでセッション維持が必要な理由を理解する
  • 2
    ALBのスティッキーセッション機能の設定方法を把握する
  • 3
    期間ベースとアプリケーションベースのスティッキネスの違いを説明できる

目次

なぜセッションが切れるのか?

Application Load Balancer (ALB) は、通常、受け取ったリクエストをターゲットグループ内のEC2インスタンスに均等に分散させます。これはステートレスなアプリケーション(各リクエストが独立している)には最適です。

しかし、ログイン情報やショッピングカートの中身など、ユーザーごとのセッション情報をサーバー側で保持するステートフルなアプリケーションでは問題が発生します。1回目のリクエスト(ログイン)がサーバーAに、2回目のリクエスト(カート追加)がサーバーBに送られると、サーバーBはログイン情報を知らないため、ユーザーはログアウトされたように見えてしまいます。

解決策:スティッキーセッション

この問題を解決するのが、ALBのターゲットグループで設定できるスティッキーセッション(セッションの維持)機能です。

この機能を有効にすると、ALBは最初のリクエストを処理した際に、クライアントのブラウザに特別なCookieを発行します。クライアントからの後続のリクエストにそのCookieが含まれている場合、ALBはリクエストを同じターゲットインスタンスに転送します。これにより、セッション中、ユーザーは常に同じサーバーと通信することになり、セッション情報が維持されます。

実装方法1:期間ベースの維持

ALBが自動的にCookie(AWSALB)を生成し、管理する方法です。管理者はセッションを維持したい期間(秒単位)を指定するだけで、簡単に設定できます。最も手軽な方法です。

実装方法2:アプリケーションベースの維持

アプリケーション自身が生成するカスタムCookieを利用する方法です。ALBに対して、セッション維持の判断に使うCookieの名前を指定します。アプリケーション側でセッションの有効期限をより細かく制御したい場合に適しています。

判断基準

問題文に「アプリケーションコードの変更は避けたい」といった制約がある場合、ALBが自動でCookieを管理する期間ベースの維持が最適解となることが多いです。

実践問題で確認

ここまで学んだスティッキーセッションの知識を、実践的な問題で確認しましょう。

AWS認定高度なネットワーキング - 専門知識

練習問題

金融機関の取引アプリケーションをALBと複数EC2インスタンスで構成した本番環境にデプロイしたところ、ユーザーがログイン後の操作を行うたびにログアウトされる問題が発生しました。単一インスタンスの開発環境では問題は起きませんでした。この問題を解決する最も効果的なアプローチはどれですか?

AWS認定高度なネットワーキング - 専門知識

練習問題

セッション情報をローカルファイルシステムに保存するレガシーなPHPアプリケーションを、ALBと複数EC2インスタンスの構成に移行しました。移行後、ユーザーのログイン状態が維持されず、買い物かごの内容が消える問題が報告されました。アプリケーションコードの大幅な変更は避けたい場合、最も効果的な解決策はどれですか?

AWS認定高度なネットワーキング - 専門知識

練習問題

金融機関の新しいオンライントレーディングプラットフォームは、ALBとAuto Scalingグループで構成されています。このシステムには、1. セッション中は同じサーバーに接続を維持する、2. WebSocketでリアルタイム更新を行う、3. HTTPヘッダーでルーティングする、4. 高スループット・低レイテンシーを確保する、という要件があります。どのロードバランシングソリューションがこれらの要件を最も効果的に満たしますか?(2つ選択)

まとめ

ALBの背後にある複数のサーバーでアプリケーションを動かす際、「ログインが維持されない」「カートが空になる」といった問題が発生したら、それはステートフルなセッション管理ができていないサインです。

この問題の最も直接的で一般的な解決策が、ALBのターゲットグループで設定するスティッキーセッションです。問題文からこのパターンを読み取ることが、迅速な正解への鍵となります。

「ログイン後にセッションが切れる」「カートが空になる」といった症状は、ステートフルなアプリケーションがALBのデフォルト(ラウンドロビン)で動作していることが原因です。

ALBのターゲットグループ設定でスティッキーセッション(セッションの維持)有効にします。これにより、同じユーザーからのリクエストは、セッション中ずっと同じサーバーに送られます。

理解度チェック

なぜステートフルなアプリケーションをALBの背後でそのまま動かすと問題が起きるのか説明できるか?

スティッキーセッションがCookieを使ってどのようにセッションを維持するのか説明できるか?

他の問題も解いてみませんか?

tsumikiでは、AWS認定試験の合格に必要な知識を体系的に学習できます。実践的な問題を通じて、AWSスキルを身につけましょう。