EC2からElastiCache Redisノードに接続する
EC2(Amazon Linux 2015.09)からElastiCache Redisの各Redisノードに接続し、コマンド実行する方法を紹介します。
ElastiCache Redisは2017/10末から通信の暗号化に対応しました。通信を暗号化している場合は次のブログを参照下さい。
Redisノードのエンドポイントを確認
- マネージメントコンソール
- CLI
の2通りで確認します。
1.マネージメントコンソールから確認
メニューから「ElastiCache→Cache Clusters」と遷移し、クラスター一覧画面に移動します。
エンドポイントを確認したいクラスターの「Nodes」列をクリックすると、ノード一覧画面に遷移します。
Redisの場合は、1クラスターにつき1ノードだけが存在します。
エンドポイントは「Endpoint」列に表示されています。
2.AWS CLIから確認
elasticache describe-cache-clusters
API を使います。
引数無しでAPIを呼び出してみます。
$ aws elasticache describe-cache-clusters { "CacheClusters": [ { "Engine": "redis", "CacheParameterGroup": { "CacheNodeIdsToReboot": [], "CacheParameterGroupName": "my-redis-28", "ParameterApplyStatus": "in-sync" }, "CacheClusterId": "test", "CacheSecurityGroups": [], "NumCacheNodes": 1, "CacheClusterCreateTime": "2016-03-12T03:49:42.156Z", "AutoMinorVersionUpgrade": true, "CacheClusterStatus": "available", "PreferredAvailabilityZone": "ap-northeast-1a", "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", "SecurityGroups": [ { "Status": "active", "SecurityGroupId": "sg-11111111" } ], "CacheSubnetGroupName": "default", "EngineVersion": "2.8.24", "PendingModifiedValues": {}, "PreferredMaintenanceWindow": "sat:18:00-sat:19:00", "CacheNodeType": "cache.t2.small" } ] }
ノードのエンドポイントがレスポンスに含まれていません。
ノードのエンドポイントをレスポンスに含めるには --show-cache-node-info
オプション を渡します。
$ aws elasticache describe-cache-clusters --show-cache-node-info { "CacheClusters": [ { "Engine": "redis", "CacheNodes": [ { "CacheNodeId": "0001", "Endpoint": { "Port": 6379, "Address": "test.asdfqw.0001.apne1.cache.amazonaws.com" }, "CacheNodeStatus": "available", "ParameterGroupStatus": "in-sync", "CacheNodeCreateTime": "2016-03-12T03:49:42.156Z", "CustomerAvailabilityZone": "ap-northeast-1a" } ], ... } ] }
CacheNodes
のブロックにノードのエンドポイントが表示されるようになりました。
--query
オプションを使うと、エンドポイントだけを抽出できます。
$ aws elasticache describe-cache-clusters --show-cache-node-info --query 'CacheClusters[].CacheNodes[].Endpoint.Address' [ "test.asdfqw.0001.apne1.cache.amazonaws.com" ]
あとはこのエンドポイントに向けて接続すれば良いだけですね。
Redisノードに接続
以下では様々な方法でRedisノードに接続します。
- netcat(nc) を使う
- telnet を使う
- Redisをソースコードからインストール
- Redisをyumでインストール
Redisのデフォルトポート6379の指定は適宜省きます。
1.netcat(nc)を使う
デフォルトでインストールされている nc
を使います。
急ぎの時にサクッと接続する場合は、この方法が良いかと思います。
コマンドの実行
エンドポイントとポートを指定します。
$ nc test.asdfqw.0001.apne1.cache.amazonaws.com 6379 ping +PONG quit +OK
バッチ形式でコマンドを渡すこともできます。
$ (echo ping;sleep 1) | nc test.asdfqw.0001.apne1.cache.amazonaws.com 6379 +PONG
注意点としては、sleep
を挟まないとレスポンスを受け取る前に nc
が終了してしまいます。
2. telnet
telnet
で接続します。
インストール
Amazon Linux では telnet
がデフォルトでインストールされていないのでyum
でインストールします。
$ sudo yum install -y telnet
コマンドの実行
エンドポイントとポートを指定します。
$ telnet test.asdfqw.0001.apne1.cache.amazonaws.com 6379 Trying 172.31.17.24... Connected to test.asdfqw.0001.apne1.cache.amazonaws.com. Escape character is '^]'. ping +PONG quit +OK Connection closed by foreign host.
nc
の時と同じく、バッチ形式でコマンドを実行した時にレスポンスを確認するには sleep
を挟みます。
$ (echo ping;echo quit;sleep 1) | telnet test.asdfqw.0001.apne1.cache.amazonaws.com 6379 Trying 172.31.17.24... Connected to test.asdfqw.0001.apne1.cache.amazonaws.com. Escape character is '^]'. +PONG +OK Connection closed by foreign host.
3. Redisをソースコードからインストール
ベンチマークツールなどRedis付属のツールが使えるため、ビルドが手間でなければ一番おすすめです。
インストール
事前準備として gcc/make
など C プログラムのビルドに必要なツールをインストールします。
$ sudo yum -y install gcc
あとはC系プログラムのいつもの手順でインストールします。
$ wget http://download.redis.io/releases/redis-2.8.24.tar.gz $ tar xzf redis-2.8.24.tar.gz $ cd redis-2.8.24 $ make ... Hint: It's a good idea to run 'make test' ;) make[1]: Leaving directory `/home/ec2-user/redis-2.8.24/src' $ sudo make install $ ls -1 /usr/local/bin/ redis-benchmark redis-check-aof redis-check-dump redis-cli redis-sentinel redis-server
コマンドの実行
$ redis-cli -h test.asdfqw.0001.apne1.cache.amazonaws.com -p 6379 test.asdfqw.0001.apne1.cache.amazonaws.com:6379> ping PONG test.asdfqw.0001.apne1.cache.amazonaws.com:6379> quit
ENDPOINT:PORT>
というシェルが起動します。
インストールされるプログラム一覧
Redis 2.8をソースからコンパイルした時にインストールされるプログラムは以下です。
redis-cli | 今回のメインとなる、コマンドラインターフェースです。 |
redis-benchmark | ベンチマークプログラムです。 |
redis-check-aof | AOFファイルののチェックとデータ修正を行うプログラムです。 |
redis-check-dump | RDBダンプファイルのチェックプログラムです。データ修正は行いません。 |
redis-sentinel | Redis サーバーの監視・モニタリングプログラムです。 |
redis-server | Redis サーバーです。EC2上でRedisを運用しないかぎり、起動は不要です。 |
4. Redisをyumでインストール
Amazon Linuxの標準レポジトリにはRedisはパッケージ化されていないため、epel レポジトリからインストールします。
インストール
$ sudo yum install -y redis --enablerepo=epel $ redis-cli --version redis-cli 2.4.10
残念な点としては、ElastiCacheのRedisは2.8系なのに対し、epel版はバージョンが 2.4.10 と随分古いことでしょうか。
接続方法のまとめ
以上を元に、接続方法の違いを表にまとめました。
接続方法 | インストール | コマンド実行 | 備考 |
netcat(nc) を使う | 不要 | 生で実行 | 任意のEC2インスタンスからコマンド実行するときにおすすめ |
telnet を使う | yum | 生で実行 | |
Redisをソースコードからインストール | ソースからコンパイル。 めんどくさい | CLI。各種Redisツール利用可能 | VPC内の一台にはRedisツール群をインストールして、ベンチマークその他で活用したい。 |
Redisをyumでインストール | yum | CLI。各種Redisツール利用可能 | バージョンが2.4と2世代古いのでおすすめできない |
「netcat(nc)を使う」と「Redisをソースコードからインストール」がおすすめです。