/// <summary>
        /// <para> Creates a new launch configuration. Once created, the new launch configuration is available for immediate use. </para>
        /// <para><b>NOTE:</b> The launch configuration name used must be unique, within the scope of the client's AWS account, and the maximum limit of
        /// launch configurations must not yet have been met, or else the call will fail. </para>
        /// </summary>
        ///
        /// <param name="createLaunchConfigurationRequest">Container for the necessary parameters to execute the CreateLaunchConfiguration service
        ///           method on AmazonAutoScaling.</param>
        ///
        /// <exception cref="LimitExceededException"/>
        /// <exception cref="AlreadyExistsException"/>
        public CreateLaunchConfigurationResponse CreateLaunchConfiguration(CreateLaunchConfigurationRequest createLaunchConfigurationRequest)
        {
            IRequest <CreateLaunchConfigurationRequest> request  = new CreateLaunchConfigurationRequestMarshaller().Marshall(createLaunchConfigurationRequest);
            CreateLaunchConfigurationResponse           response = Invoke <CreateLaunchConfigurationRequest, CreateLaunchConfigurationResponse> (request, this.signer, CreateLaunchConfigurationResponseUnmarshaller.GetInstance());

            return(response);
        }
Esempio n. 2
0
        /**
         * Convert CreateLaunchConfigurationRequest to name value pairs
         */
        private static IDictionary <string, string> ConvertCreateLaunchConfiguration(CreateLaunchConfigurationRequest request)
        {
            IDictionary <string, string> parameters = new Dictionary <string, string>();

            parameters["Action"] = "CreateLaunchConfiguration";
            if (request.IsSetLaunchConfigurationName())
            {
                parameters["LaunchConfigurationName"] = request.LaunchConfigurationName;
            }
            if (request.IsSetImageId())
            {
                parameters["ImageId"] = request.ImageId;
            }
            if (request.IsSetKeyName())
            {
                parameters["KeyName"] = request.KeyName;
            }
            List <string> createLaunchConfigurationRequestSecurityGroupsList      = request.SecurityGroups;
            int           createLaunchConfigurationRequestSecurityGroupsListIndex = 1;

            foreach (string createLaunchConfigurationRequestSecurityGroups in createLaunchConfigurationRequestSecurityGroupsList)
            {
                parameters[String.Concat("SecurityGroups", ".member.", createLaunchConfigurationRequestSecurityGroupsListIndex)] = createLaunchConfigurationRequestSecurityGroups;
                createLaunchConfigurationRequestSecurityGroupsListIndex++;
            }
            if (request.IsSetUserData())
            {
                parameters["UserData"] = request.UserData;
            }
            if (request.IsSetInstanceType())
            {
                parameters["InstanceType"] = request.InstanceType;
            }
            if (request.IsSetKernelId())
            {
                parameters["KernelId"] = request.KernelId;
            }
            if (request.IsSetRamdiskId())
            {
                parameters["RamdiskId"] = request.RamdiskId;
            }
            List <BlockDeviceMapping> createLaunchConfigurationRequestBlockDeviceMappingsList = request.BlockDeviceMappings;
            int createLaunchConfigurationRequestBlockDeviceMappingsListIndex = 1;

            foreach (BlockDeviceMapping createLaunchConfigurationRequestBlockDeviceMappings in createLaunchConfigurationRequestBlockDeviceMappingsList)
            {
                if (createLaunchConfigurationRequestBlockDeviceMappings.IsSetVirtualName())
                {
                    parameters[String.Concat("BlockDeviceMappings", ".member.", createLaunchConfigurationRequestBlockDeviceMappingsListIndex, ".", "VirtualName")] = createLaunchConfigurationRequestBlockDeviceMappings.VirtualName;
                }
                if (createLaunchConfigurationRequestBlockDeviceMappings.IsSetDeviceName())
                {
                    parameters[String.Concat("BlockDeviceMappings", ".member.", createLaunchConfigurationRequestBlockDeviceMappingsListIndex, ".", "DeviceName")] = createLaunchConfigurationRequestBlockDeviceMappings.DeviceName;
                }

                createLaunchConfigurationRequestBlockDeviceMappingsListIndex++;
            }

            return(parameters);
        }
