🔍

AWS SDK for JavaScript v3でDynamoDBからのGetItem

2024/02/02に公開

要点

コード

  • REGION, YOUR_PRIMARY_KEY及びはご自身のものを指定
dynamoDb.ts
import { DynamoDBClient, GetItemCommand, GetItemCommandInput, GetItemOutput } from '@aws-sdk/client-dynamodb';
import { chain, mapValues } from 'lodash';

const REGION = 'リージョンを入力';
const TABLE_NAME = 'テーブル名を入力';
const YOUR_PRIMARY_KEY = 'テーブルのプライマリーキー名を入力'
const client = new DynamoDBClient({ region: REGION });

/**
 * DynamoDBのGetItemOutputを型情報を削除したjsonにする
 * { "key": {"S": "hogehoge"} } => { "key": "hogehoge" }
 * @param itemOfGetItemOutput - GetItemCommandの出力
 * @returns - 型情報を削除したjson
 */
const removeTypeInDynamoGetItemOutput = (itemOfGetItemOutput: GetItemOutput): object => 
  mapValues(itemOfGetItemOutput, (json) => chain(json).values().first().value());

/**
 * 指定されたワードでDynamoDBを検索する
 * @param {string} searchWord - 検索に使用する文字列
 * @returns {Promise<object | null>} - 取得したレコードのJSONオブジェクト、見つからない場合はnull。
 */
export const getItem = async (searchWord: string): Promise<object | null> => {
  const param:GetItemCommandInput = {
    TableName : TABLE_NAME,
    Key: {
      {YOUR_PRIMARY_KEY}: {'S': searchWord} // Numberなら {'N': searchNumber}
    },
  };
  const command = new GetItemCommand(param);

  const fetched = await client.send(command);

  return fetched.Item ? removeTypeInDynamoGetItemOutput(fetched.Item) : null;
};

Discussion