英文:
Why can't it see tables from dynamodb local container when using `aws-sdk-go-v2`?
问题
我正在启动一个在我的笔记本上运行的 DynamoDB Docker 容器(amazon/dynamodb-local:1.16.0)。我通过 aws dynamodb create-table
在实例上创建了一个表。
我可以从本地命令行看到这个表:
AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test aws dynamodb list-tables --region local-env --endpoint-url http://localhost:8000
{
"TableNames": [
"test"
]
}
但是当我使用 github.com/aws/aws-sdk-go-v2/service/dynamodb
库在 Go 应用程序中时,找不到这个表。
我的 Go 代码如下:
cfg, err := config.LoadDefaultConfig(context.TODO(),
config.WithRegion("local-env"),
config.WithEndpointResolver(aws.EndpointResolverFunc(
func(service, region string) (aws.Endpoint, error) {
return aws.Endpoint{URL: "http://localhost:8000"}, nil
})),
config.WithCredentialsProvider(credentials.StaticCredentialsProvider{
Value: aws.Credentials{
AccessKeyID: "test", SecretAccessKey: "test",
},
}),
)
if err != nil {
panic(err)
}
db := dynamodb.NewFromConfig(cfg)
tables, _ := db.ListTables(context.TODO(), &dynamodb.ListTablesInput{})
fmt.Println("tables", tables.TableNames)
// 输出结果为:
tables []
我使用的是与命令行相同的端点和凭证,但不明白我做错了什么。
英文:
I am launching a dynamodb docker container (amazon/dynamodb-local:1.16.0) running on my laptop. And I created a table on the instance via aws dynamodb create-table
.
I am able to see the table from my local command line:
AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test aws dynamodb list-tables --region local-env --endpoint-url http://localhost:8000
{
"TableNames": [
"test"
]
}
But I can't find the table when using github.com/aws/aws-sdk-go-v2/service/dynamodb
library from a go application.
The code I have in go is:
cfg, err := config.LoadDefaultConfig(context.TODO(),
config.WithRegion("local-env"),
config.WithEndpointResolver(aws.EndpointResolverFunc(
func(service, region string) (aws.Endpoint, error) {
return aws.Endpoint{URL: "http://localhost:8000"}, nil
})),
config.WithCredentialsProvider(credentials.StaticCredentialsProvider{
Value: aws.Credentials{
AccessKeyID: "test", SecretAccessKey: "test",
},
}),
)
if err != nil {
panic(err)
}
db := dynamodb.NewFromConfig(cfg)
tables, _ := db.ListTables(context.TODO(), &dynamodb.ListTablesInput{})
fmt.Println("tables", tables.TableNames)
// output is:
tables []
I am using the same endpoint, credential as the command line but don't understand what I did wrong.
答案1
得分: 3
我遇到了同样的问题。
最初,我使用以下命令启动Dynamodb Docker容器:
# 不起作用
docker run -p 8000:8000 amazon/dynamodb-local
这样可以让我通过CLI与Dynamo交互,但是当我通过SDK与Dynamo交互时,无法看到我从CLI创建的表。
最后我偶然发现了DynamoDB本地使用说明。从那里我意识到我需要运行一个不同的命令来启动Dynamodb。
# 这对我起作用
docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
不同之处在于我们告诉Dynamo使用一个共享的数据库文件。
我怀疑的是,通过CLI连接时使用了我的本地AWS凭证,从而创建了一个定制的数据库文件。当我尝试使用SDK连接时,我的凭证不可用,因此Dynamo会创建一个新的数据库文件。
英文:
I ran into the same issue.
Initially I was starting the Dynamodb Docker container with this command
# Does not work
docker run -p 8000:8000 amazon/dynamodb-local
This would allow me to interact with Dynamo from the CLI, but when I interacted with Dynamo from the SDK, I could not see the tables I had created from the CLI.
Eventually I stumbled upon DynamoDB local usage notes. From there I realized I need to run a different command to start Dynamodb.
# This worked for me
docker run -p 8000:8000 amazon/dynamodb-local -jar DynamoDBLocal.jar -sharedDb
The difference is that we are telling Dynamo to use a shared database file.
I suspect what is happening is that connecting through the CLI uses my local AWS credentials and thus creates a bespoke database file. When I try to connect using the SDK, my credentials are not available, so Dynamo creates a new database file.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论