この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
吉川@広島です。
AWS SDK for JavaScript バージョン 3 が一般公開を開始
AWS SDK v3を案件で採用してみたのですが、v2と比べて公式以外の情報がまだまだ少ないと感じました。そのため触った範囲で共有していきたいと思います。
環境
- Node.js v15.14.0
- typescript v4.3.2
- @aws-sdk/client-dynamodb v3.19.0
導入
yarn add @aws-sdk/client-dynamodb
コード例
現時点でBatchWriteとQueryを試したので、この2つの操作を紹介したいと思います。
想定テーブル
下のような「usersテーブル」に対して操作する想定とします。
Attribute | 型 | Key | 値の例 |
---|---|---|---|
id | S | HashKey | 'CM0001', 'CM0002' |
name | S | 'クラメソ太郎', 'クラメソ二郎' | |
role | S | GSI HashKey | '管理者', '一般' |
BatchWrite
import {
DynamoDBClient,
WriteRequest,
BatchWriteItemCommand,
} from '@aws-sdk/client-dynamodb'
const writeRequests: WriteRequest[] = [
{
PutRequest: {
Item: {
id: { S: 'CM0001' },
name: { S: 'クラメソ太郎' },
role: { S: '管理者' },
},
},
},
{
PutRequest: {
Item: {
id: { S: 'CM0002' },
name: { S: 'クラメソ二郎' },
role: { S: '一般' },
},
},
},
]
const dynamoDBClient = new DynamoDBClient({})
const tableName = 'users'
const result = await dynamoDBClient.send(
new BatchWriteItemCommand({
RequestItems: {
[tableName]: writeRequests, // キーにテーブル名を指定
},
})
)
console.log('保存結果: ', result)
Query
import {
DynamoDBClient,
QueryCommand,
QueryCommandInput,
} from '@aws-sdk/client-dynamodb'
const params: QueryCommandInput = {
TableName: 'users',
IndexName: 'role-index',
KeyConditionExpression: 'role = :role',
ExpressionAttributeValues: {
':role': { S: 'Administrator' },
},
}
const dynamoDBClient = new DynamoDBClient({})
const result = await dynamoDBClient.send(new QueryCommand(params))
console.log('取得結果: ', result)
その他
公式のExamplesが参考になります。
v2との比較
良い点
v2では非同期処理のデフォルトはcallbackであり、Promiseで処理するには .promise()
を使う必要がありました。
JavaScript Promises の使用 - AWS SDK for JavaScript
v3ではデフォルトでPromiseベースになりました。これは嬉しいですね。
少し慣れが必要に思った点
v2のAPIは dynamoDBClient.put()
のように操作がメソッドとして生えていました。
AWS SDK for Node.js での DynamoDB と DynamoDB.DocumentClient の違い | DevelopersIO
一方、v3ではどの操作を行う場合も dynamoDBClient.send()
というようにsendメソッドに統一されており、引数で渡すインスタンス ( new XXXXCommand()
) で操作を切り替えるようになっています。この点、使い心地は結構変わる印象でした。