コード例 #1
0
ファイル: ZAwsCloudController.cs プロジェクト: kueiwa/ZAws
        private DescribeSpotInstanceRequestsResponse GetSpotRequests()
        {
            DescribeSpotInstanceRequestsRequest  request = new DescribeSpotInstanceRequestsRequest();
            DescribeSpotInstanceRequestsResponse resp    = ec2.DescribeSpotInstanceRequests(request);

            return(resp);
        }
コード例 #2
0
        /// <summary>
        /// Query EC2 for spot request information.
        /// </summary>
        protected override void AmazonExecute()
        {
            // Get a list of requests to monitor
            var requestIds = new List <string>();

            foreach (var spotRequest in this.SpotRequests.Get(this.ActivityContext))
            {
                requestIds.Add(spotRequest.SpotInstanceRequestId);
            }

            // Create a monitoring request
            var request = new DescribeSpotInstanceRequestsRequest
            {
                SpotInstanceRequestId = requestIds
            };

            try
            {
                var response = EC2Client.DescribeSpotInstanceRequests(request);

                this.UpdatedSpotRequests.Set(this.ActivityContext, response.DescribeSpotInstanceRequestsResult.SpotInstanceRequest);
            }
            catch (EndpointNotFoundException ex)
            {
                LogBuildMessage(ex.Message);
            }
        }
