こんにちはますのです。
AWSのElasticacheを利用する際ですが、実験するには少しお値段が掛かるということもあり渋っておりました。
RedisサーバをEC2インスタンスで作ればいいじゃないか
そんなお言葉を頂いたこともあり、今回はRedisサーバをEC2インスタンスで構築して接続確認をしてみたいと思います。
なお、筆者はRedisって何??っていうレベルの感覚で触っているので、理解はとてもひどい点ご容赦を。
使い方をよくわかっていないが故のトラブルが多くて独学の限界を感じ始めている今日この頃。
構成のざっくり内容
- OS:AmazonLinux2(EC2インスタンス)
- プライベートサブネットに配置する
- Redisサーバのconfではアクセス制御はしない
Redisサーバ構築手順
- AmazonLinux2にRedisをインストールする
- /etc/redis.confを修正する
- redisを起動する
- redis-cliで接続確認を行う
- redisサービス自動起動設定を行う
以上3工程になります。
筆者は全工程でほぼ詰まっております。ので備忘録。
AmazonLinux2にRedisをインストールする
まずはインストールです。
こちらのページを参考にやらせてもらいました。
https://qiita.com/stoshiya/items/b8c1d2eb41770f92ffcf
AmazonLinux2では特別なことは必要なく「amazon-linux-extras」を利用します。
※以下の場合はredisのバージョン4がインストールされます。
$ sudo amazon-linux-extras install redis4.0
インストール完了後にコマンドを入力してインストール出来ているか確認する。
$ redis-server -v
/etc/redis.confを修正する
続いてRedisサーバを起動する際に指定する構成ファイル「redis.conf」を好みに修正します。
手順はコチラを参考にしました。
https://www.y-hakopro.com/entry/2020/09/02/210000
まずはconfファイルの予備を取っておきましょう。
$ sudo cp /etc/redis.conf /etc/redis.conf.org
redis.confファイルの所有者は「redis」となっている必要があります。
「ls -la /etc | grep redis」でredis.confのユーザが「redis」となっているか確認しておきましょう。
$ sudo vi /etc/redis.conf
(修正前)bind 127.0.0.1
(修正後)#bind 127.0.0.1 ★コメントアウトする
(修正前)protected-mode yes
(修正後)protected-mode no
redis.confの設定値については以下のサイトを参考にして確認しています。
https://qiita.com/ono-soic/items/ebebbf6b687437d3f75c
- bind:接続を許可するIPアドレスを指定する
- protected-mode:他のサーバからのアクセスを制限する
プライベートサブネットに入れる構成となるため問題ありません。
もしパブリックサブネットに置く場合は全世界に晒している状態となるので、許容すべきかどうかはご判断ください。
修正したredis.confを読み込ませてredisを起動する
では先ほどのconfファイルを利用してredisサーバを起動させてみます。
$ sudo redis-server /etc/redis.conf &
[1]3654
こんな結果が返ってくればredisサーバが起動していることになります。
このあとの動作確認は別途コンソールを起動して行います。
同じコンソール内で確認すると接続確認の前にredisが落ちるのか?という状況になりました。
TeraTermやSSHコマンドで別窓を立ち上げて入りなおしましょう。
$ ps ax | grep redis-server
3654 pts/0 S 0:00 sudo redis-server /etc/redis.conf
先ほど入力したコマンドのpidが確認出来れば起動完了となります。
redis-cliで接続確認を行う
それでは起動しているRedisに対して接続が可能かコマンドで確認します。
ping疎通確認用コマンド
$ redis-cli ping
PONG
「PONG」と表示されれば応答が返ってきていることが確認出来ます。
続いてRedisへ接続可能か確認しましょう。
$ redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379>
※-h のあとのIPアドレスはEC2インスタンスのローカルIPを指定します。
ローカルIPアドレスで値が返ってくればRedisへ接続された状態となります。
接続出来ない場合は何かしらのエラーが出るのでもうひと踏ん張りしましょう。
OS起動時にredisサービスを自動起動する設定を行う
接続確認が出来ましたが、このままではOS起動時に手動でRedisを立ち上げる必要があります。
出来ればOS起動時にサービス自動起動してほしいため、以下設定を行います。
redis.serviceを起動出来るか確認する
$ sudo systemctl start redis
$ sudo systemctl status redis
筆者は以下のようにエラーが出ました。
ログの内容を確認すると「Can’t Open the log file : Permission denied」が出ています。
恐らくlogfileで設定されているデータ「/var/log/redis/redis.log」に対して権限が無いのではないかということで確認です。
確認したところ権限が「root」となっていました。
サービス起動は「redis」で行っているため変更しましょう。
「/var/log/redis/redis.log」の所有者を変更する
$ sudo chown redis:redis /var/log/redis/redis.log
エラーとなっていたファイルを修正しました。
実際に手動でredisサービスが起動出来るか確認します。
sudo systemctl start redis
sudo systemctl status redis
所有者を「redis」へ変更したところ起動が成功しました。
最後に自動起動設定を反映します。
$ sudo systemctl enable redis
以上で設定が完了となります。
OS再起動後に「redis-cli -h 127.0.0.1 -p 6379」で接続出来れば問題なく起動していることになります。
1度成功すると問題無く出来たので、検証するうえで利用する際にはこちらでやってみたいと思います。
Elasticacheも近々触ってみたいなと思っていながら用途が分からないのでもう少し勉強したい所存。