7

我正在尝试使用以下代码从本地主机连接到 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 相关的原因。

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

但是,如果我 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!
4

3 回答 3

9

您只能从与 DAX 集群位于同一 VPC 中的 EC2 机器连接到 DAX。除非您的 localhost 是同一 VPC 中的 EC2 实例,否则它将无法连接到 DAX 集群。

于 2017-09-03T20:42:58.340 回答
4

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

于 2017-10-24T14:30:40.027 回答
3

有一种方法可以从 VPC 外部访问它,您必须创建一个位于 dax 副本前面的NLB 。然后你需要使用VPC 端点服务来提供一个可以访问它的链接。然后,您可以使用提供的端点进行呼叫。

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);
于 2020-05-29T20:22:01.210 回答