in lib/computes/ecs.ts [9:62]
constructor(scope: cdk.Construct, id: string, props: LoggingProp) {
super(scope, id, props);
// Kinesis stream to capture ECS logs
CreateKirehoseDataStream(props.stack, 'ecs-fire-hose-delivery-stream', 'ecs', props.os, props.failureBucket);
// Create ECS Cluster
const cluster = new ecs.Cluster(props.stack, 'unified-logger-ecs-cluster', { vpc: props.vpc });
// ECS Task Definition
const taskDefinition = new ecs.TaskDefinition(
props.stack,
'task',
{
family: 'task',
compatibility: ecs.Compatibility.EC2_AND_FARGATE,
cpu: '256',
memoryMiB: '512',
networkMode: ecs.NetworkMode.AWS_VPC,
},
);
// The docker container including the image to use
const container = taskDefinition.addContainer('container', {
image: ecs.ContainerImage.fromRegistry('public.ecr.aws/docker/library/httpd:latest'),
memoryLimitMiB: 512,
logging: ecs.LogDrivers.firelens({
options: {
Name: 'firehose',
region: props.region,
delivery_stream: 'ecs-fire-hose-delivery-stream', // firehose stream name
},
}),
});
// the docker container port mappings within the container
container.addPortMappings({ containerPort: 80 });
// ALB for external access
const loadBalancedFargateService = new ecs_patterns.ApplicationLoadBalancedFargateService(props.stack, 'ecs-service', {
cluster,
memoryLimitMiB: 1024,
desiredCount: 1,
cpu: 512,
taskDefinition: taskDefinition,
});
// Load balancer URL
new cdk.CfnOutput(props.stack, 'ecs-load-balancer-url', {
exportName: 'ECS-Load-balancer-URL',
value: loadBalancedFargateService.loadBalancer.loadBalancerDnsName,
});
}