funasaki memo

このブログ上の投稿は個人のものであり、所属する企業を代表する投稿ではありません。所属:AWSのSolutions Architect

ElastiCacheを使ってみる

Amazon ElastiCacheはインストール、構築不要のmemcachedクラスタ
現状はMemcached 1.4.5, 1.4.14 に対応しているようです。

使ってみて気づいたことは以下です。

  • ElastiCacheへはEC2(VPC)インスタンスからのみアクセスが可能。
    • ElastiCacheのセキュリティグループの設定により、指定したセキュリティグループを持ったインスタンスしかアクセスを許さない。
  • Management ConsoleでJavaPHPのクライアントアクセスライブラリを取得可能

それではElasticCacheを起動して、Java Clientからアクセスしてみます。

まずは、作成・起動。
Management Consoleから、
f:id:kenjifunasaki:20130214180429p:plain
ElastiCacheを起動します。
f:id:kenjifunasaki:20130214180450p:plain
起動画面で名前、Node Type(インスタンスのタイプ)、Nodeの数、等を指定します。
f:id:kenjifunasaki:20130214180725p:plain
Cache Security Groupを指定します。ここで指定するものは事前に作成しておいたものを利用します。Cache Security Groupの中では、EC2のどのセキュリティグループ(を持つインスタンス)をアクセス許可するかを指定します。
f:id:kenjifunasaki:20130214180814p:plain
確認してLaunch Cache Clusterします。
f:id:kenjifunasaki:20130214181134p:plain
これで起動完了すれば、エンドポイントおよびデフォルトポート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が追加され、取得も無事できました。