public List <SA_AsgEc2Map> GetAsgEc2Maps(string region = null) { var rets = new List <SA_AsgEc2Map>(); if (region != null) { client = new AmazonAutoScalingClient( CredentiaslManager.GetCredential(profile), AwsCommon.GetRetionEndpoint(region)); } var lstSaGroups = new List <SA_AutoScalingGroup>(); var response = client.DescribeAutoScalingGroups(); var lstGroups = response.AutoScalingGroups.FindAll(o => o.Tags[0].Value.IndexOf(environment.ToString()) >= 0); foreach (var group in lstGroups) { if (group.Instances != null) { foreach (var instance in group.Instances) { rets.Add(new SA_AsgEc2Map() { AsgName = group.Tags[0].Value, AutoScalingGroupName = group.AutoScalingGroupName, InstanceId = instance.InstanceId }); } } } return(rets); }
public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems) { AmazonAutoScalingConfig config = new AmazonAutoScalingConfig(); config.RegionEndpoint = region; ConfigureClient(config); AmazonAutoScalingClient client = new AmazonAutoScalingClient(creds, config); DescribeAutoScalingGroupsResponse resp = new DescribeAutoScalingGroupsResponse(); do { DescribeAutoScalingGroupsRequest req = new DescribeAutoScalingGroupsRequest { NextToken = resp.NextToken , MaxRecords = maxItems }; resp = client.DescribeAutoScalingGroups(req); CheckError(resp.HttpStatusCode, "200"); foreach (var obj in resp.AutoScalingGroups) { AddObject(obj); } }while (!string.IsNullOrEmpty(resp.NextToken)); }
public void AutoScalingDescribeAutoScalingGroups() { #region autoscaling-describe-auto-scaling-groups-1 var client = new AmazonAutoScalingClient(); var response = client.DescribeAutoScalingGroups(new DescribeAutoScalingGroupsRequest { AutoScalingGroupNames = new List <string> { "my-auto-scaling-group" } }); List <AutoScalingGroup> autoScalingGroups = response.AutoScalingGroups; #endregion }
internal static void WriteAsgs(DateTime captureTime, string accountId, RegionEndpoint regionEndPoint) { var asc = new AmazonAutoScalingClient(regionEndPoint); DescribeAutoScalingGroupsResponse asgResponse = asc.DescribeAutoScalingGroups(); DescribeAutoScalingInstancesResponse asgInstanceResponse = asc.DescribeAutoScalingInstances(); var db = RedisManager.GetRedisDatabase(); foreach (var asGroup in asgResponse.AutoScalingGroups) { //to do: may not be required. //RedisManager.AddSetWithExpiry(string.Format("{0}-asgs", dataKey), string.Format("asg-{0}", asGroup.AutoScalingGroupName), db); var asgJson = JsonConvert.SerializeObject(asGroup); //RedisManager.AddWithExpiry(string.Format("{0}-asg-{1}", dataKey, asGroup.AutoScalingGroupName), asgJson, db); var newDataKey = Common.GetDataKey(captureTime, accountId, regionEndPoint.SystemName); var entityKey = string.Format("{0}-{1}-{2}", newDataKey, "asg", asGroup.AutoScalingGroupName); Common.UpdateTopology(captureTime, accountId, regionEndPoint.SystemName, "asg", asGroup.AutoScalingGroupName, asgJson, "UPDATE"); //code to add asg name to the instance details var latestDataKey = Common.GetDataKey("latest", accountId, regionEndPoint.SystemName); var latestEntitySetKey = string.Format("{0}-{1}set", latestDataKey, "ins"); foreach (var instance in asGroup.Instances) { //load instance data from redis var latestInstanceKey = RedisManager.GetSetMember(latestEntitySetKey, instance.InstanceId, db); var instanceJson = db.StringGet(latestInstanceKey.ToString()); if (instanceJson.HasValue) { var dataInstance = JsonConvert.DeserializeObject <Data.Instance>(instanceJson); //add elb name to instance dataInstance.AsgKeyName = entityKey; //add the instance data with asg name back to redis instanceJson = JsonConvert.SerializeObject(dataInstance); RedisManager.AddWithExpiry(latestInstanceKey, instanceJson, db); } } } }
void EnsureDeploymentGroupExistsForBundle(AmazonCodeDeployClient codeDeployClient, AmazonIdentityManagementServiceClient iamClient, AmazonAutoScalingClient autoScalingClient, Role role, string deploymentGroupName) { var serviceRoleArn = role.Arn; if (TargetsAutoScalingDeploymentGroup) { var group = autoScalingClient.DescribeAutoScalingGroups() .AutoScalingGroups.FirstOrDefault( asg => asg.Tags.Any(t => t.Key == "DeploymentRole" && t.Value == deploymentGroupName)); if (group == null) { throw new ApplicationException( string.Format("Auto scaling group with DeploymentRole {0} does not exist.", deploymentGroupName)); } try { codeDeployClient.CreateDeploymentGroup(new CreateDeploymentGroupRequest { ApplicationName = CodeDeployApplicationName, DeploymentGroupName = deploymentGroupName, ServiceRoleArn = serviceRoleArn, AutoScalingGroups = new List <string> { group.AutoScalingGroupName } }); } catch (DeploymentGroupAlreadyExistsException) { // reuse a previously created deployment group with the same name } } else { try { Console.WriteLine("Will assume role {0} for deployment", serviceRoleArn); codeDeployClient.CreateDeploymentGroup(new CreateDeploymentGroupRequest { ApplicationName = CodeDeployApplicationName, DeploymentGroupName = deploymentGroupName, ServiceRoleArn = serviceRoleArn, Ec2TagFilters = new List <EC2TagFilter> { new EC2TagFilter { Type = EC2TagFilterType.KEY_AND_VALUE, Key = "DeploymentRole", Value = deploymentGroupName } } }); } catch (DeploymentGroupAlreadyExistsException) { // since this is EC2, we can reuse a previously created deployment group with the same name } } }
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!!!"); }