このブログをご覧のみなさん、こんにちは。
Amazon ElastiCache は同一 VPC 内の EC2 からしかアクセスができない制限があります。
ステップ 4: アクセスを許可する – Amazon ElastiCache
そのため、AWS 外部から Amazon ElastiCache リソースにアクセスする方法について、以下のリンクの通り、NAT インスタンス経由でアクセスする方法が記載されていますが、メンテナンス性も悪く、手順が煩雑です。
AWS 外部からの ElastiCache リソースへのアクセス – Amazon ElastiCache
そこで、同一 VPC 内の EC2 上で HAProxy を動作させ、HAProxy 経由でアクセスする方法が分かったので、紹介します。
注意事項
- AWS 外部からの ElastiCache リソースへのアクセス – Amazon ElastiCacheの「制約事項」にも記載されていますが、テストおよび開発の目的にしか使用できません
前提
本手順は、以下を前提としています。
- 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:6379
で LISTEN
していることを確認します。
EC2 上で以下のコマンドを実行し、自分自身の 6379
に接続し、Amazon ElastiCache に対して接続できるか確認します。
$ nc localhost 6379
ping
+PONG
quit
+OK
クライアントマシン上で以下のコマンドを実行し、Amazon ElastiCache に対して接続できるか確認します。
$ nc {EC2 の Endpoint-URI} 6379
ping
+PONG
quit
+OK