Spaces:
Running
Running
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", | |
}); | |
} | |
} | |