Spaces:
Running
Running
import { Duration } from 'aws-cdk-lib' | |
import { Construct } from 'constructs'; | |
import { | |
aws_ec2 as ec2, | |
aws_ecs as ecs, | |
aws_ecr as ecr, | |
aws_rds as rds, | |
aws_servicediscovery as servicediscovery, | |
aws_iam as iam, | |
aws_logs as logs, | |
aws_elasticloadbalancingv2 as elb, | |
} from 'aws-cdk-lib'; | |
import * as dotenv from 'dotenv'; | |
const path = require('path'); | |
dotenv.config({path: path.join(__dirname, "../../.env")}); | |
interface BackEndProps { | |
cluster: ecs.Cluster | |
ecsBackSG:ec2.SecurityGroup | |
ecrBackEndRepository:ecr.Repository | |
backendTaskRole: iam.Role; | |
backendTaskExecutionRole: iam.Role; | |
backendLogGroup: logs.LogGroup; | |
rdsCluster:rds.DatabaseCluster | |
arch:ecs.CpuArchitecture | |
albTG: elb.ApplicationTargetGroup; | |
} | |
export class BackEndCluster extends Construct { | |
constructor(scope: Construct, id: string, props:BackEndProps) { | |
super(scope, id) | |
const backendServiceName = 'backend' | |
const backendServicePort = 7860 | |
// Secrets ManagerからDB認証情報を取ってくる | |
const secretsDB = props.rdsCluster.secret!; | |
// Create Backend Fargate Service | |
const backendTaskDefinition = new ecs.FargateTaskDefinition( | |
this, | |
'BackEndTaskDef', | |
{ | |
memoryLimitMiB: 3072, | |
cpu: 1024, | |
executionRole: props.backendTaskExecutionRole, | |
runtimePlatform:{ | |
operatingSystemFamily: ecs.OperatingSystemFamily.LINUX, | |
cpuArchitecture: props.arch, | |
}, | |
taskRole: props.backendTaskRole, | |
} | |
); | |
backendTaskDefinition.addContainer('backendContainer', { | |
image: ecs.ContainerImage.fromEcrRepository(props.ecrBackEndRepository, "latest"), | |
containerName:'langflow-back-container', | |
logging: ecs.LogDriver.awsLogs({ | |
streamPrefix: 'my-stream', | |
logGroup: props.backendLogGroup, | |
}), | |
environment:{ | |
"LANGFLOW_AUTO_LOGIN" : process.env.LANGFLOW_AUTO_LOGIN ?? 'false', | |
"LANGFLOW_SUPERUSER" : process.env.LANGFLOW_SUPERUSER ?? "admin", | |
"LANGFLOW_SUPERUSER_PASSWORD" : process.env.LANGFLOW_SUPERUSER_PASSWORD ?? "123456" | |
}, | |
portMappings: [ | |
{ | |
containerPort: backendServicePort, | |
protocol: ecs.Protocol.TCP, | |
}, | |
], | |
// Secretの設定 | |
secrets: { | |
"dbname": ecs.Secret.fromSecretsManager(secretsDB, 'dbname'), | |
"username": ecs.Secret.fromSecretsManager(secretsDB, 'username'), | |
"host": ecs.Secret.fromSecretsManager(secretsDB, 'host'), | |
"password": ecs.Secret.fromSecretsManager(secretsDB, 'password'), | |
}, | |
}); | |
const backendService = new ecs.FargateService(this, 'BackEndService', { | |
cluster: props.cluster, | |
serviceName: backendServiceName, | |
taskDefinition: backendTaskDefinition, | |
enableExecuteCommand: true, | |
securityGroups: [props.ecsBackSG], | |
vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, | |
}); | |
props.albTG.addTarget(backendService); | |
} | |
} |