load_tests/create_testing_resources/ecs/app.py (48 lines of code) (raw):
import os
from aws_cdk import (
aws_logs as logs,
aws_autoscaling as autoscaling,
aws_ec2 as ec2,
aws_ecs as ecs,
core,
)
# Create necessary ECS load testing resources - cloudwatch log group and ecs cluster
class TestingResources(core.Stack):
def __init__(self, scope: core.Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
log_group = logs.LogGroup(self, 'logGroup',
removal_policy=core.RemovalPolicy.DESTROY)
# Resources for ecs ec2 testing
vpc = ec2.Vpc(
self, "vpc",
max_azs=2
)
vpc.apply_removal_policy(core.RemovalPolicy.DESTROY)
asg = autoscaling.AutoScalingGroup(
self, "fleet",
require_imdsv2=True, # Disable IMDSv1
instance_type=ec2.InstanceType("c5.24xlarge"),
machine_image=ecs.EcsOptimizedImage.amazon_linux2(),
associate_public_ip_address=True,
desired_capacity=5,
vpc=vpc,
vpc_subnets={ 'subnet_type': ec2.SubnetType.PUBLIC },
)
asg.apply_removal_policy(core.RemovalPolicy.DESTROY)
cluster = ecs.Cluster(
self, 'ecsCluster',
vpc=vpc
)
capacity_provider = ecs.AsgCapacityProvider(self, "asgCapacityProvider",
auto_scaling_group=asg,
enable_managed_termination_protection=True
)
cluster.add_asg_capacity_provider(capacity_provider)
cluster.apply_removal_policy(core.RemovalPolicy.DESTROY)
# Add stack outputs
core.CfnOutput(self, 'CloudWatchLogGroupName',
value=log_group.log_group_name,
description='CloudWatch Log Group Name')
core.CfnOutput(self, "ECSClusterName",
value=cluster.cluster_name,
description="ECS Cluster Name")
app = core.App()
TestingResources(app, os.environ['TESTING_RESOURCES_STACK_NAME'])
app.synth()