Amazon DAX 客户端抛出 "No endpoints available" 异常

Amazon DAX client throws "No endpoints available" exception

我正在尝试使用以下代码从本地主机连接到 DAX:

    ClientConfig daxConfig = new ClientConfig()
            .withEndpoints("dax-cluster.yhdqu5.clustercfg.dax.use1.cache.amazonaws.com:8111");
    AmazonDaxClient client = new ClusterDaxClient(daxConfig);

集群已启动并且 运行,我在 public 子网中创建了它并在安全组中打开了端口 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.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

Whosebug 上的其他答案表明这可能是由错误配置的安全组引起的,为了测试它,我在同一个 VPC/subnet 中启动了一个实例并使用了相同的安全组,我能够通过 ssh到此主机(安全组中打开了 22nd 和 8111-st 端口)。所以应该还有其他一些与 DAX 相关的原因。

我机器上的防火墙已关闭。

但是如果我通过 ssh 连接到 EC2 中的一台机器,那么我就可以连接到 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!

您只能从与 DAX 集群位于同一 VPC 中的 EC2 计算机连接到 DAX。除非你的本地主机是同一个 VPC 中的 EC2 实例,否则它将无法连接到 DAX 集群。

如果您从 lambda 进行调用,请确保您在同一个 vpc 中有 lambda 运行,它已授予 iam 角色以访问 dax,并且已为安全组打开 dax 端口

有一种方法可以从 VPC 外部访问它,您必须创建一个 NLB which fronts the dax replicas. Then you need to use VPC endpoint service 来提供一个可以访问它的 link。然后,您可以使用提供的端点进行调用。

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