当投影类型更改时,如何更新 dynamodb GSI?

Zha*_* Yi 6 amazon-dynamodb serverless-framework

我正在使用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吗?这样做的正确方法是什么?

小智 8

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

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

这对我来说就是这样的。

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


Jit*_*mar 1

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

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

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

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