【问题标题】:How can I update dynamodb GSI when projection type is changed?更改投影类型时如何更新 dynamodb GSI?
【发布时间】:2020-11-08 13:29:31
【问题描述】:

我正在使用serverless 框架来管理 AWS 基础设施,并且我已经定义了一个带有 GSI 的 dynamodb 表。现在我需要更新 GSi 的投影类型,我知道这是不允许的。所以我从 dynamodb 表中手动删除了 GSI,但在运行 sls deploy 时仍然出现以下错误:

An error occurred: DeviceTable - Cannot update GSI's properties other than Provisioned Throughput. You can create a new GSI with a different name..

我不明白的是,GSI 已被删除,但为什么它仍然抱怨 GSI 的属性。有没有什么地方记得GIS?这样做的正确方法是什么?

【问题讨论】:

  • 您是否确认 GSI 删除过程已完成?我不确定创建 GSI 是否应该花费大量时间,但我会确保在尝试创建具有相同名称的新 GSI 之前将其删除。您可以在 AWS 控制台的表格页面中检查这一点。如果它没有被删除,您可以通过检查来自docs.aws.amazon.com/amazondynamodb/latest/developerguide/…的相关 DynamoDB CloudWatch 材料来查看进度
  • 是的,它已被删除。桌子很小,只有几百件。我在删除 GSI 后尝试了 1 天

标签: amazon-dynamodb serverless-framework


【解决方案1】:

我有同样的错误。我使用 CDK,但我认为问题与无服务器框架相同。我解决了如下:

  1. 从您的配置文件(serverless.yaml 或 CDK 文件)中删除受影响的索引。
  2. 部署完整的堆栈,而不仅仅是一个功能
  3. 再次添加新的或更改的索引
  4. 部署完整的堆栈,而不仅仅是一个功能

这对我来说是这样的。

ps:不能用新的索引替换,如上所述,需要删除旧的,然后添加新的。或者您最终会收到类似这样的错误消息:“无法在一次更新中执行多个 GSI 创建或删除”

【讨论】:

    【解决方案2】:

    我也遇到过同样的问题。我尝试更改我的 ProjectionType 但之后我的 serverless deployment 开始失败并出现相同的错误。 如问题中所述,我还从 DynamoDb 中删除了我的 GSI,但这对我也没有帮助。 谷歌搜索了很多之后,我没有得到正确的答案。但这就是我最终解决的方法。

    • 当您收到此错误时,您还会获得指向 CloudFormation 的链接 您尝试使用 GSI 更改更新的堆栈。
    • 点击此链接并转到您的 CloudFormation 堆栈,然后单击 Template 选项卡。
    • 然后单击View in Designer 按钮或链接您所称的任何内容。
    • 它将在 Designer 模板中加载您的堆栈。
    • 在底部窗口会询问您Choose template Language,选择YAML作为选项。
    • 找到您尝试应用 GSI 的 DynamoDb 表。您将在此处看到以前的旧 GSI 设置。
    • 现在请小心仅删除 GSI 设置,不要删除与 DynamoDb 表设置相关的任何内容。
    • 现在从左上角,您将看到重做、撤消和创建堆栈等几个选项。在那里您还可以找到一个链接Save
    • 将模板作为无服务器文件保存到本地计算机。
    • 现在返回Template 选项卡,这次单击按钮Update
    • 选择选项Replace current templateUpdate a template file。这里上传之前保存的Serverless文件,点击next最后上传。
    • 现在等待一段时间,让 CloudFormation 为您更新模板。

    就是这样,现在如果您再次运行 yarn sls 命令,它不会阻止您部署新的 DynamoDb GSI 投影设置。

    还有一个提示,在 Cloud 上创建新的 GSI 需要一些时间,因此请耐心等待并在 Indexes 选项卡下的 DynamoDb 表上查找 Status Active

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多