首页 > 解决方案 > 尝试在没有代理的情况下连接 Dynamo DB 时发生连接超时错误

问题描述

我的应用程序需要连接到 DynamoDB,实际上我的网络在代理后面运行。在尝试使用以下配置与代理连接 DynamoDB 时,它工作正常。

#DynamoDB configuration
amazon.dynamodb.endpoint=https://dynamodb.REGIONXXXX.amazonaws.com
amazon.dynamodb.region=XXXXXXXXX
spring.data.dynamodb.entity2ddl.auto=create-only
proxy.server.address=XXXXXXXXX
proxy.server.port=31XXXXX

DynamoDB 配置:

@Bean
public AmazonDynamoDB amazonDynamoDB() {
    return AmazonDynamoDBClientBuilder
            .standard()
            .withClientConfiguration(
                    PredefinedClientConfigurations.defaultConfig()
                            .withProxyHost(proxy)//we want to remove this code.
                            .withProxyPort(port))
            .withEndpointConfiguration(
                    new AwsClientBuilder
                            .EndpointConfiguration(amazonDynamoDBEndpoint, amazonDynamoDBRegion))
            .build();
}

要求是通过使用VPC端点连接它,这样我们相信我们可以在没有任何代理的情况下连接它。相同的配置需要什么?需要任何代码更改而不是删除代理?

我们使用以下策略配置了 VPC 端点:

{
"Statement": [
    {
        "Action": "*",
        "Effect": "Allow",
        "Resource": "*",
        "Principal": "*"
    }
]

}

但是尝试使用上面提到的相同代码(没有代理)连接 DynamoDB 会导致以下错误:

com.amazonaws.SdkClientException: Unable to execute HTTP request: Connect to dynamodb.XXXXXX-1.amazonaws.com:443 [dynamodb.XXXXXXX.amazonaws.com/XX.1XX.226.XXX] failed: connect timed out

请帮助解决这个问题。

标签: amazon-web-servicesspring-bootamazon-dynamodb

解决方案


DyanamoDB 与 S3 一样,使用 VPC 网关终端节点。启用 VPC 网关后,您可以只使用默认配置,因为 VPC 会处理将来自 EC2 实例的请求从私有 IP 地址路由到 DynamoDB。

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard()
.build();

注意:我不熟悉 AWS Java API,所以我从 AWS 示例代码中获取了上面的内容。

这假设您的安全组和 VPC 路由规则是正确的。


推荐阅读