/// <summary>
        /// <para> Updates the configuration for the specified AutoScalingGroup. </para> <para><b>NOTE:</b> To update an Auto Scaling group with a
        /// launch configuration that has the InstanceMonitoring.enabled flag set to false, you must first ensure that collection of group metrics is
        /// disabled. Otherwise, calls to UpdateAutoScalingGroup will fail. If you have previously enabled group metrics collection, you can disable
        /// collection of all group metrics by calling DisableMetricsCollection. </para> <para> The new settings are registered upon the completion of
        /// this call. Any launch configuration settings take effect on any triggers after this call returns. Triggers that are currently in progress
        /// aren't affected. </para> <para><b>NOTE:</b> If the new values are specified for the MinSize or MaxSize parameters, then there will be an
        /// implicit call to SetDesiredCapacity to set the group to the new MaxSize. All optional parameters are left unchanged if not passed in the
        /// request. </para>
        /// </summary>
        ///
        /// <param name="updateAutoScalingGroupRequest">Container for the necessary parameters to execute the UpdateAutoScalingGroup service method on
        ///           AmazonAutoScaling.</param>
        ///
        /// <exception cref="ScalingActivityInProgressException"/>
        public UpdateAutoScalingGroupResponse UpdateAutoScalingGroup(UpdateAutoScalingGroupRequest updateAutoScalingGroupRequest)
        {
            IRequest <UpdateAutoScalingGroupRequest> request  = new UpdateAutoScalingGroupRequestMarshaller().Marshall(updateAutoScalingGroupRequest);
            UpdateAutoScalingGroupResponse           response = Invoke <UpdateAutoScalingGroupRequest, UpdateAutoScalingGroupResponse> (request, this.signer, UpdateAutoScalingGroupResponseUnmarshaller.GetInstance());

            return(response);
        }
Esempio n. 2
0
        private static IDictionary <string, string> ConvertUpdateAutoScalingGroup(UpdateAutoScalingGroupRequest request)
        {
            IDictionary <string, string> dictionary = new Dictionary <string, string>();

            dictionary["Action"] = "UpdateAutoScalingGroup";
            if (request.IsSetAutoScalingGroupName())
            {
                dictionary["AutoScalingGroupName"] = request.AutoScalingGroupName;
            }
            if (request.IsSetLaunchConfigurationName())
            {
                dictionary["LaunchConfigurationName"] = request.LaunchConfigurationName;
            }
            if (request.IsSetMinSize())
            {
                dictionary["MinSize"] = request.MinSize.ToString();
            }
            if (request.IsSetMaxSize())
            {
                dictionary["MaxSize"] = request.MaxSize.ToString();
            }
            if (request.IsSetCooldown())
            {
                dictionary["Cooldown"] = request.Cooldown.ToString();
            }
            List <string> availabilityZones = request.AvailabilityZones;
            int           num = 1;

            foreach (string str in availabilityZones)
            {
                dictionary["AvailabilityZones" + ".member." + num] = str;
                num++;
            }
            return(dictionary);
        }
Esempio n. 3
0
        public async Task StopScalingGroup(string groupName)
        {
            UpdateAutoScalingGroupRequest request = new UpdateAutoScalingGroupRequest();

            request.MaxSize = request.MinSize = request.DesiredCapacity = 0;
            request.AutoScalingGroupName = groupName;
            await client.UpdateAutoScalingGroupAsync(request);
        }
Esempio n. 4
0
        public async Task ChangeScalingGroup(string groupName, AutoScalingGroupSettings settings, string region = null)
        {
            if (region != null)
            {
                client = new AmazonAutoScalingClient(
                    CredentiaslManager.GetCredential(profile),
                    AwsCommon.GetRetionEndpoint(region));
            }
            UpdateAutoScalingGroupRequest request = new UpdateAutoScalingGroupRequest();

            request.MaxSize                = settings.MaxSize;
            request.MinSize                = settings.MinSize;
            request.DesiredCapacity        = settings.DesiredCapacity;
            request.HealthCheckType        = settings.HealthCheckType;
            request.HealthCheckGracePeriod = settings.HealthCheckGracePeriod;
            request.AutoScalingGroupName   = groupName;
            await client.UpdateAutoScalingGroupAsync(request);
        }
Esempio n. 5
0
        /**
         * Convert UpdateAutoScalingGroupRequest to name value pairs
         */
        private static IDictionary <string, string> ConvertUpdateAutoScalingGroup(UpdateAutoScalingGroupRequest request)
        {
            IDictionary <string, string> parameters = new Dictionary <string, string>();

            parameters["Action"] = "UpdateAutoScalingGroup";
            if (request.IsSetAutoScalingGroupName())
            {
                parameters["AutoScalingGroupName"] = request.AutoScalingGroupName;
            }
            if (request.IsSetLaunchConfigurationName())
            {
                parameters["LaunchConfigurationName"] = request.LaunchConfigurationName;
            }
            if (request.IsSetMinSize())
            {
                parameters["MinSize"] = request.MinSize.ToString();
            }
            if (request.IsSetMaxSize())
            {
                parameters["MaxSize"] = request.MaxSize.ToString();
            }
            if (request.IsSetCooldown())
            {
                parameters["Cooldown"] = request.Cooldown.ToString();
            }
            List <string> updateAutoScalingGroupRequestAvailabilityZonesList      = request.AvailabilityZones;
            int           updateAutoScalingGroupRequestAvailabilityZonesListIndex = 1;

            foreach (string updateAutoScalingGroupRequestAvailabilityZones in updateAutoScalingGroupRequestAvailabilityZonesList)
            {
                parameters[String.Concat("AvailabilityZones", ".member.", updateAutoScalingGroupRequestAvailabilityZonesListIndex)] = updateAutoScalingGroupRequestAvailabilityZones;
                updateAutoScalingGroupRequestAvailabilityZonesListIndex++;
            }

            return(parameters);
        }
Esempio n. 6
0
 /// <summary>
 /// Update Auto Scaling Group
 /// </summary>
 /// <param name="request">Update Auto Scaling Group  request</param>
 /// <returns>Update Auto Scaling Group  Response from the service</returns>
 public UpdateAutoScalingGroupResponse UpdateAutoScalingGroup(UpdateAutoScalingGroupRequest request)
 {
     return(Invoke <UpdateAutoScalingGroupResponse>(ConvertUpdateAutoScalingGroup(request)));
 }
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
                });
            }
        }