在AWS上搭建Web应用程序环境:④创建ElastiCache的Redis并使其支持会话共享

首先

这是系列文章中的一篇。

使用AWS构建Web应用程序环境:⓪概述
使用AWS构建Web应用程序环境:①在EC2实例上构建Web服务器
使用AWS构建Web应用程序环境:②在RDS上创建数据库,并构建最小配置以运行Laravel示例应用程序
使用AWS构建Web应用程序环境:③创建负载均衡器以实现Web服务器的冗余
使用AWS构建Web应用程序环境:④创建ElastiCache的Redis,以实现会话共享
↑↑↑当前文章↑↑↑
使用AWS构建Web应用程序环境:⑤将Web服务器放置在私有子网中,并构建用于维护的跳板服务器
使用AWS构建Web应用程序环境:⑥使用Route53在自定义域名上进行访问
使用AWS构建Web应用程序环境:⑦使用ACM实现HTTPS通信
使用AWS构建Web应用程序环境:⑧构建根据服务器负载自动缩放的机制

前一次直到现在

3.png

我之前创建了负载均衡器,并使Web服务器冗余化,使Laravel示例应用程序能够正常运行。

由于两台Web服务器无法共享会话,因此出现了“TokenMismatchException”错误。

本次要构建的环境

4.png

为了在web服务器之间共享会话,请创建ElastiCache的Redis。

通过将会话保存和共享到Redis,可以避免出现上次发生的「TokenMismatchException」异常。

使用ElastiCache来构建Redis。

要创建Redis,需要进行以下操作:
– 创建Redis专用子网组
– 创建Redis专用安全组
– 创建Redis实例。

创建Redis子网组

在AWS上構建Web應用程式環境:使用RDS創建數據庫,構建Laravel示例應用程式的最小配置。在創建RDS時需要創建子網路組,同樣,在創建Redis時也需要創建子網路組。

点击[ElastiCache]页面的侧边栏菜单中的[子网组],然后点击顶部的[创建子网组]按钮。

screencapture-us-east-2-console-aws-amazon-elasticache-home-2019-01-31-15_35_06.png
項目設定値説明名前laravel-sample-subnet-group-redisこのサブネットグループの名前。
自分が管理するための任意の名前を付ける。説明laravel-sample-subnet-group-redis任意の説明文。VPC{以前作成した[laravel-sample-vpc]のVPC}このサブネットグループが作られるVPC。

选择以前创建的[laravel-sample-subnet-private-a]和[laravel-sample-subnet-private-b]的子网,并进行添加。

创建 Redis 安全组

事先创建安全组以应用于Redis服务器。

点击[VPC]页面的侧边菜单中的[安全组],然后点击顶部的[创建安全组]按钮。

screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-31-15_38_39.png
項目設定値説明Security group namelaravel-sample-sg-redisこのセキュリティグループの名前。
自分が管理するための任意の名前を付ける。Descriptionlaravel-sample-sg-redis任意の説明文。VPC{以前作成した[laravel-sample-vpc]のVPC}このセキュリティグループが作られるVPC。

修改已创建的安全组规则。

在安全组列表中检查刚刚创建的[laravel-sample-sg-redis],并点击页面顶部的[操作]→[编辑入站规则]。

screencapture-us-east-2-console-aws-amazon-vpc-home-2019-01-31-15_41_57.png
項目設定値説明タイプカスタムTCPルール既存の選択肢としてRedisがないためカスタムTCPルールを選択します。ポート6379Redisはデフォルトで6379番ポートを利用します。ソース{以前作成した[laravel-sample-sg-web]のセキュリティグループID}セキュリティグループのソース(アクセス元)は、IPアドレスだけでなくセキュリティグループを指定することも可能。
今回はwebサーバの属するセキュリティグループをソースとして指定する。

使用这个设定,已经创建了一个安全组规则,只允许来自web服务器的Redis(端口6379)连接。

创建Redis

