目次
本記事では、AWS Lambda関数でToDoの作成、取得、更新、削除を実装し、API GatewayでREST APIとして公開する手順を紹介します。DynamoDBをデータベースとして利用し、Node.jsで書いたコード例を交えて、実際に動作するサーバーレスCRUDアプリを完成させます。
例:Lambda関数(Node.js)によるCRUD操作
-
ToDo作成 (Create)
const AWS = require('aws-sdk');
const { v4: uuidv4 } = require('uuid');
const dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const body = JSON.parse(event.body);
const id = uuidv4();
const params = {
TableName: 'ToDo',
Item: {
id: id,
title: body.title,
completed: false,
},
};
await dynamo.put(params).promise();
return {
statusCode: 201,
body: JSON.stringify({ message: 'ToDo created', id }),
};
};
-
ToDo取得 (Read)
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = async () => {
const params = { TableName: 'ToDo' };
const data = await dynamo.scan(params).promise();
return {
statusCode: 200,
body: JSON.stringify(data.Items),
};
};
-
ToDo更新 (Update)
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const id = event.pathParameters.id;
const body = JSON.parse(event.body);
const params = {
TableName: 'ToDo',
Key: { id },
UpdateExpression: 'set title = :t, completed = :c',
ExpressionAttributeValues: {
':t': body.title,
':c': body.completed,
},
ReturnValues: 'UPDATED_NEW',
};
const result = await dynamo.update(params).promise();
return {
statusCode: 200,
body: JSON.stringify(result.Attributes),
};
};
-
ToDo削除 (Delete)
const AWS = require('aws-sdk');
const dynamo = new AWS.DynamoDB.DocumentClient();
exports.handler = async (event) => {
const id = event.pathParameters.id;
const params = {
TableName: 'ToDo',
Key: { id },
};
await dynamo.delete(params).promise();
return {
statusCode: 200,
body: JSON.stringify({ message: 'Deleted' }),
};
};
API GatewayにてこれらのLambda関数をHTTPメソッドとパスに紐付ければ、サーバーレスなToDo CRUD APIが完成します。