Amazon ElastiCacheでキャッシュサーバを作成する方法

Amazon ElastiCacheでキャッシュサーバを作成する方法を勉強したのでメモしておく。

Amazon ElastiCacheでは,エンジンとしてmemcached,もしくはRedisを選択することができ,各キャッシュサーバをクラスタリングして運用することができる。ここでは,クラスタリングされた各キャッシュサーバをノードと呼ぶ。

キャッシュクラスタを作成する

AWS Management ConsoleにログインしたらElastiCacheを選択する。

画面右上のメニュー(アカウント管理メニューの隣)から使用するリージョンを選択する。今回は**Asia Pacific (Tokyo)**を選択する。

Launch Cache Clusterを選択し,キャッシュクラスタの作成画面に入る。

CACHE CLUSTER DETAILS

キャッシュクラスタの詳細情報を入力する。

入力項目詳細
Nameキャッシュサーバのクラスタに付けたい名前を入力する。
Engineエンジンとして使用するソフトウェアを選択する。memcached,もしくはredisを指定することができる。
Cache Port使用するポート番号を指定する。通常はデフォルトのままでもよい。
Engine Versionエンジンとして使用するソフトウェアのバージョンを指定する。デフォルトのままでもよい。
Number of Nodesエンジンがmemcachedの場合,クラスタ内で起動するノードの数を入力する。エンジンがredisの場合は入力する必要がない。その理由は,memcachedはレプリケーションをサポートしていないので,「読み取り性能の向上」をクラスタリングで実現しているのに対し,redisはレプリケーションをサポートしているので,クラスタリングをする必要自体が無いためだ。※redisのレプリケーション設定はメニューのReplication Groupsから行うことができる。
Preferred Zoneアベイラビリティーゾーンのクラスター版。デフォルトのままでもよい。
Node type使用するノード(エンジン)のスペックを選択する。
Cache Subnet GroupVPCを使用している場合は,指定する必要がある。
Topic for SNS Notification関連事項で何かがあった場合,指定されたメールアドレスに通知する。通知が必要ない場合は,Disable Notificationsを指定する。
Auto Minor Version Upgrade指定したエンジンにマイナーバージョンのアップデートが行われた場合に,アップデートを自動的に適用するかを指定する。

各項目を入力し終わったら,Nextを選択する。

ADDITIONAL CONFIGURATIONフェイズ

キャッシュクラスタの追加情報を入力する。

入力項目詳細
Cache Security Group(s)どのEC2インスタンスからのアクセスを許可するかを設定することができる。Cache Security GroupにEC2のSecurity Groupを登録することで,そのSecurity Groupを使用しているEC2インスタンスからのアクセスを許可することができる。デフォルトのCache Security Groupでは,基本的にアクセスは許可していないので,新たにCache Security Groupを作成する必要がある。
Cache Parameter Groupエンジンに使用されるパラメータを設定することができる。デフォルトの状態でも問題ないが,運用するアプリケーションに合わせてチューニングすることが望ましい。
Maintenance WindowElastiCacheのメンテナンスが行われる時間を設定することができる。このメンテナンスは避けることができない。このメンテナンス中はDBエンジンのパッチ適用などが行われるので,メンテナンス中はサービスが停止する可能性がある。そのため,アクセスが少ない時間帯に設定することが望ましい。サービスが停止した場合はキャッシュしていた内容が消失する。

各項目を入力し終わったら,Nextを選択する。

REVIEWフェイズ

設定を確認し,Launch Cache Clusterを選択する。

補足

Amazon ElastiCacheのとっつきにくさは,エンジンの仕様の違いが大きいと思うので,以下にmemcachedとRedisの差異を挙げておく。

memcachedRedis
負荷分散クラスタリングを行うことで,コンシステント・ハッシングによって負荷分散する。レプリケーションによって負荷分散する。リードレプリカを複数のアベイラビリティゾーンに配置することで高可用性も実現可能。
原子性サポートされていないが,CAS操作によって実現可能。サポートされている。
一貫性サポートされている。サポートされている。
独立性不明。おそらくサポートされていない。不明。おそらくサポートされていない。
永続性サポートされていない。Amazon ElastiCacheではサポートされていないが,EC2に配置することでRedisのスナップショットやAppend Only Fileを利用できるので実現可能

参考
書籍 NoSQLデータベースファーストガイド
ACID (コンピュータ科学) – Wikipedia
Amazon RDSで仮想DBインスタンスを作成する
RDSインスタンスの設定を変更する
Amazon RDSによるレプリケーションについて理解する | Developers.IO
第1回 データベース・クラスタの概要 | Think IT
ElastiCache for redisを本番導入してみました – SSSSLIDE