Esempio n. 3
0
        private static IDictionary <string, string> ConvertCreateLaunchConfiguration(CreateLaunchConfigurationRequest request)
        {
            IDictionary <string, string> dictionary = new Dictionary <string, string>();

            dictionary["Action"] = "CreateLaunchConfiguration";
            if (request.IsSetLaunchConfigurationName())
            {
                dictionary["LaunchConfigurationName"] = request.LaunchConfigurationName;
            }
            if (request.IsSetImageId())
            {
                dictionary["ImageId"] = request.ImageId;
            }
            if (request.IsSetKeyName())
            {
                dictionary["KeyName"] = request.KeyName;
            }
            List <string> securityGroups = request.SecurityGroups;
            int           num            = 1;

            foreach (string str in securityGroups)
            {
                dictionary["SecurityGroups" + ".member." + num] = str;
                num++;
            }
            if (request.IsSetUserData())
            {
                dictionary["UserData"] = request.UserData;
            }
            if (request.IsSetInstanceType())
            {
                dictionary["InstanceType"] = request.InstanceType;
            }
            if (request.IsSetKernelId())
            {
                dictionary["KernelId"] = request.KernelId;
            }
            if (request.IsSetRamdiskId())
            {
                dictionary["RamdiskId"] = request.RamdiskId;
            }
            List <BlockDeviceMapping> blockDeviceMappings = request.BlockDeviceMappings;
            int num2 = 1;

            foreach (BlockDeviceMapping mapping in blockDeviceMappings)
            {
                if (mapping.IsSetVirtualName())
                {
                    dictionary[string.Concat(new object[] { "BlockDeviceMappings", ".member.", num2, ".", "VirtualName" })] = mapping.VirtualName;
                }
                if (mapping.IsSetDeviceName())
                {
                    dictionary[string.Concat(new object[] { "BlockDeviceMappings", ".member.", num2, ".", "DeviceName" })] = mapping.DeviceName;
                }
                num2++;
            }
            return(dictionary);
        }
        public async Task CreateLaunchConfigurationAsync_should_do_the_thing()
        {
            // Arrange
            var client         = new AmazonAutoScalingClient();
            var classUnderTest = new LaunchConfigurationService(client);

            var base64EncodeService   = new Base64EncodeService();
            var userData              = @"#!/bin/bash
echo ECS_CLUSTER=lexicon-cluster >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;";
            var userDataBase64Encoded = base64EncodeService.Encode(userData);

            var securityGroup = "sg-010638bf3e6a58e76";

            var request = new CreateLaunchConfigurationRequest
            {
                LaunchConfigurationName = "CreatedFromSDK",
                ImageId            = Ec2Constants.AmiEcsLaunchTypeEc2,
                IamInstanceProfile = "ecsInstanceRole",
                KeyName            = "carl-key-pair",
                UserData           = userDataBase64Encoded,
                InstanceType       = "m5a.large",
                InstanceMonitoring = new InstanceMonitoring()
                {
                    Enabled = true
                },
                SecurityGroups = new List <string>()
                {
                    securityGroup
                },
                BlockDeviceMappings = new List <BlockDeviceMapping>()
                {
                    new BlockDeviceMapping()
                    {
                        DeviceName = "/dev/xvda",
                        Ebs        = new Ebs()
                        {
                            DeleteOnTermination = true,
                            VolumeSize          = 30,
                            VolumeType          = "gp2"
                        }
                    }
                },
                AssociatePublicIpAddress = true
            };

            // Act
            var response = await classUnderTest.CreateLaunchConfigurationAsync(request);

            // Assert
        }
