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

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

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

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

get-notes.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を取得します。

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

次に、paramsを設定します。

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

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

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

dynamodbdeleteparamsを指定します。

await dynamodb.delete(params).promise()

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

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

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

serverless.yml を開きます。

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

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}とします。

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 のデータを更新します。

ブログ一覧