in infra/stack/sample-vpc-ecs-stack.ts [26:64]
onPostConstructor(baseVpc?: ec2.IVpc) {
const databaseHostName = this.getParameter('DatabaseHostName');
const databaseName = this.getParameter('DatabaseName');
const databaseSecretArn = this.getParameter('DatabaseSecretArn');
const databaseSecret = sm.Secret.fromSecretCompleteArn(this, 'secret', databaseSecretArn);
const taskDef = new ecs.FargateTaskDefinition(this, 'TaskDef');
taskDef.addContainer('DefaultContainer', {
image: ecs.ContainerImage.fromAsset(this.stackConfig.FilePath),
logging: new ecs.AwsLogDriver({
streamPrefix: `${this.projectPrefix}-backend-fastapi`
}),
environment: {
HOST_NAME: databaseHostName,
DATABASE_NAME: databaseName,
SECRET_ARN: databaseSecretArn,
},
portMappings: [{
containerPort: 80,
protocol: ecs.Protocol.TCP
}]
});
databaseSecret.grantRead(taskDef.taskRole);
const albEcsService = new ecsPatterns.ApplicationLoadBalancedFargateService(this, 'Service', {
cluster: new ecs.Cluster(this, 'cluster', {
vpc: baseVpc,
clusterName: `${this.projectPrefix}-${this.stackConfig.ClusterName}`
}),
memoryLimitMiB: this.stackConfig.Memory,
cpu: this.stackConfig.Cpu,
taskDefinition: taskDef,
publicLoadBalancer: false,
desiredCount: parseInt(this.stackConfig.DesiredCount)
});
const databaseSecurityGroup = ec2.SecurityGroup.fromSecurityGroupId(this, 'DatabaseSecurityGroup', this.getParameter('DatabaseSecurityGroup'));
databaseSecurityGroup.addIngressRule(albEcsService.service.connections.securityGroups[0], ec2.Port.tcp(3306), 'from backend sg');
}