コード例 #3
0
ファイル: AWSEC2Utils.cs プロジェクト: ohga/USIEngineOnAWS
        public string query_request_spot()
        {
            try
            {
                var client    = get_client();
                var query_req = new DescribeSpotInstanceRequestsRequest();
                query_req.SpotInstanceRequestIds.Add(spot_request_id);
                var query_res = client.DescribeSpotInstanceRequests(query_req);

                string status = query_res.SpotInstanceRequests[0].Status.Code;
                write_log("スポットリクエストの状態は " + status + " です。");
                string tmp = query_res.SpotInstanceRequests[0].InstanceId;
                if (tmp != null && tmp.Length != 0)
                {
                    status = status + "," + tmp;
                }

                return(status);
            }
            catch (Exception ex)
            {
                write_log("ERROR: " + ex.ToString());
                return(null);
            }
        }
        public override void Invoke(AWSCredentials creds, RegionEndpoint region, int maxItems)
        {
            AmazonEC2Config config = new AmazonEC2Config();

            config.RegionEndpoint = region;
            ConfigureClient(config);
            AmazonEC2Client client = new AmazonEC2Client(creds, config);

            DescribeSpotInstanceRequestsResponse resp = new DescribeSpotInstanceRequestsResponse();

            do
            {
                DescribeSpotInstanceRequestsRequest req = new DescribeSpotInstanceRequestsRequest
                {
                    NextToken = resp.NextToken
                    ,
                    MaxResults = maxItems
                };

                resp = client.DescribeSpotInstanceRequests(req);
                CheckError(resp.HttpStatusCode, "200");

                foreach (var obj in resp.SpotInstanceRequests)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
コード例 #5
0
        public async Task <SpotInstanceRequest> GetSpotRequest(string spotRequestId)
        {
            var request = new DescribeSpotInstanceRequestsRequest();

            request.SpotInstanceRequestIds.Add(spotRequestId);

            var describeResponse = await ec2Client.DescribeSpotInstanceRequestsAsync(request);

            return(describeResponse.SpotInstanceRequests[0]);
        }
コード例 #6
0
        // snippet-end:[ec2.dotnet.spot_instance_request_spot_instance]

        // snippet-start:[ec2.dotnet.spot_instance_get_spot_request_state]

        /* Gets the state of a spot instance request.
         * Takes two args:
         *   AmazonEC2Client ec2Client is the EC2 client through which information about the state of the spot instance is made
         *   string spotRequestId is the ID of the spot instance
         *
         * See https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/MEC2DescribeSpotInstanceRequests.html
         */
        private static SpotInstanceState GetSpotRequestState(
            AmazonEC2Client ec2Client,
            string spotRequestId)
        {
            // Create the describeRequest object with all of the request ids
            // to monitor (e.g. that we started).
            var request = new DescribeSpotInstanceRequestsRequest();

            request.SpotInstanceRequestIds.Add(spotRequestId);

            // Retrieve the request we want to monitor.
            var describeResponse = ec2Client.DescribeSpotInstanceRequestsAsync(request);

            SpotInstanceRequest req = describeResponse.Result.SpotInstanceRequests[0];

            return(req.State);
        }
コード例 #7
0
ファイル: AWSEC2Helper.cs プロジェクト: trista-lg/AWSHelpers
        /// <summary>
        /// This function returns the InstanceId for a given spot request
        /// </summary>
        /// <param name="RequestId">The id of the request to fetch the instance id from</param>
        /// <returns>The instance id</returns>
        public string GetInstanceIdForSpotRequest(string RequestId)
        {
            string result = "";

            // Initialize error values
            ErrorCode    = 0;
            ErrorMessage = "";

            // Create request
            var instancesRequest = new DescribeSpotInstanceRequestsRequest()
            {
                SpotInstanceRequestIds = new List <string> ()
                {
                    RequestId
                }
            };

            try
            {
                // Run the operation
                var statusResponse = EC2client.DescribeSpotInstanceRequests(instancesRequest);

                // Check response for errors
                if (statusResponse.HttpStatusCode != HttpStatusCode.OK)
                {
                    ErrorCode    = Convert.ToInt32(statusResponse.HttpStatusCode);
                    ErrorMessage = "Http Error [" + statusResponse.HttpStatusCode.ToString() + "]";
                }
                else
                {
                    result = statusResponse.SpotInstanceRequests[0].InstanceId;
                }
            }
            catch (Exception ex)
            {
                ErrorCode    = -1;
                ErrorMessage = ex.Message + "::" + ex.InnerException;
            }

            return(result);
        }
コード例 #8
0
        // snippet-end:[ec2.dotnet.spot_instance_cancel_spot_request]

        // snippet-start:[ec2.dotnet.spot_instance_terminate_spot_request]

        /* Terminates a spot instance request
         * Takes two args:
         *   AmazonEC2Client ec2Client is the EC2 client through which the spot instance is termitted
         *   string spotRequestId is the ID of the spot instance
         *
         * See https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/MEC2TerminateInstancesTerminateInstancesRequest.html
         */
        private static void TerminateSpotInstance(
            AmazonEC2Client ec2Client,
            string spotRequestId)
        {
            var describeRequest = new DescribeSpotInstanceRequestsRequest();

            describeRequest.SpotInstanceRequestIds.Add(spotRequestId);

            // Retrieve the request we want to monitor.
            var describeResponse = ec2Client.DescribeSpotInstanceRequestsAsync(describeRequest);

            if (SpotInstanceState.Active == describeResponse.Result.SpotInstanceRequests[0].State)
            {
                string instanceId = describeResponse.Result.SpotInstanceRequests[0].InstanceId;

                var terminateRequest = new TerminateInstancesRequest();
                terminateRequest.InstanceIds = new List <string>()
                {
                    instanceId
                };

                try
                {
                    ec2Client.TerminateInstancesAsync(terminateRequest);
                }
                catch (AmazonEC2Exception ex)
                {
                    // Check the ErrorCode to see if the instance does not exist.
                    if ("InvalidInstanceID.NotFound" == ex.ErrorCode)
                    {
                        Console.WriteLine("Instance {0} does not exist.", instanceId);
                    }
                    else
                    {
                        // The exception was thrown for another reason, so re-throw the exception.
                        throw;
                    }
                }
            }
        }
コード例 #9
0
ファイル: Ec2Instance.cs プロジェクト: modulexcite/ec2manager
        private async Task <string> UntilBidActiveAsync(string spotInstanceRequestId, CancellationToken?cancellationToken = null)
        {
            string            instanceId = null;
            CancellationToken token      = cancellationToken.HasValue ? cancellationToken.Value : new CancellationToken();

            var bidStateRequest = new DescribeSpotInstanceRequestsRequest()
            {
                SpotInstanceRequestIds = new List <string>()
                {
                    spotInstanceRequestId
                },
            };

            while (instanceId == null)
            {
                token.ThrowIfCancellationRequested();

                var bidState = (await this.Client.DescribeSpotInstanceRequestsAsync(bidStateRequest)).SpotInstanceRequests[0];
                this.BidStatus = bidState.Status.Code;

                if (bidState.State == "active")
                {
                    instanceId = bidState.InstanceId;
                }
                else if (bidState.State == "open")
                {
                    await Task.Delay(1000, token);
                }
                else
                {
                    throw new Exception(string.Format("Spot bid has reached state {0} for reason {1}", bidState.State, bidState.Status));
                }
            }

            return(instanceId);
        }