Esempio n. 5
0
 /// <summary>
 /// Create Launch Configuration
 /// </summary>
 /// <param name="request">Create Launch Configuration  request</param>
 /// <returns>Create Launch Configuration  Response from the service</returns>
 public CreateLaunchConfigurationResponse CreateLaunchConfiguration(CreateLaunchConfigurationRequest request)
 {
     return(Invoke <CreateLaunchConfigurationResponse>(ConvertCreateLaunchConfiguration(request)));
 }
        /// <summary>
        /// 本接口(CreateLaunchConfiguration)用于创建新的启动配置。
        ///
        /// * 启动配置,可以通过 `ModifyLaunchConfigurationAttributes` 修改少量字段。如需使用新的启动配置,建议重新创建启动配置。
        ///
        /// * 每个项目最多只能创建20个启动配置,详见[使用限制](https://cloud.tencent.com/document/product/377/3120)。
        /// </summary>
        /// <param name="req">参考<see cref="CreateLaunchConfigurationRequest"/></param>
        /// <returns>参考<see cref="CreateLaunchConfigurationResponse"/>实例</returns>
        public async Task <CreateLaunchConfigurationResponse> CreateLaunchConfiguration(CreateLaunchConfigurationRequest req)
        {
            JsonResponseModel <CreateLaunchConfigurationResponse> rsp = null;

            try
            {
                var strResp = await this.InternalRequest(req, "CreateLaunchConfiguration");

                rsp = JsonConvert.DeserializeObject <JsonResponseModel <CreateLaunchConfigurationResponse> >(strResp);
            }
            catch (JsonSerializationException e)
            {
                throw new TencentCloudSDKException(e.Message);
            }
            return(rsp.Response);
        }
