Amazon ElastiCacheという新しいサービスがbeta公開されました。
これは、Amazonが提供するmemcacheサーバーで、サーバークラスタとして動作し、EC2のネットワーク上からアクセスすることが可能です。

今回は簡単に、このElastiCacheを試してみます。

まず、Amazon ElastiCache (beta)にアクセスし、右ペインにあるSign Up NowのボタンからElastiCacheの利用登録をします。

すると、AWSのコンソールでElastiCacheのタブが追加されるので、選択します。
左ペインのRegionを見ると、このサービスがまだUS-Eastでしか提供されていないことがわかります。
また、メニューツリーに、いくつか機能がならんでいるのがわかります。

まず、その中からCache Security Groupsを選択して、Create Cache Security Groupsボタンを押して、Cache Security Group Nameを入力して登録します。
ここでは、下記のようにしました。

Cache Security Group Name:myfirst-cache-sg

Cache Security GroupはEC2ネットワーク内からのキャッシュクラスタに対するアクセス許可をコントロールします。
EC2のセキュリティグループはEC2ネットワーク外部からのアクセスに対して権限をあたえますが、ElastiCacheのキャッシュセキュリティグループは指定されたEC2のセキュリティグループに対してアクセスの権限を与えます。

新規に作成されたmyfirst-cache-sgを選択すると、下部ペインにそのキャッシュセキュリティグループの情報が表示され、EC2のセキュリティグループに対してアクセス許可を与えることができます。

EC2 Security Group to Linkに、EC2セキュリティグループ名、AWS Account Idには自分のアカウントIDをハイフンなしの12桁で入力します。
ここでは、あらかじめ同じus-eastで作成したEC2インスタンスが属するmyfirst-use-sgというセキュリティグループがあるので、以下のように入力しました。
(AWS Account Idは伏せてあります。)

EC2 Security Group to Link:myfirst-use-sg
AWS Account Id:xxxxxxxxxxxx

次に左ペインでCache Clusterを選択して、Launch Cache Clusterボタンを押すと以下のような設定ウィンドウが表示されるので、ここにキャッシュクラスタの設定を入力していきます。
ここでは、Nameにクラスタ名、Node Typeにノードのキャッシュのメモリサイズ、Number of Nodesにクラスタのノード数を入力、preferrd Zoneで設置するゾーンを選択します。
今回は、下記のように設定しました。

Name :myfirst-cache
Node Type:cache.m1.small(1.3GB memory)
Number of Nodes:2
Preferred Zone:us-east-1a

Continueボタンを押すと、追加設定画面が表示されます。
ここで、先ほど作成したキャッシュセキュリティグループを選択します。また、Cache Parameter Groupでは
キャッシュエンジンの設定値をカスタムする場合、クラスタ上のすべてのキャッシュノードに対して共通で適用することができます。
Maintenance Windowは、もしAmazonがElastiCacheに対してバージョンアップやバッチなどの適用を行う場合に、そのタイミングを指定することができます。ここでたとえば火曜の夜中ならメンテナンスを行ってもよいという場合は、そのように設定できます。

ここでは、 キャッシュセキュリティグループの指定のみで、他の2項目はデフォルトのままで設定しました。

Continueを押し、確認画面で登録ボタンを押して完了すると、このようにクラスタが登録されているのがわかります。

また、クラスタ名をクリックすると、クラスタの詳細とノードの一覧を確認することができます。

Nodesタブのノード一覧では、各ノードのホスト名とポート番号が表示されており、ElastiCacheを使用するときはこのエンドポイントに対してアクセスすることになります。
また、それぞれのノードを選択すると、下部にそのノードのCloudWatchの各メトリクスへのリンク集が表示されます。

これで、ElastiCacheが立ち上がり、使用することができるようになりました。

それでは、実際にプログラムからアクセスしてみます。
us-east-1aにあるEC2インスタンスにログインします。
ここではキャッシュアクセスするプログラムはRubyを利用することにしますが、ElastiCacheはAPI経由ではなく、memcacheプロトコルでアクセスするため、いつものようにAWS Access Keyなどの認証は必要ありません。
その変わりとしてElastiCacheのCache Security GroupがEC2のSecurity Groupに対してアクセス許可をしているようです。

rubyはインストールしてあることが前提で、さらにmemcacheクライアントライブラリをインストールします
ここではmemcachedを利用しますが、別のクライアントライブラリでも構いません。

# gem install memcached
Building native extensions.  This could take a while...
Successfully installed memcached-1.3
1 gem installed
Installing ri documentation for memcached-1.3...
Installing RDoc documentation for memcached-1.3...

ここでは、簡易的にirbを使用してアクセスします。
ここで指定するホスト名は、ノード一覧に記載されていたEndpointとPortを指定します。

# irb
irb(main):001:0> require 'memcached'
=> true
irb(main):002:0> $cache = Memcached.new(["myfirst-cahce.umk9bw.0001.use1.cache.amazonaws.com:11211", "myfirst-cahce.umk9bw.0002.use1.cache.amazonaws.com:11211"])
=> (長いので割愛)
irb(main):003:0> value = 'hello'
=> "hello"
irb(main):004:0> $cache.set 'test-key', 'hello'
=> nil
irb(main):005:0> $cache.get 'test-key'
=> "hello"
irb(main):006:0> 

上記より、setとgetができていることが確認できました。
これで、memcacheのためだけにインスタンスやAMIを用意する必要がなくなるかもしれません。

こちらの記事はなかの人(memorycraft)監修のもと掲載しています。
元記事は、こちら