コード例 #1
0
        private void TerminateInstance(ref bool actionSucceeded, ref string actionMessage)
        {
            if (InstanceRequestObj.InstanceState.ToLower() != "running" && InstanceRequestObj.InstanceState.ToLower() != "stopped")
            {
                actionSucceeded = false;
                actionMessage   = $"The instance {InstanceRequestObj.InstanceName} is currently in {InstanceRequestObj.InstanceState} state , and cannot be terminated at this time.";
                return;
            }
            var request = new TerminateInstancesRequest
            {
                InstanceIds = new List <string>()
                {
                    InstanceRequestObj.InstanceID
                }
            };

            try
            {
                TerminateInstancesResponse response = Ec2Client.TerminateInstancesAsync(request).GetAwaiter().GetResult();
                foreach (InstanceStateChange item in response.TerminatingInstances)
                {
                    Console.WriteLine("Stopped instance: " + item.InstanceId);
                    Console.WriteLine("Instance state: " + item.CurrentState.Name);
                }
                actionSucceeded = true;
                actionMessage   = $"The instance {InstanceRequestObj.InstanceName} is being terminated. Please check the AWS Console to verify.";
            }
            catch (Exception ex)
            {
                context.Logger.LogLine($"ServerOperationsHelper::TerminateInstance {ex.Message}");
                context.Logger.LogLine($"ServerOperationsHelper::TerminateInstance {ex.StackTrace}");
                actionSucceeded = false;
                actionMessage   = $"Could not terminate {InstanceRequestObj.InstanceName} . Please contact your administrator.";
            }
        }
コード例 #2
0
ファイル: EC2Manager.cs プロジェクト: jon-adams/Cake.AWS.EC2
        /// <summary>
        /// Shuts down one or more instances. This operation is idempotent; if you terminate an instance more than once, each call succeeds.
        /// Terminated instances remain visible after termination (for approximately one hour). By default, Amazon EC2 deletes all EBS volumes that were attached when the instance
        /// launched. Volumes attached after instance launch continue running. You can stop, start, and terminate EBS-backed instances. You can only terminate
        /// instance store-backed instances. What happens to an instance differs if you stop it or terminate it. For example, when you stop an instance, the root device and
        /// any other devices attached to the instance persist. When you terminate an instance, any attached EBS volumes with the DeleteOnTermination block device mapping parameter
        /// set to true are automatically deleted. For more information about the differences between stopping and terminating instances, see Instance Lifecycle in the Amazon EC2 User Guide.
        /// </summary>
        /// <param name="instances">A list of instance IDs to be stopped.</param>
        /// <param name="settings">The <see cref="EC2Settings"/> used during the request to AWS.</param>
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        public async Task <bool> TerminateInstances(IList <string> instances, EC2Settings settings, CancellationToken cancellationToken = default(CancellationToken))
        {
            if ((instances == null) || (instances.Count == 0))
            {
                throw new ArgumentNullException("instances");
            }



            //Create Request
            AmazonEC2Client           client  = this.CreateClient(settings);
            TerminateInstancesRequest request = new TerminateInstancesRequest();

            foreach (string instance in instances)
            {
                request.InstanceIds.Add(instance);
            }



            //Check Response
            TerminateInstancesResponse response = await client.TerminateInstancesAsync(request, cancellationToken);

            if (response.HttpStatusCode == HttpStatusCode.OK)
            {
                _Log.Verbose("Successfully terminated instances '{0}'", string.Join(",", instances));
                return(true);
            }
            else
            {
                _Log.Error("Failed to terminate instances '{0}'", string.Join(",", instances));
                return(false);
            }
        }
コード例 #3
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            TerminateInstancesResponse response = new TerminateInstancesResponse();

            int originalDepth = context.CurrentDepth;
            int targetDepth   = originalDepth + 1;

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

            while (context.ReadAtDepth(originalDepth))
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("instancesSet/item", targetDepth))
                    {
                        var unmarshaller = InstanceStateChangeUnmarshaller.Instance;
                        var item         = unmarshaller.Unmarshall(context);
                        response.TerminatingInstances.Add(item);
                        continue;
                    }
                }
            }

            return(response);
        }
