def create_ec2_cluster()

in load_test/load_test_stack.py [0:0]


    def create_ec2_cluster(self):
        # create a new VPC
        vpc = ec2.Vpc(self, "TheVPC",
            cidr=self.vpc_cidr
        )
        
        # create vpc peering with existing vpc if needed
        if self.vpc_to_peer:
            self.create_vpc_peering(vpc)
            
        
        # get subnets to create locust cluster in
        if self.deploy_in_public_subnets:
            subnets = ec2.SubnetSelection(subnets=vpc.public_subnets)
        else:
            subnets = ec2.SubnetSelection(subnets=vpc.private_subnets)
                
        # use amazon linux 2
        ami = ec2.AmazonLinuxImage(
            generation=ec2.AmazonLinuxGeneration.AMAZON_LINUX_2,
            edition=ec2.AmazonLinuxEdition.STANDARD,
            storage=ec2.AmazonLinuxStorage.GENERAL_PURPOSE
        )
        
        # create ec2 role 
        role = iam.Role(self, "MyRole",
            assumed_by=iam.ServicePrincipal("ec2.amazonaws.com")
        )
        # give access to read s3 asset
        self.asset_bucket.grant_read(role)
        
        # master user data
        master_userdata = self.get_userdata(True)
        
        # master security group
        master_sg = ec2.SecurityGroup(self, "MasterSecurityGroup",
            vpc=vpc,
            allow_all_outbound=True
        )
        master_sg.add_ingress_rule(ec2.Peer.any_ipv4(), ec2.Port.tcp(80), "allow locust port")
        master_sg.add_ingress_rule(ec2.Peer.any_ipv4(), ec2.Port.tcp(22), "allow ssh")
        
        # create master node
        self.master = ec2.Instance(self, "Master", 
            instance_type=self.instancetype, 
            vpc=vpc, 
            instance_name="locust-master",
            machine_image=ami,
            security_group=master_sg,
            user_data=master_userdata,
            role=role,
            vpc_subnets=subnets,
        )
        
        # create worker nodes
        if self.clustersize > 1:
            # worker user data
            worker_userdata = self.get_userdata(False)
            
            # worker security group
            worker_sg = ec2.SecurityGroup(self, "workerSecurityGroup",
                vpc=vpc,
                allow_all_outbound=True
            )
            worker_sg.add_ingress_rule(ec2.Peer.any_ipv4(), ec2.Port.tcp(22), "allow ssh")
            master_sg.add_ingress_rule(worker_sg, ec2.Port.tcp(5557), "allow worker connection")
            
            # create workers one by one
            for i in range(self.clustersize - 1):
                ec2.Instance(self, "worker%s" % i, 
                    instance_type=self.instancetype, 
                    vpc=vpc, 
                    instance_name="locust-worker%s" % i,
                    machine_image=ami,
                    security_group=worker_sg,
                    user_data=worker_userdata,
                    role=role,
                    vpc_subnets=subnets,
                )