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」をクリックして、テーブル作成画面に移動します。
下の画面で、次の2項目を設定します。
項目 | 設定値 |
---|---|
テーブル名 | ASP.NET_SessionState |
プライマリーキー | SessionId(文字列) |
入力したら、画面右下の「作成」をクリック。
しばらくする(数分)と、デプロイが終了して、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」で絞り込み。
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にさきほど作成した「プロファイル名」記述。
<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にデータを格納します。
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ページで表示します。
@{
ViewBag.Title = "About";
}
<h2>@ViewBag.Title.</h2>
<p>
Indexページを開いた日時 @ViewBag.Oldtime
</p>
<p>
このページを開いた日時 @ViewBag.Now
</p>
3. 実行結果
本当にAmazon DynamoDBが利用されているかは、今回はAWSのコンソールから確認してみます。
セッションIDをキーにデータが保管されているのが分かりますね、
ちなみに上の結果は、2つのブラウザからアクセスしたあとにスクリーンショットをとりました。
そのためセッション情報が2つ格納されていることが分かります。
4. おわりに
前回と同じ感想ですが…可用性の高いセッションサーバが簡単にできて便利ですね。
あとnugetで依存モジュールを全部取得してくれるのは便利です。
5. 参考
今回はAWSのドキュメントを参考にして実施しました。
Managing ASP.NET Session State with Amazon DynamoDB