/// <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); }
/** * 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); }
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 }
/// <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); }
// 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!!!"); }