【问题标题】:DynamoDB table created by Terraform in LocalStack not visible in NoSQL Workbench由 Terraform 在 LocalStack 中创建的 DynamoDB 表在 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 账户设置,例如区域、密钥等。

【问题讨论】:

    标签: amazon-dynamodb terraform-provider-aws localstack


    【解决方案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   
      
        ...
      
      

      【讨论】:

        猜你喜欢
        • 2021-05-14
        • 1970-01-01
        • 2022-11-26
        • 2016-10-12
        • 2020-07-19
        • 2016-04-08
        • 1970-01-01
        • 2021-04-28
        • 2022-08-22
        相关资源
        最近更新 更多