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

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

作成日:2021年12月31日
更新日:2022年01月01日

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

aws-serverless-dynamodb-get-unique

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

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

まずは、ハンドラーを作成します。

api フォルダに、delete-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 user_id = event.headers.user_id;
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",
}),
};
}
};

データを削除するには、キーが必要なので、user_idtimestampを取得します。

timestampは、eventpathParametersで、timestampを取得します。

js
exports.handler = async (event) => {
try {
let user_id = event.headers.user_id;
let timestamp = parseInt(event.pathParameters.timestamp);

次に、paramsを設定します。

paramsには、TimeNameKeyを設定します。

先程お話しした通り、キーが必要になるので、Keyは、user_idtimestampを指定しましょう。

js
let params = {
TableName: tableName,
Key: {
user_id,
timestamp,
},
};

dynamodbdeleteparamsを指定します。

js
await dynamodb.delete(params).promise();

body を返す必要がないので、削除しておきましょう。

js
return {
statudCode: 200,
headers: { "Access-Control-Allow-Origin": "*" },
};

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

serverless.yml を開きます。

provideriamRoleStatementsに、dynamodb:DeleteItemを指定します。

yaml
provider:
name: aws
runtime: nodejs14.x
region: us-west-2
stage: dev
memorySize: 128
timeout: 5
endpointType: regional
lambdaHashingVersion: 20201221
environment:
NOTES_TABLE: ${self:service}-${opt:stage, self:provider.stage}
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:Query
- dynamodb:PutItem
- dynamodb:DeleteItem

functionsdelete-noteを作成します。

pathは、note/delete/{timestamp}とします。

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

一通り完成したので、ポストマンで確認しましょう。

こちらのデータを削除したいので、timestamp をコピーします。

image2

コピーした timestamp を URL に貼り付けます。

また、Headers も作成しておきましょう。

image3

『Send』ボタンをクリックすると、

image4

データが削除されたようです。

データが削除されたかどうか、データ一覧を取得して確認してみましょう。

image5

timestamp が『1640740274』のデータは、ありませんでした。

次回は、DynamoDB のデータを更新します。

aws-serverless-dynamodb-update

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

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