Exemplo n.º 1
0
        public override void AddToLaunchConfiguration(LaunchConfiguration configuration)
        {
            base.AddToLaunchConfiguration(configuration);

            this.InstallRemoteDesktopGateway();
            RecordSet routing = RecordSet.AddByHostedZoneName(
                this.Instance.Template,
                $"RecordSet4{this.Instance.LogicalId}",
                new FnJoin(FnJoinDelimiter.None, new ReferenceProperty(ActiveDirectoryBase.DomainTopLevelParameterName), "."),
                new FnJoin(FnJoinDelimiter.Period,
                           this.Instance.LogicalId,
                           new ReferenceProperty(ActiveDirectoryBase.DomainFqdnParameterName)),
                RecordSet.RecordSetTypeEnum.A);

            var eip = new ElasticIp(this.Instance);

            this.Instance.Template.Resources.Add(eip.LogicalId, eip);

            routing.AddResourceRecord(new ReferenceProperty(eip));

            routing.TTL = "60";

            AddSecurityGroup();
        }
        private static Template GetTestEnvironmentTemplate(string domain)
        {
            Template returnTemplate = new Template(domain, "TestApp1YadayadaSoftwareComVpc", "StackTestApp1YadayadaSoftwareCom", domain.Replace('.', '-'), "10.1.0.0/16");

            Vpc vpc = returnTemplate.Vpcs.Last();

            Subnet subnetDmz = new Subnet(vpc, "10.0.0.0/24", AvailabilityZone.UsEast1A, true);

            returnTemplate.Resources.Add("subnetDmz", subnetDmz);
            Instance instanceWebServer = new Instance(subnetDmz, InstanceTypes.C4Large, StackTest.UsEastWindows2012R2Ami, OperatingSystem.Windows, false);

            returnTemplate.Resources.Add("instanceWebServer", instanceWebServer);
            instanceWebServer.Packages.Add(new InternetInformationServerPackage(null, "gtbb", "yadayada_iis"));

            SecurityGroup securityGroupLoadBalancer = new SecurityGroup("Security Group for ELB", vpc);

            securityGroupLoadBalancer.AddIngress(PredefinedCidr.TheWorld, Protocol.Tcp, Ports.Ssl);
            securityGroupLoadBalancer.AddIngress(PredefinedCidr.TheWorld, Protocol.Tcp, Ports.Http);
            returnTemplate.Resources.Add(securityGroupLoadBalancer.LogicalId, securityGroupLoadBalancer);

            LoadBalancer loadBalancer = new LoadBalancer();

            loadBalancer.HealthCheck.Target             = "HTTP:80/healthcheck.htm";
            loadBalancer.HealthCheck.HealthyThreshold   = 2.ToString();
            loadBalancer.HealthCheck.Interval           = 300.ToString();
            loadBalancer.HealthCheck.Timeout            = 10.ToString();
            loadBalancer.HealthCheck.UnhealthyThreshold = 10.ToString();



            loadBalancer.Subnets.Add(new ReferenceProperty(subnetDmz));
            loadBalancer.SecurityGroups.Add(securityGroupLoadBalancer);

            LoadBalancer.Listener listenerHttps = new LoadBalancer.Listener((int)Ports.Ssl, (int)Ports.Http, "https");
            listenerHttps.SSLCertificateId = "arn:aws:acm:us-east-1:570182474766:certificate/ec3dcdfd-cc6d-4af7-8119-290bf134fa4f";
            loadBalancer.Instances.Add(new ReferenceProperty(instanceWebServer));
            loadBalancer.Listeners.Add(listenerHttps);

            LoadBalancer.Listener listenerHttp = new LoadBalancer.Listener((int)Ports.Http, (int)Ports.Http, "http");
            loadBalancer.Instances.Add(new ReferenceProperty(instanceWebServer));
            loadBalancer.Listeners.Add(listenerHttp);

            returnTemplate.Resources.Add("LoadBalancer", loadBalancer);

            SecurityGroup securityGroupElbToWebServer = new SecurityGroup("Allows Elb To Web Server", vpc);

            returnTemplate.Resources.Add(securityGroupElbToWebServer.LogicalId, securityGroupElbToWebServer);
            securityGroupElbToWebServer.AddIngress(securityGroupLoadBalancer, Protocol.Tcp, Ports.Http);
            instanceWebServer.SecurityGroupIds.Add(new  ReferenceProperty(securityGroupElbToWebServer));

            instanceWebServer.AddElasticIp();
            SecurityGroup securityGroupRdpFromFairfaxToWebServer = new SecurityGroup("Allows RDP access from Fairfax", vpc);

            returnTemplate.Resources.Add(securityGroupRdpFromFairfaxToWebServer.LogicalId, securityGroupRdpFromFairfaxToWebServer);
            securityGroupRdpFromFairfaxToWebServer.AddIngress(new Fairfax(), Protocol.All, Ports.RemoteDesktopProtocol);
            instanceWebServer.SecurityGroupIds.Add(new ReferenceProperty(securityGroupRdpFromFairfaxToWebServer));

            RecordSet recordSetElasticLoadBalancer = RecordSet.AddByHostedZoneName(returnTemplate,
                                                                                   $"www.{domain}.".Replace(".", string.Empty),
                                                                                   "yadayadasoftware.com.",
                                                                                   $"www.{domain}.", RecordSet.RecordSetTypeEnum.CNAME);

            recordSetElasticLoadBalancer.AddResourceRecord(new FnGetAtt(loadBalancer, FnGetAttAttribute.AwsElasticLoadBalancingLoadBalancer));

            loadBalancer.DependsOn.Add(instanceWebServer.Packages.Last().WaitCondition.LogicalId);

            return(returnTemplate);
        }