【问题标题】:AWS DynamoDB resource not found exceptionAWS DynamoDB 资源未找到异常
【发布时间】:2017-03-04 16:32:38
【问题描述】:

我在连接到 DynamoDB 时遇到问题。我得到了这个例外:

com.amazonaws.services.dynamodb.model.ResourceNotFoundException: 未找到请求的资源(服务:AmazonDynamoDB;状态代码: 400;错误代码:ResourceNotFoundException;请求 ID:..

但我有一个表和区域是正确的。

【问题讨论】:

  • Terraform S3 后端有这个问题吗?我在更改 Terraform 的后端配置后遇到了同样的问题,发现 Terraform 没有使用来自 terraform.tf 的值,而是来自存储在 .terraform/terraform.tfstate 中的状态。
  • 这周我也遇到了这个问题。重启我的 EC2 实例目前似乎已经解决了它。奇怪...

标签: amazon-web-services amazon-dynamodb


【解决方案1】:

docs 来看,要么您没有具有该名称的表,要么它处于创建状态。

我会仔细检查以确认该表确实存在于正确的区域,并且您使用的访问密钥可以访问它

【讨论】:

  • 我确实在寻找不同的地区。通过查看正确的区域来修复它。谢谢!
  • 对我来说,这是我的访问密钥,它用于不同的帐户。我好傻。你摇滚!
  • 我不知何故这两个区域都错了,昨晚在更新架构后尝试重新创建表时删除了表。所以我的双重失败......
  • 如果您仍然遇到像我一样的问题,请检查您的 JavaScript 对象实例化。我有RequestItems: { tableName: item_row }。但我需要直接使用表名:RequestItems: { "myTable": item_row }。问题是我的 tableName 变量没有被访问。请求中的表名始终为tableName,显然不存在。
  • 如果您从sls offline 尝试,请确保您已正确设置环境变量。
【解决方案2】:

我的问题很愚蠢,但也许有人有同样的问题...我最近更改了 aws 的默认凭据 (~/.aws/credentials),我在另一个帐户中进行测试,忘记将值回滚到普通帐户。

【讨论】:

  • 我手动创建了表格,它工作正常。由于多次创建和删除表,也会发生这种情况。
【解决方案3】:

如果 DynamoDB 表位于不同的区域,请确保在初始化 DynamoDB 之前设置它

AWS.config.update({region: "your-dynamoDB-region" });

这对我有用:)

【讨论】:

  • 那帮我解决了,或者检查你是否在你想要的区域创建了表。
【解决方案4】:

始终确保您执行以下操作之一:

  1. 正确的默认区域是在您正在使用的所有服务器和开发机器上的 AWS CLI 配置文件中设置的。
  2. 最好的选择是始终在项目的单独类/配置中明确指定这些常量。始终在代码中导入它并在 boto3 调用中使用它。如果您要根据企业要求添加或更改,这将提供灵活性。

【讨论】:

    【解决方案5】:

    我花了 1 天时间研究我的项目中的问题,现在我应该偿还人类的债务并减少一点宇宙的熵。 通常,此消息表明您的客户无法访问数据库中的。 您应该检查以下内容:

    1. Your database is running
    2. Your accessKey and secretKey are valid for the database
    3. Your DB endpoint is valid and contains correct protocol ("http://" or "https://"), and correct hostname, and correct port
    4. Your table was created in the database.
    5. Your table was created in the database in the same region that you set as a parameter in credentials. Optional, because some
    database environments (e.g. Testcontainers Dynalite) don't have an incorrect value for the region. And any nonempty region value will be correct
    

    在我的案例中,问题是我无法在使用 DynamoDB 被 Testcontainers 和 Dynalite 替代的测试中保存和加载表中的数据。我发现在我们的项目表中,由带有 @Component 注释的 Spring 组件创建。在测试中,我们使用全局设置来延迟加载组件来测试,所以我们的组件默认没有加载,因为没有人在测试中显式调用它。 ¯_(ツ)_/¯

    【讨论】:

      【解决方案6】:

      如果你的资源和我的一样,而且到处都是,你可以在创建资源时定义 region_name。

      我对所有实例都这样做,因为它迫使我思考我在哪里放置/调用什么。

      boto3.resource("dynamodb", region_name='us-east-2')

      【讨论】:

      • 我不认为这回答了这个人的问题。您会考虑为您的建议写评论而不是解决方案吗?
      【解决方案7】:

      我在我的 .NetCore 应用程序中遇到了这个问题。 以下在 Startup 类中为我解决了问题 --> ConfigureServices 方法

              services.AddDefaultAWSOptions(
                  new AWSOptions
                  {
                      Region = RegionEndpoint.GetBySystemName("eu-west-2")
                  });
      

      【讨论】:

        猜你喜欢
        • 2015-10-11
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多