aws-genai-llm-chatbot
86 строк · 2.5 Кб
1import * as cdk from "aws-cdk-lib";
2import * as dynamodb from "aws-cdk-lib/aws-dynamodb";
3import { Construct } from "constructs";
4
5export class RagDynamoDBTables extends Construct {
6public readonly workspacesTable: dynamodb.Table;
7public readonly documentsTable: dynamodb.Table;
8public readonly workspacesByObjectTypeIndexName: string =
9"by_object_type_idx";
10public readonly documentsByCompoundKeyIndexName: string =
11"by_compound_key_idx";
12public readonly documentsByStatusIndexName: string = "by_status_idx";
13
14constructor(scope: Construct, id: string) {
15super(scope, id);
16
17const workspacesTable = new dynamodb.Table(this, "Workspaces", {
18partitionKey: {
19name: "workspace_id",
20type: dynamodb.AttributeType.STRING,
21},
22sortKey: {
23name: "object_type",
24type: dynamodb.AttributeType.STRING,
25},
26billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
27encryption: dynamodb.TableEncryption.AWS_MANAGED,
28pointInTimeRecovery: true,
29removalPolicy: cdk.RemovalPolicy.DESTROY,
30});
31
32workspacesTable.addGlobalSecondaryIndex({
33indexName: this.workspacesByObjectTypeIndexName,
34partitionKey: {
35name: "object_type",
36type: dynamodb.AttributeType.STRING,
37},
38sortKey: {
39name: "created_at",
40type: dynamodb.AttributeType.STRING,
41},
42});
43
44const documentsTable = new dynamodb.Table(this, "Documents", {
45partitionKey: {
46name: "workspace_id",
47type: dynamodb.AttributeType.STRING,
48},
49sortKey: {
50name: "document_id",
51type: dynamodb.AttributeType.STRING,
52},
53billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
54encryption: dynamodb.TableEncryption.AWS_MANAGED,
55pointInTimeRecovery: true,
56removalPolicy: cdk.RemovalPolicy.DESTROY,
57});
58
59documentsTable.addGlobalSecondaryIndex({
60indexName: this.documentsByCompoundKeyIndexName,
61partitionKey: {
62name: "workspace_id",
63type: dynamodb.AttributeType.STRING,
64},
65sortKey: {
66name: "compound_sort_key",
67type: dynamodb.AttributeType.STRING,
68},
69});
70
71documentsTable.addGlobalSecondaryIndex({
72indexName: this.documentsByStatusIndexName,
73partitionKey: {
74name: "status",
75type: dynamodb.AttributeType.STRING,
76},
77sortKey: {
78name: "document_type",
79type: dynamodb.AttributeType.STRING,
80},
81});
82
83this.workspacesTable = workspacesTable;
84this.documentsTable = documentsTable;
85}
86}
87