/// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            CreateLaunchConfigurationResponse response = new CreateLaunchConfigurationResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.IsStartElement)
                {
                    if (context.TestExpression("CreateLaunchConfigurationResult", 2))
                    {
                        UnmarshallResult(context, response);
                        continue;
                    }

                    if (context.TestExpression("ResponseMetadata", 2))
                    {
                        response.ResponseMetadata = ResponseMetadataUnmarshaller.Instance.Unmarshall(context);
                    }
                }
            }

            return(response);
        }
コード例 #2
0
        /// <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);
        }
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            CreateLaunchConfigurationResponse response = new CreateLaunchConfigurationResponse();

            while (context.Read())
            {
                if (context.IsStartElement)
                {
                    if (context.TestExpression("ResponseMetadata", 2))
                    {
                        response.ResponseMetadata = ResponseMetadataUnmarshaller.GetInstance().Unmarshall(context);
                    }
                }
            }


            return(response);
        }
        private static void UnmarshallResult(XmlUnmarshallerContext context, CreateLaunchConfigurationResponse response)
        {
            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

            if (context.IsStartOfDocument)
            {
                targetDepth += 2;
            }

            while (context.ReadAtDepth(originalDepth))
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                }
            }

            return;
        }
コード例 #5
0
        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!!!");
        }