DynamoDB table 由 Terraform 在 LocalStack 中创建,在 NoSQL Workbench 中不可见

DynamoDB table created by Terraform in LocalStack not visible in NoSQL Workbench

总结:已知在 NoSQL Workbench 中出现的代码和配置在使用 DynamoDB Local 时神秘地不适用于 LocalStack:尽管连接有效,tables 不再显示在 NoSQL Workbench 中(但在使用 aws-cli 时继续显示)。


我在 DynamoDB Local running in Docker that worked in NoSQL Workbench 中创建了一个 table。我编写代码为该数据库播种,一切正常并在 NoSQL Workbench.

中显示出来

我切换到LocalStack (so I can interact with other AWS services locally). I was able to create a table with Terraform and can seed it with my code (using the configuration given here)。使用 aws-cli,我可以看到 table,等等

但是在 NoSQL Workbench 中,我看不到我在连接时创建和播种的 table,如下所示。没有连接错误; table 就是不存在。它似乎与 here 中描述的错误问题无关,因为重新启动应用程序没有帮助。我没有更改任何 AWS 账户设置,如区域、密钥等。

总结:要将 NoSQL Workbench 与 LocalStack 一起使用,请在您的代码和 Terraform 配置中将区域设置为 localhost,并修复由此产生的验证错误(说没有 localhost 区域)通过在 Terraform 配置的 aws 提供程序块中将 skip_region_validation 设置为 true。


上面截图中披露的问题:

NoSQL Workbench 使用 localhost 区域。

当使用 DynamoDB Local 时,它出现 region is ignored,所以这个怪癖被隐藏了(即 Terraform 文件中的区域和我的代码 不匹配一方面,NoSQL Workbench 另一方面,但与 DyanmoDB Local 无关)。

但是没有忽略LocalStack区域,所以问题就出现了。

我不会写这篇文章,除非我花了一些时间才弄清楚另一个怪癖。当我这样更新 Terraform 配置时:

provider "aws" {
  access_key = "mock_access_key"
  // For compatibility with NoSQL workbench local connections
  region                      = "localhost"

我在 运行 terraform apply:

时开始收到此错误
╷
│ Error: Invalid AWS Region: localhost
│
│   with provider["registry.terraform.io/hashicorp/aws"],
│   on main.tf line 1, in provider "aws":
│    1: provider "aws" {
│
╵

我仔细研究了一下,在 Terraform 的 AWS 提供商存储库中发现了这个 issue,它解释了您应该这样做:

provider "aws" {
  access_key = "mock_access_key"
  // For compatibility with NoSQL workbench local connections
  region                      = "localhost"
  skip_region_validation      = true

如果您不想将区域更改为本地主机,还有另一种解决方案。来自 LocalStack docs:

"DYNAMODB_SHARE_DB:激活后,DynamodDB 将为每个凭证和区域使用单个数据库,而不是单独的数据库。"

例如将变量添加到您的 docker-compose.yml

  ...

  localstack:
    container_name: my_localstack
    image: "localstack/localstack:0.13.0.8"
    environment:
      - DYNAMODB_SHARE_DB=1   

  ...