* add cloudfront * modify: healthcheck disable * modify: health check option * modify nodejsbuild * add nodejs version * endpoint configuration * set axios url * remote console.log VITE_PROXY_TARGET * create alb stack * add alb to origin * alb build success * remote baseURL setting * add redirect * change responseHttpStatus to 200 * modify output and readme * modify architecture * add health check path route to cloudfront routing * modified: c9 env name in deploy langflow section * modified : package dependency for pymysql * modified: deploy procedure * modified: deploy procedure (ja) --------- Co-authored-by: nsxshota <nsxshota@amazon.co.jp> Co-authored-by: ymkazuki <ymkazuki@amazon.co.jp> Co-authored-by: Shota Nakamoto <53632932+nsy0328@users.noreply.github.com>
90 lines
No EOL
3 KiB
TypeScript
90 lines
No EOL
3 KiB
TypeScript
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);
|
|
}
|
|
} |