点击[ElastiCache]页面的侧边栏中的[Redis],
然后点击顶部的[创建]按钮。

screencapture-us-east-2-console-aws-amazon-elasticache-home-2019-01-31-15_53_35.png
項目設定値説明クラスターエンジンRedisRedisまたはMemcachedから選択できます。今回はRedisを選択します。名前laravel-sample-redisこのRedisの名前。
自分が管理するための任意の名前を付ける。エンジンバージョンの互換性5.0.0Redisのバージョン。
最新のものを選択します。ポート6379Redisはデフォルトで6379番ポートを利用します。パラメータグループdefault.redis5.0Redisサーバの詳細を設定したものがパラメータグループです。
基本的にデフォルトのままで問題ないです。ノードのタイプcache.r5.largeRedisサーバのスペックです。
デフォルトのままにしました。レプリケーション数0プライマリのRedisサーバに加えて、レプリケーションを作成する数を設定します。
今回は不要なので0個にします。サブネットグループ{先ほど作成した[laravel-sample-subnet-group-redis]のサブネットグループ}このRedisサーバを配置するサブネットグループ。優先アベイラビリティーゾーン指定なしプライマリ、レプリケーションを作成する場合、それぞれをどのアベイラビリティーゾーンに配置するか指定することができます。セキュリティグループ{先ほど作成した[laravel-sample-sg-redis]のセキュリティグループ}このRedisに適用するセキュリティグループ保管時の暗号化チェック無しRedis内に保管しているデータを暗号化するかどうかの設定。送信中の暗号化チェック無しRedisと通信中のデータを暗号化するかどうかの設定。シードする RDB ファイルの S3 の場所-初期データを投入したい場合、データを記述したファイルをS3に配置し、そのパスを入力する。バックアップの有効化チェック無し有効化すると、Redisのデータを日次でバックアップできる。メンテナンスウィンドウ指定なしサーバのスペック変更やセキュリティパッチ適用などを決められた時間に実行するかどうかの設定。SNS通知のトピック通知の無効化メンテナンス発生時に通知を行うかどうかの設定。

当您点击“创建”按钮时,将会创建一个Redis。

在Laravel中配置使用Redis。

由于Redis已经创建完毕,我们将在Laravel示例应用程序中配置Redis服务器以便使用。

请使用SSH连接到Web服务器,并按照以下说明进行设置。
※两台Web服务器都需要进行相同的设置。

安装predis

为了在Laravel中使用Redis,需要安装一个名为predis的库。

#プロジェクトのディレクトリに移動
cd /var/www/html/laravel-sample
#predisインストール
composer require predis/predis

对.env文件进行修改

为了从Laravel示例应用连接到Redis,我们需要修改.env文件中的配置。

#.envファイルを開く
vim .env

我要更改以下3行内容。

(Hint: Based on your request, I provided a paraphrase in simplified Chinese)

将CACHE_DRIVER=file改为CACHE_DRIVER=redis

SESSION_DRIVER=文件

SESSION_DRIVER=redis


REDIS_HOST=127.0.0.1

REDIS_HOST={之前创建的[laravel-sample-redis]的端点}

screencapture-us-east-2-console-aws-amazon-elasticache-home-2019-01-31-16_28_13.png

确认行动

我创建了Redis,并且完成了Laravel的配置,现在要进行操作确认。

在浏览器中输入ALB端点,以便访问Laravel示例应用程序。

进行账户注册、登录、任务注册等操作,并且如果之前发生的“TokenMismatchException”错误没有发生,那么说明我们使用Redis成功地实现了会话共享。

下次

目前,两台web服务器被部署在公共子网上,从安全角度来看,这种状态并不理想。

为了改善这个问题,下一步我们将把两个Web服务器移动到私有子网,并且相应地创建所需的跳板服务器和NAT网关。在AWS上构建Web应用程序环境:⑤将Web服务器放置在私有子网中,并构建维护用的跳板服务器。

广告
将在 10 秒后关闭
bannerAds