Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
image: ecs.ContainerImage.fromRegistry('nathanpeck/greeting'),
memoryLimitMiB: 128
});
greetingContainer.addPortMappings({
containerPort: 3000
});
const greetingService = new ecs.Ec2Service(this, 'greeting-service', {
cluster: cluster,
desiredCount: 2,
taskDefinition: greetingTaskDefinition
});
// Internal load balancer for the backend services
const internalLB = new elbv2.ApplicationLoadBalancer(this, 'internal', {
vpc: vpc,
internetFacing: false
});
const internalListener = internalLB.addListener('PublicListener', { port: 80, open: true });
internalListener.addTargetGroups('default', {
targetGroups: [new elbv2.ApplicationTargetGroup(this, 'default', {
vpc: vpc,
protocol: 'HTTP',
port: 80
})]
});
internalListener.addTargets('name', {
port: 80,
NAME_URL: 'http://' + internalLB.loadBalancerDnsName + '/name'
}
});
greeterContainer.addPortMappings({
containerPort: 3000
});
const greeterService = new ecs.Ec2Service(this, 'greeter-service', {
cluster: cluster,
desiredCount: 2,
taskDefinition: greeterTaskDefinition
});
// Internet facing load balancer for the frontend services
const externalLB = new elbv2.ApplicationLoadBalancer(this, 'external', {
vpc: vpc,
internetFacing: true
});
const externalListener = externalLB.addListener('PublicListener', { port: 80, open: true });
externalListener.addTargets('greeter', {
port: 80,
targets: [greeterService]
});
this.internalDNS = new cdk.CfnOutput(this, 'InternalDNS', {
exportName: 'greeter-app-internal',
value: internalLB.loadBalancerDnsName
});
this.externalDNS = new cdk.CfnOutput(this, 'ExternalDNS', {
constructor(parent: cdk.App, name: string, props: TriviaBackendStackProps) {
super(parent, name, props);
// Network infrastructure
const vpc = new Vpc(this, 'VPC', { maxAzs: 2 });
const serviceSG = new SecurityGroup(this, 'ServiceSecurityGroup', { vpc });
// Lookup pre-existing TLS certificate
const certificateArn = StringParameter.fromStringParameterAttributes(this, 'CertArnParameter', {
parameterName: 'CertificateArn-' + props.domainName
}).stringValue;
// Load balancer
const loadBalancer = new ApplicationLoadBalancer(this, 'ServiceLB', {
vpc,
internetFacing: true
});
serviceSG.connections.allowFrom(loadBalancer, Port.tcp(80));
const domainZone = HostedZone.fromLookup(this, 'Zone', { domainName: props.domainZone });
new ARecord(this, "DNS", {
zone: domainZone,
recordName: props.domainName,
target: AddressRecordTarget.fromAlias(new LoadBalancerTarget(loadBalancer)),
});
// Primary traffic listener
const listener = loadBalancer.addListener('PublicListener', {
port: 443,
open: true,
if (props.cluster && props.vpc) {
throw new Error('You can only specify either vpc or cluster. Alternatively, you can leave both blank');
}
this.cluster = props.cluster || this.getDefaultCluster(this, props.vpc);
this.desiredCount = props.desiredCount || 1;
const internetFacing = props.publicLoadBalancer !== undefined ? props.publicLoadBalancer : true;
const lbProps = {
vpc: this.cluster.vpc,
internetFacing
};
this.loadBalancer = props.loadBalancer !== undefined ? props.loadBalancer : new ApplicationLoadBalancer(this, 'LB', lbProps);
const targetProps = {
port: 80
};
if (props.certificate !== undefined && props.protocol !== undefined && props.protocol !== ApplicationProtocol.HTTPS) {
throw new Error('The HTTPS protocol must be used when a certificate is given');
}
const protocol = props.protocol !== undefined ? props.protocol : (props.certificate ? ApplicationProtocol.HTTPS : ApplicationProtocol.HTTP);
this.listener = this.loadBalancer.addListener('PublicListener', {
protocol,
open: true
});
this.targetGroup = this.listener.addTargets('ECS', targetProps);