如何在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
相关产品推荐
相关产品推荐