コード例 #4
0
ファイル: ZAwsEc2.cs プロジェクト: kueiwa/ZAws
        protected override void DoDeleteObject()
        {
            CheckProtected(ProductionOptions.NonStop | ProductionOptions.DoNotDestroy);

            if (Status != Ec2Status.Terminated)
            {
                TerminateInstancesResponse resp = myController.ec2.TerminateInstances(new TerminateInstancesRequest()
                                                                                      .WithInstanceId(InstanceId));
            }
        }
コード例 #5
0
        public void terminate(string instanceId)
        {
            try
            {
                TerminateInstancesRequest request = new TerminateInstancesRequest();
                request.InstanceId.Add(instanceId);

                TerminateInstancesResponse response = _service.TerminateInstances(request);
            }
            catch (AmazonEC2Exception ex)
            {
                throw new Exception("Caught Exception: " + ex.XML);
            }
        }
コード例 #6
0
ファイル: AwsManager.cs プロジェクト: jonasluz/mia-nuvem
    public IDictionary <string, string> TerminateInstance(List <string> instancesIds)
    {
        IDictionary <string, string> result;

        // Destrói uma instância.
        try
        {
            TerminateInstancesRequest  terminateRequest  = new TerminateInstancesRequest(instancesIds);
            TerminateInstancesResponse terminateResponse = Ec2.TerminateInstances(terminateRequest);
            result = terminateResponse.ResponseMetadata.Metadata;
            result.Add("STATUS_CODE", terminateResponse.HttpStatusCode.ToString());
            result.Add("RESPONSE", terminateResponse.ToString());
        }
        catch (AmazonEC2Exception ex)
        {
            throw new AwsException(ex);
        }

        return(result);
    }
        public override AmazonWebServiceResponse Unmarshall(XmlUnmarshallerContext context)
        {
            TerminateInstancesResponse response = new TerminateInstancesResponse();

            int targetDepth = 2;

            while (context.Read())
            {
                if (context.IsStartElement || context.IsAttribute)
                {
                    if (context.TestExpression("instancesSet/item", targetDepth))
                    {
                        response.TerminatingInstances.Add(InstanceStateChangeUnmarshaller.GetInstance().Unmarshall(context));

                        continue;
                    }
                }
            }


            return(response);
        }
コード例 #8
0
        /// <summary>
        /// terminates an instance
        /// </summary>
        /// <param name="instanceId"></param>
        /// <param name="ec2Client"></param>
        /// <returns></returns>
        private bool TerminateInstance(string instanceId)
        {
            bool returnValue = false;

            using (AmazonEC2Client ec2Client = new AmazonEC2Client())
            {
                TerminateInstancesRequest terminateRequest = new TerminateInstancesRequest();
                terminateRequest.InstanceIds = new List <string>()
                {
                    instanceId
                };
                try
                {
                    TerminateInstancesResponse terminateResponse = ec2Client.TerminateInstancesAsync(terminateRequest).Result;
                    foreach (InstanceStateChange stateChange in terminateResponse.TerminatingInstances)
                    {
                        if (stateChange.InstanceId.Equals(instanceId, StringComparison.OrdinalIgnoreCase))
                        {
                            returnValue = true;
                            break;
                        }
                    }
                }
                catch (AmazonEC2Exception ec2Error)
                {
                    if (ec2Error.ErrorCode.CaseInsensitiveContains("InvalidInstanceID.NotFound"))
                    {
                        returnValue = false;
                    }
                    else
                    {
                        throw;
                    }
                }
                return(returnValue);
            }
        }
コード例 #9
0
        public string TerminateInstance(IAmazonEC2 ec2, string instidstr)
        //terminate ec2 instance
        {
            TerminateInstancesRequest  Terminatereq;
            TerminateInstancesResponse TerminateInstancesResponse = null;

            try
            {
                Terminatereq = new TerminateInstancesRequest
                {
                    InstanceIds = new List <string>()
                    {
                        instidstr
                    }
                };

                TerminateInstancesResponse = ec2.TerminateInstances(Terminatereq);
                return("Done");
            }
            catch (Exception ex)
            {
                return(ex.Message + "\n" + ex.StackTrace);
            }
        }