由 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
使用 terraform 设置由预定事件源触发的 lambda 函数