セッション共有するECSアプリケーションの構築(2)

【連載】

AWSで作るクラウドネイティブアプリケーションの基本

【第24回】セッション共有するECSアプリケーションの構築(2)

[2019/08/28 08:00]川畑 光平 ブックマーク ブックマーク

開発ソフトウェア

前回は、アプリケーションとRedisクライアントのDockerイメージを作成し、アプリケーションロードバランサーを構築しました。続く今回は、下図のようにECSクラスタを作成し、ECSタスク定義を行って、コンテナをデプロイしてアプリケーションを実行しましょう。

前回までに構築した環境にECSクラスタを作成する

ECSクラスタ及びセキュリティグループの設定

まず、ECSコンテナを実行するためのECSクラスタとセキュリティグループを設定します。設定方法は、本連載の第8回で解説しているので、入力項目の詳細はそちらをご覧ください。

なお、ECSクラスタに設定するセキュリティグループで許可する設定は2種類あり、、Redisクライアントを実行するためにSSH接続してクラスタにログインするのと、ALBからのリクエスト転送を動的ポートで接続します。したがって、以下のように、任意の場所からの22番へのアクセスと、ロードバランサーのセキュリティグループからの32768-61000番へのアクセスを許可するものを作成しておきます。

「セキュリティグループの作成」画面

次に、上記で作成したセキュリティグループを指定して、ECSクラスタを作成します。VPCはElastiCache構築時に作成したVPCを指定してください。

ECSクラスタの作成

ECSタスクの定義

前回DockerHubレポジトリへプッシュしたアプリケーションのコンテナイメージのURLを設定し、ECSタスク定義を行います。設定作業は、連載第9回とほぼ同様になるので、入力項目の詳細はそちらを参照してください。

ECSタスクの定義

ECSタスクの定義(タスクサイズ、コンテナ、ボリューム)

ECSタスクの定義(スタンダード)

上記のリンクの設定要領との差分の中で特筆すべき点として、アプリケーションではElastiCacheのエンドポイントを環境変数REDISCLUSTERENDPOINTで取得する実装になっているため(詳細は連載第20回を参照してください)、ElastiCacheのエンドポイントを以下のように環境変数に設定してください。

ElastiCacheのエンドポイントを環境変数に設定

なお、ECSクラスタのスペックにもよりますが、r4.largeインスタンスと同程度のスペックのものをクラスタとして用いる場合、メモリサイズは最低1024MB、CPUタスクは最低512以上を指定するようにしてください。それ以下だと、ヘルスチェックの実行までにアプリケーションの起動が完了せず、強制停止/再起動となり、コンテナが永久起動ループする可能性があります。

ECSサービスの実行・アプリケーション起動の確認

ターゲットグループを指定して、コンテナをECSサービスとして起動します。作業は連載第10回とほぼ同様なので、入力項目の詳細などはそちらを参照してください。今回、ロードバランサーからは2つのパスパターンごとにターゲットグループを指定しているので、ECSサービスを2つ起動するよう実行します。

サービスの設定

サービスが問題なく起動したら、ブラウザでALBのDNSを指定して、以下の例のようなURLでアクセスします。

●アプリケーションのURLの例:http://xxxxxxxx.ap-northeast-1.elb.amazonaws.com/index.html

アプリケーションの画面が表示されたら、実行コンテナ番号を「1」もしくは「2」で指定して「sharedSession」ボタンを押下すると、それぞれ実行したコンテナのホスト名が切り替わって表示されます。

実行コンテナ番号を指定してボタンを押下

都度、実行したコンテナのホスト名が表示される

ECSクラスタにSSHでログインし、前回プッシュしたRedis-ClientのDockerイメージをpullして、Redis-Clientを構築し、実際にElastiCacheに格納されているデータを確認します。

[ec2-user@ip-172-0-0-xxx ~]$  docker pull debugroom/mynavi-sample-redis-client:latest
 latest: Pulling from debugroom/mynavi-sample-redis-client
 // omit
 [ec2-user@ip-172-0-0-xxx ~]$ docker run -it --name redis-client debugroom/mynavi-sample-redis-client /bin/bash
 [root@2952f1af394a /]# redis-cli -h mynavi-elasticache.xxxxxx.ng.0001.apne1.cache.amazonaws.com
 mynavi-elasticache.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379>

コンテナ番号を指定し、「Shared Session」ボタンを押下します。

mynavi-elasticache.xxxxx.ng.0001.apne1.cache.amazonaws.com:6379> keys *
1) "spring:session:expirations:1552130880000"
2) "spring:session:sessions:expires:e1237df7-5646-4382-aa12-41435ed09dc7"
3) "spring:session:sessions:e1237df7-5646-4382-aa12-41435ed09dc7"
mynavi-elasticache.z95fpp.ng.0001.apne1.cache.amazonaws.com:6379> hgetall "spring:session:sessions:e1237df7-5646-4382-aa12-41435ed09dc7"
1) "creationTime"
2) "1552128921707"
3) "sessionAttr:scopedTarget.sampleSession"
4) "{\"@class\":\"org.debugroom.mynavi.sample.aws.elasticache.app.web.model.SampleSession\",\"host\":\"c95883d5424d\",\"lastUpdatedAt\":[\"java.util.Date\",1552129074569]}"
5) "lastAccessedTime"
6) "1552129074379"
7) "maxInactiveInterval"
8) "1800"

別のコンテナ番号を指定し、再び「Shared Session」ボタンを押下します。SampleSession内のhostが切り替わっていることがわかるはずです。

mynavi-elasticache.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379> hgetall "spring:session:sessions:e1237df7-5646-4382-aa12-41435ed09dc7"
1) "creationTime"
2) "1552128921707"
3) "sessionAttr:scopedTarget.sampleSession"
4) "{\"@class\":\"org.debugroom.mynavi.sample.aws.elasticache.app.web.model.SampleSession\",\"host\":\"f449a9d00143\",\"lastUpdatedAt\":[\"java.util.Date\",1552129676177]}"
5) "lastAccessedTime"
6) "1552129676176"
7) "maxInactiveInterval"
8) "1800"

このように、Spring SessionとSpring Data Redisを使うと、マルチサーバで簡単にセッション共有するアプリケーションを簡単に実装することができます。また、Amazon ElastiCacheを併用して用いることで可用性が高く、スケーラビリティを備えたアプリケーション環境を構築することが可能です。連載を参考に、皆さんもぜひ一度、お手元で試してみてください。

著者紹介


川畑 光平(KAWABATA Kohei) - NTTデータ 課長代理

金融機関システム業務アプリケーション開発・システム基盤担当を経て、現在はソフトウェア開発自動化関連の研究開発・推進に従事。

Red Hat Certified Engineer、Pivotal Certified Spring Professional、AWS Certified Solutions Architect Professional等の資格を持ち、アプリケーション基盤・クラウドなどさまざまな開発プロジェクト支援にも携わる。2019 APN AWS Top Engineers & Ambassadors選出。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

コンテンツを戦略的アセットに - Boxのトップが語るデジタル変革ビジョン

コンテンツを戦略的アセットに - Boxのトップが語るデジタル変革ビジョン

7月23日、Box Japanは、年次カンファレンス「Box World Tour Tokyo 2019」を開催した。来日した米Box CEO 共同創業者兼会長 アーロン・レヴィ氏は、基調講演で「コラボレーションと情報管理がデジタル変革の中核を成す」という考えを明かし、同社のビジョンについて語った。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
[解説動画] 個人の業務効率化術 - 短時間集中はこうして作る
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る