/// <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); }
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); }
public async Task StopScalingGroup(string groupName) { UpdateAutoScalingGroupRequest request = new UpdateAutoScalingGroupRequest(); request.MaxSize = request.MinSize = request.DesiredCapacity = 0; request.AutoScalingGroupName = groupName; await client.UpdateAutoScalingGroupAsync(request); }
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); }
/** * 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); }
/// <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))); }
// 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 }); } }