RBAC(Role-Based Access Control)が有効になっているElastiCache RedisClusterに、EC2で動作するアプリケーションから、JavaのRedisクライアントライブラリであるJedisを使って接続する。
前提
- 『Authenticating users with Role-Based Access Control (RBAC) 』(https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Clusters.RBAC.html) に従ってRedisClusterが作成されている
- アプリケーションの動作するEC2から、RedisClusterへネットワーク設定的にアクセス可能である
-
openssl s_client -connect エンドポイント:6379 -quiet
等のコマンドで確認できる
-
- 認証するユーザーのアクセス文字列に
+cluster
と+ping
が設定されている-
+ping
は設定しなくても繋がるが、設定しておかないとログにerrorが吐かれる
-
コード
import redis.clients.jedis.{BinaryJedisCluster, HostAndPort, JedisCluster, JedisPoolConfig}
// JedisClusterインスタンス生成 (RedisClusterへの接続)
val jedis = new JedisCluster(
new HostAndPort("Clusterの設定エンドポイント", 6379),
BinaryJedisCluster.DEFAULT_TIMEOUT, // connectionTimeout: Int
BinaryJedisCluster.DEFAULT_TIMEOUT, // soTimeout: Int
BinaryJedisCluster.DEFAULT_MAX_ATTEMPTS, // maxAttempts: Int
"ユーザー名", // user: String
"パスワード", // password: String
null, // clientName: String
new JedisPoolConfig(), // poolConfig: GenericObjectPoolConfig[Jedis]
true// ssl: Boolean
)
// あとは生成したインスタンスを使って、許可されているコマンドを実行できる
jedis.set("test1", "テスト1")
jedis.set("test2", "テスト2")
jedis.set("test3", "テスト3")
println(jedis.get("test1")) // "テスト1"
println(jedis.get("test2")) // "テスト2"
println(jedis.get("test3")) // "テスト3"
エンドポイント、ユーザー名、パスワードは環境や設定に合わせて置き換えること。
connectionTimeout
、soTimeout
、maxAttempts
もアプリケーションに合わせて適切に設定すること。
ちなみにデフォルト値は以下。
public static final int DEFAULT_TIMEOUT = 2000;
public static final int DEFAULT_MAX_ATTEMPTS = 5;