我正在尝试使用以下代码从localhost连接到DAX:
ClientConfig daxConfig = new ClientConfig()
.withEndpoints("dax-cluster.yhdqu5.clustercfg.dax.use1.cache.amazonaws.com:8111");
AmazonDaxClient client = new ClusterDaxClient(daxConfig);
群集已启动并正在运行,我已在公共子网中创建它并在安全组中打开了端口8111,但尽管如此,我还是收到以下异常:
Caused by: java.io.IOException: No endpoints available
at com.amazon.dax.client.cluster.Cluster.leaderClient(Cluster.java:560)
at com.amazon.dax.client.dynamodbv2.ClusterDaxClient$3.getClient(ClusterDaxClient.java:154)
at com.amazon.dax.client.dynamodbv2.ClusterDaxClient$RetryHandler.makeRequestWithRetries(ClusterDaxClient.java:632)
... 10 more
Suppressed: java.io.IOException: No endpoints available
... 13 more
Suppressed: java.io.IOException: No endpoints available
... 13 more
StackOverflow上的其他答案表明这可能是由于配置不正确的安全组造成的,并且要测试它我在同一个VPC /子网中启动了一个实例并使用了相同的安全组,我能够ssh到这个主机(在安全组中打开第22和第8111-st端口)。所以应该有其他DAX相关的原因。
我的机器上的防火墙已关闭。
但如果我在EC2中使用ssh,那么我可以连接到DAX集群:
[ec2-user@ip-10-0-0-44 ~]$ nc -z dax-cluster.yhdqu5.clustercfg.dax.use1.cache.amazonaws.com 8111
Connection to dax-cluster.yhdqu5.clustercfg.dax.use1.cache.amazonaws.com 8111 port [tcp/*] succeeded!
答案 0 :(得分:6)
您只能从与DAX群集相同的VPC中的EC2计算机连接到DAX。除非您的localhost是同一VPC中的EC2实例,否则它将无法连接到DAX群集。
答案 1 :(得分:3)
如果您正在使用lambda进行调用,请确保在同一个vpc中运行lambda,它已授予iam角色访问dax并且已打开安全组的dax端口
答案 2 :(得分:3)
有一种方法可以从VPC外部对其进行访问,您将必须创建一个NLB,它位于dax副本的前面。然后,您需要使用VPC endpoint service提供可以访问此链接的链接。然后,您可以使用提供的端点进行呼叫。
VPCEndpoint -> NLB -> Dax replica 1
-> Dax replica 2
然后您可以使用下面的代码示例连接到DAX
import com.amazon.dax.client.dynamodbv2.DaxClient;
AmazonDynamoDB amazonDynamoDb = new DaxClient(
"vpce-XXX-YYY.vpce-svc-ZZZ.us-west-2.vpce.amazonaws.com",
8111, region, credentials);