このブログをご覧のみなさん、こんにちは。

Amazon ElastiCache は同一 VPC 内の EC2 からしかアクセスができない制限があります。

ステップ 4: アクセスを許可する – Amazon ElastiCache

そのため、AWS 外部から Amazon ElastiCache リソースにアクセスする方法について、以下のリンクの通り、NAT インスタンス経由でアクセスする方法が記載されていますが、メンテナンス性も悪く、手順が煩雑です。

AWS 外部からの ElastiCache リソースへのアクセス – Amazon ElastiCache

そこで、同一 VPC 内の EC2 上で HAProxy を動作させ、HAProxy 経由でアクセスする方法が分かったので、紹介します。

注意事項

前提

本手順は、以下を前提としています。

  • Amazon ElastiCache と EC2 を同一VPC内で構築している
  • EC2 から Amazon ElastiCache 、クライアントマシン から EC2 は疎通できている

手順

疎通確認

EC2 上で、EC2 から Amazon ElastiCache への疎通確認をします。

$ nc {Amazon ElastiCache の Endpoint-URI} 6379
ping
+PONG
quit
+OK

HAProxy のインストールおよび設定

$ sudo yum install haproxy -y
$ sudo mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy-org.cfg
$ sudo vi /etc/haproxy/haproxy.cfg

以下の内容にします。

global
log 127.0.0.1 local2 notice
maxconn 4096
chroot /var/lib/haproxy
user nobody
group nobody
daemon
defaults
log global
mode tcp
retries 3
option redispatch
maxconn 2000
timeout connect 2s
timeout client 120s
timeout server 120s
frontend monitor
bind :80
mode http
stats enable
stats show-legends
stats uri /haproxy?stats
stats auth {認証ID}:{Password}
frontend redis
bind :6379
default_backend redis_backend
backend redis_backend
option tcp-check
tcp-check send PING
tcp-check expect string +PONG
tcp-check send INFO REPLICATION
tcp-check expect string role:master
tcp-check send QUIT
tcp-check expect string +OK
server redis1 {Amazon ElastiCache の Endpoint-URI}:6379 check inter 1s

HAProxy の起動および動作確認

$ sudo service haproxy start
$ sudo netstat -antp
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 2751/haproxy

HAProxy が TCP:6379LISTEN していることを確認します。

EC2 上で以下のコマンドを実行し、自分自身の 6379 に接続し、Amazon ElastiCache に対して接続できるか確認します。

$ nc localhost 6379
ping
+PONG
quit
+OK

クライアントマシン上で以下のコマンドを実行し、Amazon ElastiCache に対して接続できるか確認します。

$ nc {EC2 の Endpoint-URI} 6379
ping
+PONG
quit
+OK

参考資料