我正在查看DynamoDB Go SDK文档,但我找不到如何连接到本地版本的DynamoDB。我错过了什么?
答案 0 :(得分:1)
您可以在本地下载并运行AWS DynamoDB,如果您真的想用本地计算机加载它:
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html
但没有必要。
相反,在针对AWS开发时,我总是使用Docker
来托管本地依赖项。我花了>我上下班途中每天4小时无法访问互联网。因此,离线开发至关重要。
从未使用过Docker?这真的很容易。
然后运行:
docker run -d -p 8000:8000 -v /tmp/data:/data/ dwmkerr/dynamodb -dbPath /data/
您将在localhost:8000
本地启动并运行DynamoDB。对应用程序进行编码以使用配置文件并将默认/本地dev配置文件设置为使用localhost:8000 for dynamodb并运行测试。完成。
我为所有应用程序AWS和GCE依赖项执行此操作,例如AWS S3,Redis / ElasticCache,ElasticSearch等。
有几个“模拟”Docker容器可以模仿这些在线服务。目标是找到一个满足您需求的容器,在本地运行并使用它。例如,虽然大多数可用的AWS S3 docker容器支持大多数S3 API,但它们都不支持S3 Turbo - 如果您认为它实际上超出了本地容器的上下文。尽管如此,请注意某些模拟容器可能存在的某些限制。
对于更复杂的依赖链,请阅读Docker-Compose,这是一种使用单个命令编排一大堆依赖关系的方法:docker-compose up
和docker-compose down
就是这样。
注意:Docker文件系统通常是瞬态的,这意味着它们不会持久存在。在我之前的DynamoDB Docker容器示例中,它指定了一种在容器重启期间保留持久数据的方法。
如果您不关心持久化数据(我不这样,那就是集成测试的目的 - 谁想要保留几百万个测试帐户?),那么您可以运行:
docker run -d -p 8000:8000 dwmkerr/dynamodb
当容器关闭时,所有更改都将丢失:非常适合本地开发和几百次集成测试!
答案 1 :(得分:1)
我遇到了类似的挑战,并且能够在设置 AWS 环境变量后执行类似的操作。我还使用了 "github.com/aws/aws-sdk-go/aws/credentials"
库。
os.Setenv("AWS_ACCESS_KEY_ID", "dummy1")
os.Setenv("AWS_SECRET_ACCESS_KEY", "dummy2")
os.Setenv("AWS_SESSION_TOKEN", "dummy3")
然后我添加这些语句以获取 aws 凭据并开始我的会话
creds := credentials.NewEnvCredentials()
creds.Get()
sess, err := session.NewSession(&aws.Config{
Region: aws.String("us-east-1"),
Endpoint: aws.String("http://localhost:8000"),
Credentials: creds,
})
if err != nil {
return errors.Wrap(err, "error creating dynamodb session")
}
svc := dynamodb.New(sess)
答案 2 :(得分:0)
我相信您想使用Config的Endpoint属性:https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
面对相同的问题,如果确实如此,将会更新
答案 3 :(得分:-1)
dynamodb的本地版本使用本地主机,并在您正在使用的本地数据库运行程序上指定端口
然后在您的代码中,创建一个配置了端点URL的服务会话
sess := session.NewSession(&aws.Config{
Region: aws.String("us-east-1"),
Endpoint: aws.String("http://localhost:8000"),
})
svc := dynamodb.New(sess)
// using dynamodb service sdk
err := svc.Scan(&dynamodb.ScanInput{..})