You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js AWS SDK v3中使用DynamoDB的waitUntilTableNotExists?

使用AWS SDK v3删除并重建DynamoDB表(含等待器示例)

以下是完整的代码示例,涵盖删除表、等待表删除完成、重建表、等待表可用的全流程:

import { DynamoDBClient, DeleteTableCommand, CreateTableCommand } from "@aws-sdk/client-dynamodb";
import { waitUntilTableNotExists, waitUntilTableExists } from "@aws-sdk/util-waiter";

// 初始化DynamoDB客户端
const client = new DynamoDBClient({ region: "你的区域" });
const TABLE_NAME = "目标表名";

async function recreateDynamoDBTable() {
  try {
    // 1. 尝试删除目标表
    try {
      await client.send(new DeleteTableCommand({ TableName: TABLE_NAME }));
      console.log(`已发起删除表 ${TABLE_NAME} 的请求`);
    } catch (deleteErr) {
      // 如果表不存在,忽略错误继续执行
      if (deleteErr.name !== "ResourceNotFoundException") {
        throw deleteErr;
      }
      console.log(`表 ${TABLE_NAME} 不存在,跳过删除步骤`);
    }

    // 2. 等待表完全删除(轮询检查表状态)
    await waitUntilTableNotExists(
      {
        client,
        // 可选:配置轮询间隔(毫秒)和最大重试次数
        waiterConfig: {
          delay: 5000, // 每5秒检查一次
          maxWaitTime: 300000, // 最长等待5分钟
        },
      },
      { TableName: TABLE_NAME }
    );
    console.log(`表 ${TABLE_NAME} 已完全删除`);

    // 3. 定义新表的结构(根据你的需求修改)
    const createTableParams = {
      TableName: TABLE_NAME,
      KeySchema: [
        { AttributeName: "id", KeyType: "HASH" }, // 分区键
        { AttributeName: "sortKey", KeyType: "RANGE" }, // 可选:排序键
      ],
      AttributeDefinitions: [
        { AttributeName: "id", AttributeType: "S" },
        { AttributeName: "sortKey", AttributeType: "N" },
      ],
      ProvisionedThroughput: {
        ReadCapacityUnits: 1,
        WriteCapacityUnits: 1,
      },
      // 如果是按需模式,替换为BillingMode: "PAY_PER_REQUEST"
    };

    // 4. 创建新表
    await client.send(new CreateTableCommand(createTableParams));
    console.log(`已发起创建表 ${TABLE_NAME} 的请求`);

    // 5. 等待表变为ACTIVE状态(可用)
    await waitUntilTableExists(
      {
        client,
        waiterConfig: {
          delay: 5000,
          maxWaitTime: 300000,
        },
      },
      { TableName: TABLE_NAME }
    );
    console.log(`表 ${TABLE_NAME} 已创建完成并可用`);
  } catch (err) {
    console.error("重建表过程中出错:", err);
    throw err;
  }
}

// 执行函数
recreateDynamoDBTable();

关键说明:

  • 等待器的核心逻辑:waitUntilTableNotExists 和 waitUntilTableExists 会自动轮询DynamoDB的表状态,直到满足条件或超时,无需手动写循环判断。
  • 错误处理:删除表时如果表不存在,会抛出ResourceNotFoundException,这里做了捕获处理,避免流程中断。
  • waiterConfig配置:delay是两次检查的间隔,maxWaitTime是最长等待时长,可根据实际场景调整(比如生产环境可能需要更长等待时间)。
  • 表结构定义:createTableParams需要根据你的业务需求修改键结构、属性定义和计费模式。

内容的提问来源于stack exchange,提问作者Savas P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:45:30