برنامه نویسی

نحوه بازیابی همه جداول DynamoDB با استفاده از JavaScript SDK v3 (2023)

در یک تیم مهندسی با روش‌های توسعه یافته توسعه یافته، اغلب لازم است که همه DynamoDB‌های در حال اجرا در حساب‌های مختلف را بشناسید. این لیست جداول می تواند برای موارد زیر استفاده شود:

  • انجام بررسی انطباق استاندارد در نام و پیکربندی جدول شما.
  • سیستم های هشدار بسازید که لیست جداول را در حساب تولیدی نظارت می کند تا مطمئن شود که هر جدولی که نیاز دارید وجود دارد.
  • ایجاد پشتیبان و بازیابی اطلاعات در جداول DynamoDB.
  • مدیریت و سازماندهی جداول DynamoDB شما.
  • نظارت و بهینه سازی عملکرد جداول DynamoDB شما.
  • خودکارسازی و ادغام برنامه شما با سایر سرویس های AWS که از جداول DynamoDB به عنوان ورودی یا خروجی استفاده می کنند.
  • بررسی و ردیابی استفاده از جداول DynamoDB شما.

در این مقاله، نحوه بازیابی همه نام‌های جداول DynamoDB با استفاده از AWS SDK برای JavaScript v3 را بررسی خواهیم کرد.

قبل از اینکه تو شروع کنی

من توصیه می کنم از آخرین نسخه NodeJS که توسط Lambda Functions پشتیبانی می شود استفاده کنید. همچنین وجود nvm در دستگاه شما مفید است تا به راحتی بین نسخه‌های NodeJS سوئیچ کنید.

# Install Node 18 to use the latest code-base
nvm install 18

node --version

# Switch to NodeJS 18
nvm use 18
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما باید JavaScript AWS SDKs v3 را برای DynamoDB نصب کنید. اگر از NPM استفاده می کنید، از دستورات زیر برای نصب SDK ها استفاده کنید.

# If you use NPM
npm install @aws-sdk/client-dynamodb

# Install only if you want to use 
# named profiles inside your dev machine
npm install @aws-sdk/credential-providers
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر نیاز به استفاده از نخ دارید:

# If you use yarn
yarn add @aws-sdk/client-dynamodb

# Install only if you want to use inside your dev machine
yarn add @aws-sdk/credential-providers
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کد منبع

با طراحی، ListTablesCommand تنها می تواند حداکثر 100 نام DynamoDB را برگرداند (کد زیر را ببینید).

import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb";
import { fromIni } from "@aws-sdk/credential-providers";

const client = new DynamoDBClient({ region: "ap-southeast-1" });

// Use this code if you need named profiles
// const client = new DynamoDBClient({
//   credentials: fromIni({ profile: "my-poc-profile" }),
//   region: "ap-southeast-1",
// });

const command = new ListTablesCommand({});
const response = await client.send(command);

console.log(response);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

که منجر به:

{
  '$metadata': {
    httpStatusCode: 200,
    requestId: 'LKJEWJOI3290923902302310219',
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  LastEvaluatedTableName: undefined,
  TableNames: [ 
    'dynamo-table-a', 
    'dynamo-table-b', 
    'dynamo-table-c'
   ]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

محدودیت صفحه 100 مورد در هر پاسخ احتمالاً توسط AWS برای رسیدگی به حساب‌هایی با تعداد زیادی جداول DynamoDB در آنها قرار داده شده است.

اگر واقعاً می خواهید تمام جداول یک حساب کاربری را بازیابی کنید. به جای آن می توانید از کد زیر استفاده کنید:

import { DynamoDBClient, ListTablesCommand } from "@aws-sdk/client-dynamodb";
import { fromIni } from "@aws-sdk/credential-providers";

const client = new DynamoDBClient({
  credentials: fromIni({ profile: "my-poc-profile" }),
  region: "ap-southeast-1",
});
let startTableName = "";
let hasResults = false;
let tableNames = [];

do {
  hasResults = false;

  const searchInput = {
    Limit: 100,
  };

  if (startTableName) {
    searchInput.ExclusiveStartTableName = startTableName;
  }

  const command = new ListTablesCommand(searchInput);
  const response = await client.send(command);

  if (response.TableNames && response.TableNames.length > 0) {
    startTableName = response.TableNames[response.TableNames.length - 1];
    tableNames = [...tableNames, ...response.TableNames];
    hasResults = true;
  }
} while (hasResults);

console.log(tableNames);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

که منجر به:

[ 'dynamo-table-a', 'dynamo-table-b', 'dynamo-table-c' ]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا