aws-genai-llm-chatbot

Форк
0
116 строк · 3.7 Кб
1
import * as path from "path";
2
import * as cdk from "aws-cdk-lib";
3
import { Construct } from "constructs";
4
import { SystemConfig } from "../../shared/types";
5
import { Shared } from "../../shared";
6
import { CreateAuroraWorkspace } from "./create-aurora-workspace";
7
import { RagDynamoDBTables } from "../rag-dynamodb-tables";
8
import * as ec2 from "aws-cdk-lib/aws-ec2";
9
import * as lambda from "aws-cdk-lib/aws-lambda";
10
import * as logs from "aws-cdk-lib/aws-logs";
11
import * as rds from "aws-cdk-lib/aws-rds";
12
import * as cr from "aws-cdk-lib/custom-resources";
13
import * as sfn from "aws-cdk-lib/aws-stepfunctions";
14
import { NagSuppressions } from "cdk-nag";
15

16
export interface AuroraPgVectorProps {
17
  readonly config: SystemConfig;
18
  readonly shared: Shared;
19
  readonly ragDynamoDBTables: RagDynamoDBTables;
20
}
21

22
export class AuroraPgVector extends Construct {
23
  readonly database: rds.DatabaseCluster;
24
  public readonly createAuroraWorkspaceWorkflow: sfn.StateMachine;
25

26
  constructor(scope: Construct, id: string, props: AuroraPgVectorProps) {
27
    super(scope, id);
28

29
    const dbCluster = new rds.DatabaseCluster(this, "AuroraDatabase", {
30
      engine: rds.DatabaseClusterEngine.auroraPostgres({
31
        version: rds.AuroraPostgresEngineVersion.VER_15_3,
32
      }),
33
      removalPolicy: cdk.RemovalPolicy.DESTROY,
34
      writer: rds.ClusterInstance.serverlessV2("ServerlessInstance"),
35
      vpc: props.shared.vpc,
36
      vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_ISOLATED },
37
      iamAuthentication: true,
38
    });
39

40
    const databaseSetupFunction = new lambda.Function(
41
      this,
42
      "DatabaseSetupFunction",
43
      {
44
        vpc: props.shared.vpc,
45
        code: props.shared.sharedCode.bundleWithLambdaAsset(
46
          path.join(__dirname, "./functions/pgvector-setup")
47
        ),
48
        runtime: props.shared.pythonRuntime,
49
        architecture: props.shared.lambdaArchitecture,
50
        handler: "index.lambda_handler",
51
        layers: [props.shared.powerToolsLayer, props.shared.commonLayer],
52
        timeout: cdk.Duration.minutes(5),
53
        logRetention: logs.RetentionDays.ONE_WEEK,
54
        environment: {
55
          ...props.shared.defaultEnvironmentVariables,
56
        },
57
      }
58
    );
59

60
    dbCluster.secret?.grantRead(databaseSetupFunction);
61
    dbCluster.connections.allowDefaultPortFrom(databaseSetupFunction);
62

63
    const databaseSetupProvider = new cr.Provider(
64
      this,
65
      "DatabaseSetupProvider",
66
      {
67
        vpc: props.shared.vpc,
68
        onEventHandler: databaseSetupFunction,
69
      }
70
    );
71

72
    const dbSetupResource = new cdk.CustomResource(
73
      this,
74
      "DatabaseSetupResource",
75
      {
76
        removalPolicy: cdk.RemovalPolicy.DESTROY,
77
        serviceToken: databaseSetupProvider.serviceToken,
78
        properties: {
79
          AURORA_DB_SECRET_ID: dbCluster.secret?.secretArn as string,
80
        },
81
      }
82
    );
83

84
    dbSetupResource.node.addDependency(dbCluster);
85

86
    const createWorkflow = new CreateAuroraWorkspace(
87
      this,
88
      "CreateAuroraWorkspace",
89
      {
90
        config: props.config,
91
        shared: props.shared,
92
        dbCluster: dbCluster,
93
        ragDynamoDBTables: props.ragDynamoDBTables,
94
      }
95
    );
96

97
    this.database = dbCluster;
98
    this.createAuroraWorkspaceWorkflow = createWorkflow.stateMachine;
99

100
    /**
101
     * CDK NAG suppression
102
     */
103
    NagSuppressions.addResourceSuppressions(dbCluster, [
104
      {
105
        id: "AwsSolutions-RDS10",
106
        reason:
107
          "Deletion protection disabled to allow deletion as part of the CloudFormation stack.",
108
      },
109
      {
110
        id: "AwsSolutions-RDS2",
111
        reason:
112
          "Encryption cannot be enabled on an unencrypted DB Cluster, therefore enabling will destroy existing data. Docs provide instructions for users requiring it.",
113
      },
114
    ]);
115
  }
116
}
117

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.