Amazon dynamodb Dynamo DB本地-拒绝连接

Amazon dynamodb Dynamo DB本地-拒绝连接,amazon-dynamodb,aws-sdk,Amazon Dynamodb,Aws Sdk,我正在尝试使用AWS Java SDK连接到本地Dynamo DB。因此,我安装了本地的Dynamo DB并启动了javascript shell。所有工作正常,外壳从通常的地址开始http://localhost:8000/shell/ 现在,当我试图通过AWS SDK访问Dynamo DB实例时,事情开始破裂 这是我的密码: 公共类MyDynamoDB{ 私有Amazondynamodb客户端; 公共MyDynamoDB(){ client=新的AmazonDynamoDBClient();

我正在尝试使用AWS Java SDK连接到本地Dynamo DB。因此,我安装了本地的Dynamo DB并启动了javascript shell。所有工作正常,外壳从通常的地址开始
http://localhost:8000/shell/

现在,当我试图通过AWS SDK访问Dynamo DB实例时,事情开始破裂

这是我的密码:

公共类MyDynamoDB{
私有Amazondynamodb客户端;
公共MyDynamoDB(){
client=新的AmazonDynamoDBClient();
client.setEndpoint(“http://localhost:8000");
}
public void saveAndLoad(){
DynamoDBMapperConfig config=新的DynamoDBMapperConfig(新的表名覆盖(“xyz”);
DynamoDBMapper映射器=新的DynamoDBMapper(客户端,配置);
数据=新数据();
...
保存(数据);
//检查是否持续存在
数据d=mapper.load(Data.class,“Key”);
如果(d!=null){
System.out.println(“找到的数据:+d.getStuff());
}否则{
System.out.println(“未找到数据”);
}
}
}
运行此命令时,我将获得以下堆栈跟踪

Nov 19, 2015 4:00:47 PM com.amazonaws.http.AmazonHttpClient executeHelper
INFO: Unable to execute HTTP request: Connection refused: connect
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:304)

刚刚就同一个问题进行了斗争-在端点url上添加斜杠为我解决了这个问题

client.setEndpoint( "http://localhost:8000/");

您需要在命令提示符下触发DynamoDB

转到安装Dynamodb cli的位置并运行以下命令

java-Djava.library.path=./DynamoDBLocal_lib-jar DynamoDBLocal.jar-sharedDb


如果您正在使用SAM-LOCAL或使用eclipse开发aws lambda函数,请验证它是否正在运行。此答案可能很有用

简短回答为环回分配一个IP别名,以使用127.0.0.1的不同地址进行访问,并将端点更新为该地址

从命令行运行

ifconfig lo0别名172.16.123.1

从lambda代码而不是访问使用

有关说明,请参阅此

长话短说

lambda函数中的pom

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-dynamodb</artifactId>
    <version>1.11.313</version>
</dependency>
不要使用IP别名

ifconfig lo0 alias 172.16.123.1
用于从代码do访问DynmoDb

DynamoDB dynamoDb = new DynamoDB(AmazonDynamoDBClientBuilder.standard().withCredentials(new EnvironmentVariableCredentialsProvider()).withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("http://172.16.123.1:8000/", "local")).build());
完成lambda函数测试后,请执行以下操作

ifconfig lo0 -alias 172.16.123.1

如果您使用的是SAM-LOCAL,则无法直接访问localhost:8080

我找到了两种选择:

选项1

而不是打电话http://localhost:8080 ,您必须使用计算机的IP

选项2

在DynamoDB Docker容器上创建网络。您可以在此处找到不同的方法:


我最喜欢的:

你是如何开始使用DynamoDBLocal的?你能提供一个答案吗?我在通过Maven启动DynamoDb时遇到同样的问题。将/添加到终结点没有帮助。你找到解决办法了吗?@mark我没有时间继续做同样的事情。我看到Dani发布了一个答案,让我知道这是否有效。。。我会在几天后再试一次,如果有什么效果,我会发布一个答案。@AgentX我尝试了Dani的建议,但遗憾的是没有成功。如果你真的得到了什么,我会感兴趣的。@mark我知道已经晚了,但你能试试我的答案吗?选项1对我有用
ifconfig lo0 -alias 172.16.123.1