import { Construct } from 'constructs'; import * as ec2 from 'aws-cdk-lib/aws-ec2' import * as rds from "aws-cdk-lib/aws-rds"; 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.VER_3_02_0 }), description: 'for-langflow', }) clusterParameterGroup.bindToCluster({}) // DB インスタンスのパラメタグループ作成 const instanceParameterGroup = new rds.ParameterGroup(scope, 'InstanceParameterGroup',{ engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.VER_3_02_0, }), description: 'for-langflow', }) instanceParameterGroup.bindToInstance({}) this.rdsCluster = new rds.DatabaseCluster(scope, 'LangflowDbCluster', { engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.VER_3_02_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', }) } }