64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
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',
|
|
})
|
|
}
|
|
}
|