はじめに
Lambdaを使用してDynamoDBのデータを取得する方法について紹介します
データ取得までの流れは 画面 → API Gateway → Lambda → DynamoDB となっていますが、画面からLambdaを呼び出すところまでは割愛します。
ソースコード
userIdを条件にして、データを取得するという例を紹介します。
const { DynamoDBClient } = require('@aws-sdk/client-dynamodb');
const { QueryCommand, DynamoDBDocumentClient } = require('@aws-sdk/lib-dynamodb');
const client = new DynamoDBClient({});
const docClient = DynamoDBDocumentClient.from(client);
exports.handler = async(event) => {
// Cloudwatchで確認できるようにログ出力
console.log(event);
try {
// 画面から送られてきたユーザーIDを取得
const userId = event.queryStringParameters.userId;
const command = new QueryCommand({
TableName: 'DynamoDBのテーブル名',
// 条件を指定
KeyConditionExpression: 'userId = :userId',
// KeyConditionExpressionで使用するために:userIdに変数「userId」を設定
ExpressionAttributeValues: {
':userId': userId
}
})
// データ取得
const response = await docClient.send(command);
return {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin' : '*',
},
body: JSON.stringify(response)
}
} catch (error) {
// Cloudwatchで確認できるようにログ出力
console.log(error);
return {
statusCode: 400,
headers: {
'Access-Control-Allow-Origin' : '*',
},
body: error.message
}
}
}
補足
API GatewayでLambda プロキシ統合を設定しているため、指定された形でレスポンスを返却する必要がありました。この辺りの設定が上手く出来ていないとCORSエラーが発生してしまうので、ご注意ください
さいごに
こちらの記事参考になれば幸いです