Amazon DAX客户端抛出“无端点可用”异常

时间:2017-09-03 18:29:31

标签: amazon-dynamodb amazon-vpc amazon-dynamodb-dax

我正在尝试使用以下代码从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!

3 个答案:

答案 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);