【EC2インスタンス】AmazonLinux2にRedisをインストールしてサービス自動起動設定を行う

  • 2021年2月25日
  • 2021年2月24日
  • AWS
AWS

こんにちはますのです。
AWSのElasticacheを利用する際ですが、実験するには少しお値段が掛かるということもあり渋っておりました。

RedisサーバをEC2インスタンスで作ればいいじゃないか

そんなお言葉を頂いたこともあり、今回はRedisサーバをEC2インスタンスで構築して接続確認をしてみたいと思います。

なお、筆者はRedisって何??っていうレベルの感覚で触っているので、理解はとてもひどい点ご容赦を。

結果としては出来たのですが、途中良くわからなくてめちゃくちゃ詰まりました。
使い方をよくわかっていないが故のトラブルが多くて独学の限界を感じ始めている今日この頃。

構成のざっくり内容

  • OS:AmazonLinux2(EC2インスタンス)
  • プライベートサブネットに配置する
  • Redisサーバのconfではアクセス制御はしない

Redisサーバ構築手順

  1. AmazonLinux2にRedisをインストールする
  2. /etc/redis.confを修正する
  3. redisを起動する
  4. redis-cliで接続確認を行う
  5. 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」となっているか確認しておきましょう。
それでは/etc/redis.confを修正しましょう。
$ 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:他のサーバからのアクセスを制限する
今回の設定では全部のIPからのアクセスを許可するという設定に変更しています。
プライベートサブネットに入れる構成となるため問題ありません。

もしパブリックサブネットに置く場合は全世界に晒している状態となるので、許容すべきかどうかはご判断ください。

修正した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」で接続出来れば問題なく起動していることになります。

Elasticacheがお高いからとEC2インスタンスに入れてみましたが、初めてのことで結構あわあわしました。
1度成功すると問題無く出来たので、検証するうえで利用する際にはこちらでやってみたいと思います。

Elasticacheも近々触ってみたいなと思っていながら用途が分からないのでもう少し勉強したい所存。

最新情報をチェックしよう!