2.4 KiB
2.4 KiB
REST API na środoiwsku AWS Lambda i DynamoDB
Konfiguracja
Poradnik jak skonfigurować środowisko można znaleźć pod adresem: https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-dynamo-db.html
Kod
Poniżej znajduje się kod funkcji Lambda, która obsługuje zapytania HTTP i komunikuje się z bazą danych DynamoDB - wykonany na potrzebę zadania z przedmiotu Chmury obliczeniowe (zad. 6.2
)
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import {
DynamoDBDocumentClient,
PutCommand,
GetCommand,
DeleteCommand,
} from "@aws-sdk/lib-dynamodb";
import { randomUUID } from 'crypto';
const client = new DynamoDBClient({});
const dynamo = DynamoDBDocumentClient.from(client);
const tableName = "posts";
const DB = {
async create({ userId, title, body }) {
const id = randomUUID();
await dynamo.send(
new PutCommand({
TableName: tableName,
Item: { id, userId, title, body },
})
);
return await DB.get(id);
},
async get(id) {
return (await dynamo.send(
new GetCommand({
TableName: tableName,
Key: { id },
})
))?.Item;
},
async update(id, { userId, title, body }) {
await dynamo.send(
new PutCommand({
TableName: tableName,
Item: { id, userId, title, body },
})
);
return await DB.get(id);
},
async delete(id) {
_result = await DB.get(id);
await dynamo.send(
new DeleteCommand({
TableName: tableName,
Key: { id },
})
);
return _result;
},
}
export const handler = async (event, context) => {
let body;
try {
switch (event.routeKey) {
case "POST /":
body = await DB.create(JSON.parse(event.body));
break;
case "DELETE /{id}":
body = await DB.delete(event.pathParameters.id);
break;
case "GET /{id}":
body = await DB.get(event.pathParameters.id);
break;
case "PUT /{id}":
body = await DB.update(event.pathParameters.id, JSON.parse(event.body));
break;
default:
throw new Error(`Unsupported route: "${event.routeKey}"`);
}
return {
statusCode: 200,
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
};
} catch (err) {
return {
statusCode: 400,
body: JSON.stringify(err.message),
};
}
};