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

如何通过Node.js版AWS SDK调用指定端点获取所有DynamoDB表?

没问题,我来帮你实现和AWS CLI命令aws dynamodb list-tables --endpoint-url <ENDPOINT_URL>完全等效的Node.js SDK功能!下面分两种常用的AWS SDK版本(v2和v3)给你详细代码示例,还会处理分页问题(毕竟CLI会自动帮你拉取所有表,SDK默认只返回第一页)。

使用AWS SDK v3(推荐)

首先确保你已经安装了v3的DynamoDB客户端依赖:

npm install @aws-sdk/client-dynamodb

然后用以下代码实现完整的列表功能:

const { DynamoDBClient, ListTablesCommand } = require("@aws-sdk/client-dynamodb");

async function listAllTables(endpointUrl) {
  // 初始化DynamoDB客户端,指定自定义端点
  const client = new DynamoDBClient({
    endpoint: endpointUrl,
    // 如果是本地DynamoDB,需要配置假凭证(SDK默认会尝试加载真实凭证)
    // credentials: { accessKeyId: "fakeMyKeyId", secretAccessKey: "fakeSecretAccessKey" },
    region: "us-east-1" // 即使是自定义端点,region也需要填写一个有效值
  });

  let allTables = [];
  let nextToken = null;

  do {
    // 构造ListTables命令,带上分页标记(如果存在)
    const command = new ListTablesCommand({ ExclusiveStartTableName: nextToken });
    const response = await client.send(command);

    // 合并当前页的表到总列表
    if (response.TableNames) {
      allTables = [...allTables, ...response.TableNames];
    }

    // 更新下一页的分页标记
    nextToken = response.LastEvaluatedTableName;
  } while (nextToken); // 只要还有下一页就继续请求

  return allTables;
}

// 调用示例(替换成你的端点URL)
const targetEndpoint = "http://localhost:8000";
listAllTables(targetEndpoint)
  .then(tables => console.log("所有DynamoDB表:", tables))
  .catch(err => console.error("获取表列表失败:", err));

关键说明:

  • 通过DynamoDBClient的endpoint参数直接指定目标端点,和CLI的--endpoint-url完全对应。
  • 处理分页:ListTables默认最多返回100张表,所以用循环+ExclusiveStartTableName参数自动拉取所有表,直到没有下一页标记。
  • 本地DynamoDB场景:需要添加假的凭证配置,否则SDK会尝试加载系统凭证导致报错。
使用AWS SDK v2

如果你还在使用v2版本的SDK,先确保依赖已安装:

npm install aws-sdk

对应的实现代码:

const AWS = require("aws-sdk");

async function listAllTables(endpointUrl) {
  // 配置DynamoDB客户端
  const dynamodb = new AWS.DynamoDB({
    endpoint: endpointUrl,
    // 本地DynamoDB需配置假凭证
    // accessKeyId: "fakeMyKeyId",
    // secretAccessKey: "fakeSecretAccessKey",
    region: "us-east-1"
  });

  let allTables = [];
  let params = {};

  do {
    const response = await dynamodb.listTables(params).promise();
    allTables = [...allTables, ...response.TableNames];
    params.ExclusiveStartTableName = response.LastEvaluatedTableName;
  } while (params.ExclusiveStartTableName);

  return allTables;
}

// 调用示例
const targetEndpoint = "http://localhost:8000";
listAllTables(targetEndpoint)
  .then(tables => console.log("所有DynamoDB表:", tables))
  .catch(err => console.error("出错了:", err));

关键说明:

  • v2的客户端初始化方式更简洁,直接通过AWS.DynamoDB构造函数配置endpoint参数。
  • 分页逻辑和v3一致,都是通过循环获取所有页的表数据。

内容的提问来源于stack exchange,提问作者Alok G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:48