🔍
AWS SDK for JavaScript v3でDynamoDBからのGetItem
要点
-
@aws-sdk/client-dynamodb
を使う - 検索のKey指定に型を含める必要がある
Key: { 'YOUR_PRIMARY_KEY': {'S': searchWord} }
- outputに型情報が含まれているので、使う前に整形が必要
- LodashのmapValuesを使うと便利
コード
- 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