如何在AWS Go SDK中使用本地DynamoDB?

时间:2017-03-13 04:31:52

标签: integration-testing amazon-dynamodb aws-sdk

我正在查看DynamoDB Go SDK文档,但我找不到如何连接到本地版本的DynamoDB。我错过了什么?

4 个答案:

答案 0 :(得分:1)

您可以在本地下载并运行AWS DynamoDB,如果您真的想用本地计算机加载它:

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html

但没有必要。

相反,在针对AWS开发时,我总是使用Docker来托管本地依赖项。我花了>我上下班途中每天4小时无法访问互联网。因此,离线开发至关重要。

从未使用过Docker?这真的很容易。

  1. 为您的操作系统下载Docker并安装它。
  2. 打开终端(Windows:CMD或Powershell,OSX:普通终端)。
  3. 然后运行:

    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 updocker-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{..})