【AWS】サーバーレスオフラインでDynamoDBに保存した単一データを取得する
AWS

【AWS】サーバーレスオフラインでDynamoDBに保存した単一データを取得する

作成日:2021年12月30日
更新日:2021年12月30日

前回は、サーバーレスオフラインで DynamoDB に保存したデータを取得しました。

aws-serverless-dynamodb-get

【AWS】サーバーレスオフラインでDynamoDBに保存したデータを取得する

今回は、保存したデータから、単一データを取得します。

まずは、単一データを取得するためのハンドラーを作成します。

api フォルダに、get-note.js を作成します。

get-notes.js のコードを流用します。

js
const AWS = require("aws-sdk");
AWS.config.update({ region: "us-west-2" });
const dynamodb = new AWS.DynamoDB.DocumentClient();
const tableName = process.env.NOTES_TABLE;
exports.handler = async (event) => {
try {
let item = await dynamodb.query(params).promise();
return {
statudCode: 200,
headers: { "Access-Control-Allow-Origin": "*" },
body: JSON.stringify(item),
};
} catch (err) {
console.log("Error:", err);
return {
statusCode: err.statusCode ? err.statusCode : 500,
headers: { "Access-Control-Allow-Origin": "*" },
body: JSON.stringify({
error: err.name ? err.name : "Exception",
message: err.message ? err.message : "Unknown error",
}),
};
}
};

まずは、eventpathParametersからnote_idを取得します。

また、decodeURIComponentで、URI 形式になっている文字列をデコードしましょう。

js
exports.handler = async (event) => {
try {
let note_id = decodeURIComponent(event.pathParameters.note_id);

次に、paramsを設定します。

TableNameは、tableNameを指定します。

特定のデータを取得するために、IndexNameを設定します。

IndexNameは、serverless.yml のGlobalSecondaryIndexesで設定した、『note_id-index』を指定します。

KeyConditionExpressionは、note_id = :note_idを指定します。

ExpressionAttributeValuesの:note_idは、note_idを指定します。

単一データなので、Limitは、『1』とします。

js
exports.handler = async (event) => {
try {
let note_id = decodeURIComponent(event.pathParameters.note_id);
let params = {
TableName: tableName,
IndexName: "note_id-index",
KeyConditionExpression: "note_id = :note_id",
ExpressionAttributeValues: {
":note_id": note_id,
},
Limit: 1,
};

bodyitemを単一データにするために、item.Items[0]とします。

js
return {
statudCode: 200,
headers: { "Access-Control-Allow-Origin": "*" },
body: JSON.stringify(item.Items[0]),
};

ハンドラーの作成が完了したので、YAML を設定します。

serverless.yml を開きます。

functionsget-noteを作成します。

pathを、note/{note_id}として、note_idを中括弧で囲むと、動的に変わる内容となります。

yaml
get-note:
handler: api/get-note.handler
description: GET /note
events:
- http:
path: note/{note_id}
method: get
cors:
origin: "*"
headers: ${self:custom.allowedHeaders}

YAML の設定が完了したので、ターミナルをプロジェクトのディレクトリに移動し、serverless offline を実行します。

ポストマンを開いて、URL を設定します。

今回は、こちらの note_id を指定します。

image2

こちらの note_id を URL にします。

また、Headers を設定しておきましょう。

image3

『Send』をクリックすると、

image4

単一のデータを取得することができました。

次回は、DynamoDB のデータを削除します。

aws-serverless-dynamodb-delete

【AWS】サーバーレスオフラインでDynamoDBのデータを削除する

© 2024あずきぱんウェブスタジオ