ElastiCacheを使ってみる
Amazon ElastiCacheはインストール、構築不要のmemcachedクラスタ。
現状はMemcached 1.4.5, 1.4.14 に対応しているようです。
使ってみて気づいたことは以下です。
- ElastiCacheへはEC2(VPC)インスタンスからのみアクセスが可能。
- ElastiCacheのセキュリティグループの設定により、指定したセキュリティグループを持ったインスタンスしかアクセスを許さない。
- Management ConsoleでJavaとPHPのクライアントアクセスライブラリを取得可能
それではElasticCacheを起動して、Java Clientからアクセスしてみます。
まずは、作成・起動。
Management Consoleから、
ElastiCacheを起動します。
起動画面で名前、Node Type(インスタンスのタイプ)、Nodeの数、等を指定します。
Cache Security Groupを指定します。ここで指定するものは事前に作成しておいたものを利用します。Cache Security Groupの中では、EC2のどのセキュリティグループ(を持つインスタンス)をアクセス許可するかを指定します。
確認してLaunch Cache Clusterします。
これで起動完了すれば、エンドポイントおよびデフォルトポート11211番を使ってアクセスできるようになります。
ただ、上記にもあるようにEC2のセキュリティグループを持ったインスタンスしかアクセスできないため、ローカルのPCからElastiCacheクラスタノードに直接アクセスできません。(試したかったのですが。)
なので、今回はEC2インスタンス上で以下のJavaのソースコードを作成して、コンパイルしたものでアクセスしてみました。
import java.io.IOException; import java.net.InetSocketAddress; import net.spy.memcached.AddrUtil; import net.spy.memcached.BinaryConnectionFactory; import net.spy.memcached.ClientMode; import net.spy.memcached.MemcachedClient; public class ElastiCacheSample { public static void main(String[] args) { String hostname = "cachecluster2.wfisum.cfg.apne1.cache.amazonaws.com"; int portNum = 11211; String hostnamePort = hostname + ":11211"; String key = "12345"; try { MemcachedClient c = new MemcachedClient(new InetSocketAddress(hostname, portNum)); // Store a value (async) for one hour c.set("key1", 3600, key); // Retrieve a value. Object myObject=c.get("key1"); c.shutdown(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }
今回はMemcachedClientのshutdown()メソッドを呼び出して、終了するようにしています。
こちらを実行すると
$ java -cp ".:./AmazonElastiCacheClusterClient-1.0.jar" ElastiCacheSample 2013-02-14 18:20:25.826 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/10.160.135.101:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue 2013-02-14 18:20:25.837 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@5ca46701 2013-02-14 18:20:25.858 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/10.160.135.101:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue 2013-02-14 18:20:25.859 INFO net.spy.memcached.MemcachedConnection: Added {QA sa=/10.160.83.93:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue 2013-02-14 18:20:25.865 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@42704baa 2013-02-14 18:20:25.866 INFO net.spy.memcached.MemcachedConnection: Connection state changed for sun.nio.ch.SelectionKeyImpl@5a77a7f9 2013-02-14 18:20:25.915 INFO net.spy.memcached.MemcachedConnection: Shut down memcached client
以上のようにmemcachedに指定したkeyが追加され、取得も無事できました。