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
...
总结:已知在 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
...