Help us understand the problem. What is going on with this article?

ElastiCache サービスの導入 - Nextcloud 環境の構築を通じて AWS での環境構築を体験する②

「Nextcloud 環境の構築を通じて AWS での環境構築を体験する」 の第 2 回となります。
これまでの記事が下記からどうぞ。

はじめに

今回は、前回記事 で作成した環境構成から キャッシュサービスである Redis を分離してみます。

この Nextcloud 環境において、 Redis は次の役割を担っております。

  • セッション情報の保持
  • ファイルロック情報の保持

このサービスを分離することで、将来的に EC2 サーバーをロードバランサ等を利用して複数台運用としても、上記情報を Web サーバーで共有することができるようになります。
前回の記事で環境を構築して Nextcloud の環境を少し理解されている方であれば、「あれ、他にも分離しなきゃいけないやつあるじゃん。」と気が付くと思われますが、それは次回の記事に回します。

今回構築する Nextcloud on AWS 環境

次のような構成となります。
image.png

今回追加で利用する AWS サービス

サービス名 役割
Amazon ElastiCache フルマネジメントのインメモリデータストアサービス。Redis と Memcached が利用できます。

変更手順

ElastiCache サービスを起動する

  1. AWS マネジメントコンソールにログインし、ElastiCache サービスを選択します。「作成」をクリックします。
    image.png

  2. サービスを起動するための設定情報をいくつか設定します。

    まず、クラスターエンジンは「Redis」を選択します。クラスタモードは今回は利用しないのでチェックされていたら外します。

    引き続き、Redis の設定です。以下のように設定します。

    項目 内容
    名前 Elastcache サービスを AWS リージョン内で一意になるように名前を入力します。運が悪いとすでにリージョン内で利用されている可能性がありますので、その時はあきらめてほかの名前を入力してください。
    説明 このサービスの説明を入力します。任意ですので名前と同じで問題ありません。
    エンジンバージョンの互換性 作成する Redis のバージョンを選択します。ここでは最新版の 5 系を設定します。
    ポート Redis 要求を受ける TCP ポート番号です。作成されている Nextcloud で設定した Redis ポート番号を設定します。
    パラメータグループ そのままで問題ありません。
    ノードのタイプ ElastiCache サービスのタイプを選択します。インスタンスファミリーについては、EC2 のインスタンスタイプに準拠した性能となっております。とりあえずあれば問題ないくらいにしか使わないので、ここでは "cache.t3.small (1.37 GiB) を選択しました。登録後 12 ヵ月間の無料枠で使うこともできますので、その場合は "cache.t2.micro" を選択してください。選択後「保存」をクリックします。
    レプリケーション数 読み込み専用のレプリカをいくつ作成するかを設定します。0 ~ 5 個の範囲で設定でき、多ければその分読み込み負荷を軽減できます。またこれを 1 以上に設定しておくと自動フェイルオーバーに対応できるようになります。デフォルトで問題ありません。

    image.png
    image.png

  3. Redis の詳細設定は下記のように設定します。

    項目 内容
    自動フェイルオーバーを備えたマルチ AZ 複数の アベイラビリティゾーン (AZ) を利用してフェイルオーバーするようにするかを設定します。チェックし有効にします。
    サブネットグループ 新規作成します。
    名前 サブネットグループの名前を入力します。1 バイト英数字、ハイフンを使って設定します。
    説明 サブネットグループの説明を入力します。名前と同じで問題ありません。
    VPC ID ElastiCache サービスをどの VPC に作成するかを選択します。Nextcloud が動作する EC2 と同じ VPC を選択します。
    サブネット VPC 内のどのサブネットを利用するか選択します。VPC 内に閉じて利用できれば問題ないので、全てのプライベートサブネットを選択すれば問題ありません。デフォルト VPC に作成する場合は選択できるものすべてを選択しておきます。
    優先アベイラビリティゾーン どのアベイラビリティゾーンを優先して利用するかを選択します。デフォルトの "指定なし" で問題ありません。

    image.png

  4. 以下の設定はすべてデフォルトで問題ありません。「作成」をクリックします。
    image.png

  5. 作成が開始されます。次画面に移るまでちょっと待たされますが心配ありません。
    image.png

  6. ステータスが "createing" となっている場合は作成中です。完了まで結構時間かかりますので気長に待ちましょう。
    image.png

  7. ステータスが "available" となったら作成完了です。お待たせしました!

    "▼" をクリックすると作成した ElastiCache サービスの詳細情報を確認できます。このうち「プライマリエンドポイント」がこのサービスへのアクセスポイントとなりますので控えておきます。
    image.png

