AWS ElastiCacheは同一VPC内EC2からしかアクセスできないそうです。
ステップ 4: アクセスを許可する - Amazon ElastiCache より引用
すべての ElastiCache クラスターは Amazon EC2 インスタンスからアクセスするように設計されています。クラスターとその関連 EC2 インスタンスは同じ Amazon Virtual Private Cloud (Amazon VPC) にあることが必要です。同じ VPC 内の EC2 インスタンス以外の場所から ElastiCache クラスターにアクセスする必要がある場合は、回避策としてキャッシュの VPC 内に EC2 ホストを 1 つ以上セットアップして外部のプロキシとして動作させることができます。
そこで、言われたとおりEC2をプロキシにして外部ネットワークからの接続を試してみます。
手順
IPアドレスを下記のようにおきます。
- AWS ElastiCache エンドポイントIP: xxx.xxx.xxx.xxx
- AWS EC2 プロキシサーバ パブリックIP: yyy.yyy.yyy.yyy ※ElasticIP推奨
- 外部のソースIP: zzz.zzz.zzz.zzz
ElastiCache構築
セキュリティグループで「セキュリティグループ自身からの11211ポート」を許可して構築します。
後は適当です。t2.microでmemcache1.4.24にしました。
EC2構築
セキュリティグループで「zzz.zzz.zzz.zzzからのSSH(22)ポート」「zzz.zzz.zzz.zzzからの11211ポート」を許可して構築します。
後は適当です。t2.nanoでAmazonLinuxにしました。
SSHでEC2インスタンス内に入り、iptablesによるIPフォワーディング設定を有効化します。
$ ssh -i ~/.ssh/(生成した鍵) ec2-user@yyy.yyy.yyy.yyy
$ sudo su -
# yum install telnet iptables
# sysctl -w net.ipv4.ip_forward = 1
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11211 -j DNAT --to xxx.xxx.xxx.xxx:11211
※sysctlとiptables設定は、ずっと使うなら/etc下に記述して永続化を推奨
接続確認
古の強大なTELNETプロトコルを使って接続の検証をします。
まず内部EC2から。
[ec2-user@ip-yyy-yyy-yyy-yyy ~]$ telnet xxx.xxx.xxx.xxx 11211
Trying xxx.xxx.xxx.xxx...
Connected to XXXXX.XXXXXX.XXXX.XXXXX.cache.amazonaws.com.
Escape character is '^]'.
^]
外部から。
[argus@01110110111 ~]$ telnet xxx.xxx.xxx.xxx 11211
Trying xxx.xxx.xxx.xxx...
Connected to XXXXX.XXXXXX.XXXX.XXXXX.cache.amazonaws.com.
Escape character is '^]'.
^]
成功しました。