import { Construct } from 'constructs'; import * as ec2 from 'aws-cdk-lib/aws-ec2' import * as rds from "aws-cdk-lib/aws-rds"; import * as cdk from 'aws-cdk-lib'; interface RdsProps { vpc: ec2.Vpc dbSG:ec2.SecurityGroup } export class Rds extends Construct{ readonly rdsCluster: rds.DatabaseCluster constructor(scope: Construct, id:string, props: RdsProps){ super(scope, id); const {vpc, dbSG} = props const instanceType = ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE4_GRAVITON, ec2.InstanceSize.MEDIUM) // RDSのパスワードを自動生成してSecrets Managerに格納 const rdsCredentials = rds.Credentials.fromGeneratedSecret('db_user',{ secretName: 'langflow-DbSecret', }) // DB クラスターのパラメータグループ作成 const clusterParameterGroup = new rds.ParameterGroup( scope, "ClusterParameterGroup", { engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.of( "8.0.mysql_aurora.3.05.2", "8.0" ), }), description: "for-langflow", } ); clusterParameterGroup.bindToCluster({}) // DB インスタンスのパラメタグループ作成 const instanceParameterGroup = new rds.ParameterGroup( scope, "InstanceParameterGroup", { engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.of("8.0.mysql_aurora.3.05.2", '8.0'), }), description: "for-langflow", } ); instanceParameterGroup.bindToInstance({}) this.rdsCluster = new rds.DatabaseCluster(scope, "LangflowDbCluster", { engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.of( "8.0.mysql_aurora.3.05.2", "8.0" ), }), storageEncrypted: true, credentials: rdsCredentials, instanceIdentifierBase: "langflow-instance", vpc: vpc, vpcSubnets: vpc.selectSubnets({ subnetGroupName: "langflow-Isolated", }), securityGroups: [dbSG], writer: rds.ClusterInstance.provisioned("WriterInstance", { instanceType: instanceType, enablePerformanceInsights: true, parameterGroup: instanceParameterGroup, }), // 2台目以降はreaders:で設定 parameterGroup: clusterParameterGroup, defaultDatabaseName: "langflow", }); } }