Help us understand the problem. What is going on with this article?

ASP.NETのセッション管理にAmazon DynamoDBを使ってみる

More than 3 years have passed since last update.

0. 前書き

ASP.NETのセッション管理のバリエーションを自分の中で増やしているシリーズをしています。3回目は、Amazon Web ServicesのDynamoDBを利用するパターンです。前々回「ASP.NETのセッション管理方法を整理する」で、ASP.NETのセッション管理方法についてまとめました。今回も、Custom定義のバリエーションの1つとして試した手順をまとめます。内容は、前回のAzure Redis Cache編と同じ流れで書いていこうと思います。

バージョン情報

name ver.
ASP.NET MVC 4.5.2
AWSSDK.Core 3.1.0
AWSSDK.DynamoDBv2 3.1.0
AWS.SessionProvider 3.1.0.2

1. Amazon DynamoDBとは

Amazon DynamoDBとは、Amazon Web Services(AWS)が提供しているマネージド型のNoSQLサービスです。解説しているSlideShareがありましたので、詳しくはこちらを参照してください⇒「Amazon DynamoDB(初心者向け 超速マスター編)

2. 実際に使ってみる

Amazon DynamoDBを有効化し、アプリケーションで利用するまでを手順を追って説明していきます。

2-1. Amazon DynamoDBを新規に作成する

AWSのポータルにて、Amazon DynamoDBサービスの利用開始をします。
こちらから新規作成。(私は初めて作成するので以下の画面が表示されました)
https://console.aws.amazon.com/dynamodb/

「Create table」をクリックして、テーブル作成画面に移動します。

dynamo1.JPG

下の画面で、次の2項目を設定します。

項目 設定値
テーブル名 ASP.NET_SessionState
プライマリーキー SessionId(文字列)

入力したら、画面右下の「作成」をクリック。

dynamo2.JPG

しばらくする(数分)と、デプロイが終了して、DynamoDBが利用可能な状態になります。
今後の作業で以下の値が必要になりますので、ポータルを開いているうちに控えておいてください。

  • Region:DynamoDBを稼働している場所。東京リージョンなら、「ap-northeast-1」です。
  • Access key:ポータルの認証情報画面から取得できるアクセスキー。
  • Secret key:アクセスキーとペアになっているシークレットアクセスキー。

2-2. ASP.NET MVCのアプリケーションを作成する

Visual Studioにて、新規のASP.NET MVCアプリケーションを作成します。

2-3. AWS.SessionProviderをインストールする

Amazon DynamoDB用のセッションプロバイダーを先ほど作成したアプリケーションにインストールします。
nugetを利用して、dllのダウンロード・参照追加、ツールのダウンロード、依存するモジュール(AWSSDK.CoreやAWS.SessionProvider)のダウンロードをしてもらいます。
プロジェクトを右クリックして、「NuGetのパッケージ管理」を選ぶとGUIでパッケージのインストールができます。
「AWS.SessionProvider」で絞り込み。

nuget.JPG

2-4. Profile Credentialsを作成する

AWSのサービスにアクセスするために、Profile Credentialsを作成します。
さきほどnugetで取得したツールの中に、Profile Credentialsを作成するためのPowerShellが内包されています。
PowerShellのコンソールを開いて、次のコマンドを実行。

>> cd <solution-dir>/packages/AWSSDK-X.X.X.X/tools //バージョン番号は取得したもの
>> .\account-management.ps1                        //ツールを実行
1) Add/Update new profile credentials
2) List registered profiles
3) Remove profile credentials
4) Exit

Choose an option: 1                               //新規作成
Profile name: : XXXXXXXXXXXXXXXXXXXXXX            //任意のプロファイル名を指定 
Access key: : YYYYYYYYYYYYYYYYYYYYYY              //アクセスキーを入力
Secret key: : ZZZZZZZZZZZZZZZZZZZZZZ              //シークレットアクセスキー入力
1) Add/Update new profile credentials
2) List registered profiles
3) Remove profile credentials
4) Exit

Choose an option: 4
>>

ちなみに、ツール実行時に「AWSSDK.Core.dllが見つかりません」みたいなエラーが出た場合は、当該ps1ファイルの4行目の記述をフルパスに変更すると良いです。($dllpath = "..\lib\net35\AWSSDK.Core.dll")

2-5. Web.configに定義を追加する

2-1と2-4で取得した定義をWeb.configに反映します。
AWSProfileNameにさきほど作成した「プロファイル名」記述。

web.config
<system.web>
  ...
  <sessionState mode="Custom" customProvider="DynamoDBSessionStoreProvider">
    <providers>
      <add name="DynamoDBSessionStoreProvider"
            type="Amazon.SessionProvider.DynamoDBSessionStateStore"
            AWSProfileName="XXXXXXXXXXXXXXXXXXXXXX"
            Region="ap-northeast-1"
        />
    </providers>
  </sessionState>
</system.web>

2-5. 動作確認用のコードを書く

前回と全く同じですが、動作確認用のコードは、Indexページにアクセスした時刻をSessionに記録し、
AboutページでSessionから復元する、といった動きにします。「time」をキーにSessionにデータを格納します。

HomeController.cs
public class HomeController : Controller
{
    public ActionResult Index()
    {
        Session["time"] = DateTime.Now;
        return View();
    }

    public ActionResult About()
    {
        ViewBag.Oldtime = Session["time"];
        ViewBag.Now = DateTime.Now;
        return View();
    }
}

結果を、Aboutページで表示します。

About.cshtml
@{
    ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>

<p>
    Indexページを開いた日時 @ViewBag.Oldtime
</p>
<p>
    このページを開いた日時 @ViewBag.Now
</p>

3. 実行結果

時間が保存されてAboutページで復元されました!
result.JPG

本当にAmazon DynamoDBが利用されているかは、今回はAWSのコンソールから確認してみます。

result2.JPG

セッションIDをキーにデータが保管されているのが分かりますね、
ちなみに上の結果は、2つのブラウザからアクセスしたあとにスクリーンショットをとりました。
そのためセッション情報が2つ格納されていることが分かります。

4. おわりに

前回と同じ感想ですが…可用性の高いセッションサーバが簡単にできて便利ですね。
あとnugetで依存モジュールを全部取得してくれるのは便利です。

5. 参考

今回はAWSのドキュメントを参考にして実施しました。
Managing ASP.NET Session State with Amazon DynamoDB

84zume
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした