由 Terraform 在 LocalStack 中创建的 DynamoDB 表在 NoSQL Workbench 中不可见

Posted

技术标签:

【中文标题】由 Terraform 在 LocalStack 中创建的 DynamoDB 表在 NoSQL Workbench 中不可见【英文标题】:DynamoDB table created by Terraform in LocalStack not visible in NoSQL Workbench 【发布时间】:2021-11-23 03:58:03 【问题描述】:

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


我在DynamoDB Local running in Docker 中创建了一个在NoSQL Workbench 中工作的表。我编写了代码来为该数据库提供种子,所有这些都在 NoSQL Workbench 中运行并显示。

我切换到LocalStack(这样我可以在本地与其他 AWS 服务进行交互)。我能够使用 Terraform 创建一个表,并可以使用我的代码为它播种(使用给定的配置 here)。使用aws-cli,我可以看到表格等。

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

【问题讨论】:

【参考方案1】:

总结:要将 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

【讨论】:

【参考方案2】:

如果您不想将您的区域更改为 localhost,还有另一种解决方案。来自 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   

  ...

【讨论】:

以上是关于由 Terraform 在 LocalStack 中创建的 DynamoDB 表在 NoSQL Workbench 中不可见的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 localstack dynamoDB 锁定 terraform 状态:UnrecognizedClientException

Werkzeug之LocalStack源码解析

使用 terraform 设置由预定事件源触发的 lambda 函数

使用 terraform 设置由预定事件源触发的 lambda 函数

Localstack 抛出请求中包含的安全令牌无效

localstack 线程隔离