如何不允许在 DynamoDB 上删除特定项目?

How to not allow specific item get deleted on DynamoDB?

在我们的 DynamoDB 数据库中,我们有 table,由于 test_data,我们通常有成千上万的垃圾项目,我们会定期清理它们。 但是有一个特定的项目我们不想删除,但是当我们 select 全部删除时,那个项目也会被删除。

在 table 中有没有办法定义 ID 并阻止它被删除?还是有人来了要全删,就全删除了那个?

我能想到两个方案:

  1. 向可能执行此操作的任何人(或任何角色)添加一个策略,拒绝删除该项目的权限。您可以通过 Specifying Conditions: Using Condition Keys 使用 dynamodb:LeadingKeys 条件键来完成此操作。
  2. 向您的 table 添加一个流处理程序,任何时候删除记录您都可以自动将其添加回来。

第一个选项可能是最好的,但您需要确保它始终附加到适当的 users/roles。您还需要确保您正在处理当您尝试删除不允许删除的记录时将遇到的错误。

第二个选项消除了担心它的需要,但它伴随着 Lambda 的开销 运行 每次你在 table 中创建、更新或删除记录(使用一些批处理,所以不是每一个变化)。它还打开了一段短暂的时间,记录将被删除,因此如果永远不要删除记录很重要,那么这不是一个可行的选择。