Esempio n. 7
0
        // Test disabled, $ and time constraints
        //[TestMethod]
        //[TestCategory("AutoScaling")]
        public void AutoScalingGroupCRUDTest()
        {
            var groupName        = string.Concat(UtilityMethods.SDK_TEST_PREFIX, "TestAutoScalingGroup", DateTime.UtcNow.Ticks);
            var launchConfigName = string.Concat(UtilityMethods.SDK_TEST_PREFIX, "TestLaunchConfiguration", DateTime.UtcNow.Ticks);

            try
            {
                string imageId;
                using (var ec2Client = new AmazonEC2Client())
                {
                    imageId = Amazon.EC2.Util.ImageUtilities.FindImage(ec2Client, Amazon.EC2.Util.ImageUtilities.WINDOWS_2012_BASE).ImageId;
                }
                // create the initial launch configuration and group
                var createLaunchConfigRequest = new CreateLaunchConfigurationRequest
                {
                    ImageId                 = imageId,
                    InstanceType            = "m1.small",
                    LaunchConfigurationName = launchConfigName
                };
                var createLaunchConfigResponse = Client.CreateLaunchConfiguration(createLaunchConfigRequest);
                Assert.IsNotNull(createLaunchConfigResponse);

                var createGroupRequest = new CreateAutoScalingGroupRequest
                {
                    AutoScalingGroupName = groupName,
                    MinSize           = 1,
                    MaxSize           = 5,
                    AvailabilityZones = new List <string> {
                        "us-east-1b"
                    },
                    LaunchConfigurationName = launchConfigName
                };
                var createGroupresponse = Client.CreateAutoScalingGroup(createGroupRequest);
                Assert.IsNotNull(createGroupresponse);

                // make a simple update to the group
                var updateGroupRequest = new UpdateAutoScalingGroupRequest
                {
                    AutoScalingGroupName = groupName,
                    MinSize = 1,
                    MaxSize = 2,
                    LaunchConfigurationName = launchConfigName
                };
                Client.UpdateAutoScalingGroup(updateGroupRequest);

                // poll the group to check activity
                var describeGroupsRequest = new DescribeAutoScalingGroupsRequest
                {
                    AutoScalingGroupNames = new List <string> {
                        groupName
                    }
                };
                var describeGroupsResponse = Client.DescribeAutoScalingGroups(describeGroupsRequest);
                while (describeGroupsResponse.AutoScalingGroups[0].Instances.Count == 0)
                {
                    Console.WriteLine("Sleeping 30s while some instance starts");
                    Thread.Sleep(TimeSpan.FromSeconds(30));
                    describeGroupsResponse = Client.DescribeAutoScalingGroups(describeGroupsRequest);
                }
                var instances = describeGroupsResponse.AutoScalingGroups[0].Instances;
                Assert.IsNotNull(instances);
                Assert.IsTrue(instances.Count > 0);

                var describeActivitiesRequest = new DescribeScalingActivitiesRequest
                {
                    AutoScalingGroupName = groupName
                };
                var describeActivitiesResponse = Client.DescribeScalingActivities(describeActivitiesRequest);
                while (ActivitiesPending(describeActivitiesResponse.Activities))
                {
                    Console.WriteLine("Sleeping 15s waiting for no activities to be pending/in-progres");
                    Thread.Sleep(TimeSpan.FromSeconds(15));
                    describeActivitiesResponse = Client.DescribeScalingActivities(describeActivitiesRequest);
                }

                // make another configuration change to the group, then manually terminate
                // any remaining instances it contains
                updateGroupRequest = new UpdateAutoScalingGroupRequest
                {
                    AutoScalingGroupName = groupName,
                    MinSize = 0,
                    MaxSize = 2,
                    LaunchConfigurationName = launchConfigName
                };

                Client.UpdateAutoScalingGroup(updateGroupRequest);

                foreach (var instance in instances)
                {
                    var terminateRequest = new TerminateInstanceInAutoScalingGroupRequest
                    {
                        InstanceId = instance.InstanceId,
                        ShouldDecrementDesiredCapacity = true
                    };

                    var terminateResult = Client.TerminateInstanceInAutoScalingGroup(terminateRequest);
                    var activity        = terminateResult.Activity;
                    Assert.IsNotNull(activity);
                    Assert.IsNotNull(activity.ActivityId);
                    Assert.IsNotNull(activity.Description);
                    Assert.IsNotNull(activity.Progress);
                }

                // wait for all instances to terminate, then cleanup
                describeGroupsResponse = Client.DescribeAutoScalingGroups(describeGroupsRequest);
                while (describeGroupsResponse.AutoScalingGroups[0].Instances.Count != 0)
                {
                    Console.WriteLine("Waiting 30s for instance(s) to terminate.");
                    Thread.Sleep(TimeSpan.FromSeconds(30));
                    describeGroupsResponse = Client.DescribeAutoScalingGroups(describeGroupsRequest);
                }

                Assert.IsTrue(describeGroupsResponse.AutoScalingGroups[0].Instances.Count == 0);
            }
            finally
            {
                Client.DeleteAutoScalingGroup(new DeleteAutoScalingGroupRequest
                {
                    AutoScalingGroupName = groupName,
                    ForceDelete          = true
                });
                Client.DeleteLaunchConfiguration(new DeleteLaunchConfigurationRequest
                {
                    LaunchConfigurationName = launchConfigName
                });
            }
        }
        public async Task <CreateLaunchConfigurationResponse> CreateLaunchConfigurationAsync(CreateLaunchConfigurationRequest request)
        {
            var response = await _autoScalingClient.CreateLaunchConfigurationAsync(request);

            return(response);
        }
        public static void Configure()
        {
            //Amazon Credentials
            string accessKey = ConfigurationManager.AppSettings["AWSAccessKeyId"];
            string secretKey = ConfigurationManager.AppSettings["AWSSecretKey"];

            string launchConfigurationName = "ScheduledServicesLaunchConfiguration";

            string autoScalingGroupName = "ScheduledServiceASG";
            string scaleOutPolicyName   = "ScheduledServicesScaleOutSQSPolicy";
            string scaleInPolicyName    = "ScheduledServicesScaleInSQSPolicy";

            string scaleOutARN = "";
            string scaleInARN  = "";

            string queueName = "ScheduledServicesSQS";
            string queueURL  = "";

            string amiID        = "AMI_ID";
            string instanceType = "INSTANCE_TYPE";

            AmazonAutoScalingClient autoScaleClient = new AmazonAutoScalingClient(accessKey, secretKey, RegionEndpoint.USWest2);

            AmazonSQSClient sqsClient = new AmazonSQSClient(accessKey, secretKey, RegionEndpoint.USWest2);

            Console.WriteLine("¡¡¡CONFIGURATION INITIALIZED!!!");
            Console.WriteLine("");

            Console.WriteLine("--------- SQS ---------");
            Console.WriteLine("");

            Console.WriteLine("Creating the simple queue service item");
            Console.WriteLine("");

            //Get or create the sqs instance
            CreateQueueRequest  createQueueRequest  = new CreateQueueRequest(queueName);
            CreateQueueResponse createQueueResponse = sqsClient.CreateQueue(createQueueRequest);

            queueURL = createQueueResponse.QueueUrl;

            Console.WriteLine("Created the simple queue service item with name: " + queueName + " and  url: " + queueURL);
            Console.WriteLine("");

            Console.WriteLine("--------- EC2 ---------");
            Console.WriteLine("");

            //If not exists any launch configuration with this name, creates
            DescribeLaunchConfigurationsRequest describeLaunchConfigurationsRequest = new DescribeLaunchConfigurationsRequest();

            describeLaunchConfigurationsRequest.LaunchConfigurationNames = new List <string>()
            {
                launchConfigurationName
            };
            DescribeLaunchConfigurationsResponse describeLaunchConfigurationsResponse = autoScaleClient.DescribeLaunchConfigurations(describeLaunchConfigurationsRequest);

            Console.WriteLine("Creating the launch configuration");
            Console.WriteLine("");
            if (describeLaunchConfigurationsResponse.LaunchConfigurations.Count == 0)
            {
                //Create Launch Configuration Request
                CreateLaunchConfigurationRequest launchConfigurationRequest = new CreateLaunchConfigurationRequest();
                launchConfigurationRequest.LaunchConfigurationName = launchConfigurationName;
                launchConfigurationRequest.ImageId      = amiID;
                launchConfigurationRequest.InstanceType = instanceType;

                //Create Launch Configuration Response
                CreateLaunchConfigurationResponse launchConfigurationResponse = autoScaleClient.CreateLaunchConfiguration(launchConfigurationRequest);

                Console.WriteLine("Created the launch configuration with name: " + launchConfigurationName);
                Console.WriteLine("");
            }
            else
            {
                Console.WriteLine("Founded the launch configuration with name: " + launchConfigurationName);
                Console.WriteLine("");
            }

            Console.WriteLine("Creating the autoscaling group");
            Console.WriteLine("");


            DescribeAutoScalingGroupsRequest describeAutoScalingGroupsRequest = new DescribeAutoScalingGroupsRequest();

            describeAutoScalingGroupsRequest.AutoScalingGroupNames = new List <string>()
            {
                autoScalingGroupName
            };
            DescribeAutoScalingGroupsResponse describeAutoScalingGroupsResponse = autoScaleClient.DescribeAutoScalingGroups(describeAutoScalingGroupsRequest);

            if (describeAutoScalingGroupsResponse.AutoScalingGroups.Count == 0)
            {
                //Create Auto Scaling Group Request
                CreateAutoScalingGroupRequest autoScalingGroupRequest = new CreateAutoScalingGroupRequest();
                autoScalingGroupRequest.AutoScalingGroupName = autoScalingGroupName;
                autoScalingGroupRequest.MinSize           = 1;
                autoScalingGroupRequest.MaxSize           = 3;
                autoScalingGroupRequest.DesiredCapacity   = 1;
                autoScalingGroupRequest.AvailabilityZones = new List <string>()
                {
                    "us-west-2a", "us-west-2b", "us-west-2c"
                };
                autoScalingGroupRequest.LaunchConfigurationName = launchConfigurationName;

                //Create Auto Scaling Group Response
                autoScaleClient.CreateAutoScalingGroup(autoScalingGroupRequest);

                Console.WriteLine("Created the autoscaling group with name: " + autoScalingGroupName);
                Console.WriteLine("");
            }
            else
            {
                Console.WriteLine("Founded the autoscaling group with name: " + autoScalingGroupName);
                Console.WriteLine("");
            }

            Console.WriteLine("Creating the scale out policy");
            Console.WriteLine("");

            //Policies
            //Creating scaling out policy for the SQS
            PutScalingPolicyRequest scalingOutPolicyRequest = new PutScalingPolicyRequest();

            scalingOutPolicyRequest.PolicyName           = scaleOutPolicyName;
            scalingOutPolicyRequest.AutoScalingGroupName = autoScalingGroupName;
            scalingOutPolicyRequest.ScalingAdjustment    = -1;
            scalingOutPolicyRequest.AdjustmentType       = "ChangeInCapacity";

            PutScalingPolicyResponse scalingOutPolicyResponse = autoScaleClient.PutScalingPolicy(scalingOutPolicyRequest);

            scaleOutARN = scalingOutPolicyResponse.PolicyARN;

            Console.WriteLine("Created the scale out policy with arn: " + scaleOutARN);
            Console.WriteLine("");

            Console.WriteLine("Creating the scale in policy");
            Console.WriteLine("");

            //Creating scaling in policy for the SQS
            PutScalingPolicyRequest scalingInPolicyRequest = new PutScalingPolicyRequest();

            scalingInPolicyRequest.PolicyName           = scaleInPolicyName;
            scalingInPolicyRequest.AutoScalingGroupName = autoScalingGroupName;
            scalingInPolicyRequest.ScalingAdjustment    = 1;
            scalingInPolicyRequest.AdjustmentType       = "ChangeInCapacity";

            PutScalingPolicyResponse scalingInPolicyResponse = autoScaleClient.PutScalingPolicy(scalingInPolicyRequest);

            scaleInARN = scalingInPolicyResponse.PolicyARN;

            Console.WriteLine("Created the scale in policy with arn: " + scaleInARN);
            Console.WriteLine("");

            AmazonCloudWatchClient cloudWatchClient = new AmazonCloudWatchClient(accessKey, secretKey, RegionEndpoint.USWest2);

            Console.WriteLine("--------- CLOUD WATCH ---------");
            Console.WriteLine("");

            Console.WriteLine("Creating the scale in policy");
            Console.WriteLine("");

            //Scale In
            PutMetricAlarmRequest metricAlarmScaleInRequest = new PutMetricAlarmRequest();

            metricAlarmScaleInRequest.AlarmName          = "ScheduledServicesScaleInMetric";
            metricAlarmScaleInRequest.MetricName         = "ApproximateNumberOfMessagesVisible";
            metricAlarmScaleInRequest.Namespace          = "AWS/SQS";
            metricAlarmScaleInRequest.Period             = 300;
            metricAlarmScaleInRequest.Threshold          = 3;
            metricAlarmScaleInRequest.ComparisonOperator = ComparisonOperator.GreaterThanOrEqualToThreshold;
            metricAlarmScaleInRequest.Statistic          = new Statistic("Average");

            Dimension dimensionScaleIn = new Dimension();

            dimensionScaleIn.Name  = "QueueName";
            dimensionScaleIn.Value = queueName;

            metricAlarmScaleInRequest.Dimensions.Add(dimensionScaleIn);
            metricAlarmScaleInRequest.EvaluationPeriods = 2;
            metricAlarmScaleInRequest.AlarmActions.Add(scaleInARN);

            cloudWatchClient.PutMetricAlarm(metricAlarmScaleInRequest);

            Console.WriteLine("Created the scale in policy with name: ScheduledServicesScaleInMetric");
            Console.WriteLine("");

            Console.WriteLine("Creating the scale out policy");
            Console.WriteLine("");

            //Scale Out
            PutMetricAlarmRequest metricAlarmScaleOutRequest = new PutMetricAlarmRequest();

            metricAlarmScaleOutRequest.AlarmName          = "ScheduledServicesScaleOutMetric";
            metricAlarmScaleOutRequest.MetricName         = "ApproximateNumberOfMessagesVisible";
            metricAlarmScaleOutRequest.Namespace          = "AWS/SQS";
            metricAlarmScaleOutRequest.Period             = 300;
            metricAlarmScaleOutRequest.Threshold          = 3;
            metricAlarmScaleOutRequest.ComparisonOperator = ComparisonOperator.LessThanThreshold;
            metricAlarmScaleOutRequest.Statistic          = new Statistic("Average");

            Dimension dimensionScaleOut = new Dimension();

            dimensionScaleOut.Name  = "QueueName";
            dimensionScaleOut.Value = queueName;

            metricAlarmScaleOutRequest.Dimensions.Add(dimensionScaleOut);
            metricAlarmScaleOutRequest.EvaluationPeriods = 2;
            metricAlarmScaleOutRequest.AlarmActions.Add(scaleOutARN);

            cloudWatchClient.PutMetricAlarm(metricAlarmScaleOutRequest);

            Console.WriteLine("Created the scale out policy with name: ScheduledServicesScaleOutMetric");
            Console.WriteLine("");

            Console.WriteLine("¡¡¡CONFIGURATION FINISHED!!!");
        }