Nextcloud の設定変更

前回作成した Nextcloud サービスの一部を設定変更して、Nextcloud で今回作成した ElastiCache が利用できるようにします。

Nextcloud サーバーに SSH 接続して作業を行います。

サービスの一時停止

設定変更中に不用意にアクセス等が行われないように、一部サービスを停止しておきます。

  1. Nextcloud バックグラウンドジョブの停止。

    sudo mv /etc/cron.d/nextcloud-cron-php /etc/cron.d/.nextcloud-cron-php
    
  2. Nginx の停止。

    sudo systemctl stop nginx
    
  3. PHP-FPM の停止。

    sudo systemctl stop php-fpm
    
  4. このサーバーで動いている Redis の停止。今後使わないので自動起動も停止。

    sudo systemctl stop redis
    sudo systemctl disable redis
    

設定ファイルの変更

作成した ElastiCache を利用できるようにするための設定を投入します。

  1. Nextcloud 設定ファイルの変更。

    sudo cp -pi /var/www/html/nextcloud/config/config.php{,.orig2}
    
    sudo vi /var/www/html/nextcloud/config/config.php
    
    ※以下の diff 結果のように設定行を追加します。
    sudo diff /var/www/html/nextcloud/config/config.php.orig2 /var/www/html/nextcloud/config/config.php
    27c27
    <     'host' => 'localhost',
    ---
    >     'host' => '【作成した ElastiCache のアクセスポイント】',
    
  2. PHP-FPM 設定ファイルの変更。

    sudo cp -pi /etc/php-fpm.d/www.conf{,.orig3}
    
    sudo vi /etc/php-fpm.d/www.conf
    
    ※以下の diff 結果のように設定行を追加します。
    diff /etc/php-fpm.d/www.conf.orig2 /etc/php-fpm.d/www.conf
    438c438
    < php_value[session.save_path]    = "tcp://localhost:6379"
    ---
    > php_value[session.save_path]    = "tcp://【作成した ElastiCache のアクセスポイント】:6379" 
    

サービスの起動

一時停止しているサービスを起動します。

  1. PHP-FPM の起動。

    sudo systemctl start php-fpm
    
  2. Nginx の起動。

    sudo systemctl start nginx
    
  3. Nextcloud バックグラウンドジョブの起動。

    sudo mv /etc/cron.d/.nextcloud-cron-php /etc/cron.d/nextcloud-cron-php
    

Nextcloud の動作確認

Nextcloud が動作しているか確認します。ログインしてログアウトできれば問題ないです。

お疲れさまでした! これですべての設定が完了です。

あとがき

今回の記事を起こすにあたって、初めて ElastiCache サービスを利用してみたのですが (過去、客先提案で ElastiCache を利用した構成を提案したことあるのですが、使ったことはなかったのは内緒で)、けっこうあっさり起動してしまいました。EC2 インスタンス作るのに慣れている方はほぼ問題なくサービス起動できると思います。
前回に比較して今回は説明少なめでしたが、それだけ簡単に ElastiCache が導入できると理解いただければと思います。
当然ですが、このサービスを使わないで、EC2 で Redis サーバーを追加で立てて運用することも可能です。ですが、フルマネジメントで普段は面倒見なくてもいいように、あえて ElastiCache サービスを利用します。

で、

前回の記事で環境を構築して Nextcloud の環境を少し理解されている方であれば、「あれ、他にも分離しなきゃいけないやつあるじゃん。」と気が付くと思われますが、

ですが、これは、 EC2 サーバーに保存しているデータファイル群です。これも複数の Nextcloud サーバーで同じものが見れなければいけません。

ということで、次回はこれを分離してみます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした