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); | |
| } | |
| } |