この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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をソースコードからインストール」がおすすめです。