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);

            DescribeInstanceStatusResponse resp = new DescribeInstanceStatusResponse();

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

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

                foreach (var obj in resp.InstanceStatuses)
                {
                    AddObject(obj);
                }
            }while (!string.IsNullOrEmpty(resp.NextToken));
        }
Esempio n. 2
0
        /// <summary>
        /// Describes the status of one or more instances. Instance status includes the following components:
        /// Status checks - Amazon EC2 performs status checks on running EC2 instances to identify hardware and software issues. For more information, see Status Checks
        /// for Your Instances and Troubleshooting Instances with Failed Status Checks in the Amazon Elastic Compute Cloud User Guide.
        /// Scheduled events - Amazon EC2 can schedule events (such as reboot, stop, or terminate) for your instances related to hardware issues, software updates, or system maintenance.
        /// For more information, see Scheduled Events for Your Instances in the Amazon Elastic Compute Cloud User Guide.
        /// Instance state - You can manage your instances from the moment you launch them through their termination. For more information, see Instance Lifecycle in the Amazon Elastic Compute Cloud 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 <IList <InstanceStatus> > DescribeInstances(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);
            DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest();

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



            //Check Response
            DescribeInstanceStatusResponse response = await client.DescribeInstanceStatusAsync(request, cancellationToken);

            if (response.HttpStatusCode == HttpStatusCode.OK)
            {
                _Log.Verbose("Successfully terminated instances '{0}'", string.Join(",", instances));
                return(response.InstanceStatuses);
            }
            else
            {
                _Log.Error("Failed to terminate instances '{0}'", string.Join(",", instances));
                return(new List <InstanceStatus>());
            }
        }
Esempio n. 3
0
        public static async Task <DescribeInstanceStatusResponse> GetInstanceStatus(IAmazonEC2 ec2Client, GetInstanceStatusRequestConfiguration requestConfiguration)
        {
            DescribeInstanceStatusRequest request = new DescribeInstanceStatusRequest()
            {
                InstanceIds         = new List <string>(requestConfiguration.InstanceIds),
                IncludeAllInstances = requestConfiguration.IncludeAllInstances
            };

            return(await ec2Client.DescribeInstanceStatusAsync(request));
        }
        public static async Task <string[]> FilterInstancesByState(this IAmazonEC2 ec2Client, IEnumerable <string> instanceIds, string stateName)
        {
            var describeRequest = new DescribeInstanceStatusRequest
            {
                InstanceIds         = new List <string>(instanceIds),
                IncludeAllInstances = true
            };

            var describeResponse = await ec2Client.DescribeInstanceStatusAsync(describeRequest);

            return(describeResponse
                   .InstanceStatuses
                   .Where(state => state.InstanceState.Name == stateName)
                   .Select(s => s.InstanceId)
                   .ToArray());
        }
Esempio n. 5
0
        public async Task <InstanceStatus> GetState()
        {
            var request = new DescribeInstanceStatusRequest();

            request.InstanceIds = new List <string>()
            {
                BotConfig.GetCachedConfig().Aws.EC2InstanceId
            };
            request.IncludeAllInstances = true; // show instances that aren't running as well
            var response = await client.DescribeInstanceStatusAsync(request);

            InstanceStatus status = null;

            response.InstanceStatuses.ForEach(i => // unpack the response into an instance status
            {
                Console.WriteLine("checking state of instance " + i.InstanceId);
                status = i;
            });
            return(status);
        }
Esempio n. 6
0
        public InstanceDetails GetInstanceDetails(string instanceId)
        {
            InstanceDetails instanceDetail = null;

            try
            {
                AWSCredentials credentials = new StoredProfileAWSCredentials("FirstProfile");

                var ec2Client = new AmazonEC2Client(credentials, Amazon.RegionEndpoint.USEast1);

                ////var ec2Client = new AmazonEC2Client(Amazon.RegionEndpoint.USEast1);

                var statusRequest = new DescribeInstanceStatusRequest
                {
                    InstanceIds = { instanceId }
                };



                var status = ec2Client.DescribeInstanceStatus(statusRequest).InstanceStatuses[0];

                instanceDetail = new InstanceDetails();

                instanceDetail.InstanceId      = status.InstanceId;
                instanceDetail.InstanceState   = status.InstanceState.Name;
                instanceDetail.InstanceName    = status.Status.Details[0].Name;
                instanceDetail.InstanceStatus  = status.Status.Details[0].Status;
                instanceDetail.SystemState     = status.Status.Status.Value;
                instanceDetail.SystemName      = status.SystemStatus.Details[0].Name;
                instanceDetail.SystemStatus    = status.SystemStatus.Details[0].Status;
                instanceDetail.AvailablityZone = status.AvailabilityZone;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(instanceDetail);
        }
        public List <InstanceDetail> GetVMProperties()
        {
            List <AWSProfile> profile;

            profile = SqlHelper.GetAWSAccounts();
            List <InstanceDetail> profilelist = new List <InstanceDetail>();

            //foreach (var profile_ in profile)
            //{
            //    Amazon.Util.ProfileManager.RegisterProfile(profile_.ProfileName, profile_.Accesskey, profile_.Secretkey);
            //}

            try
            {
                foreach (var profile_ in profile)
                {
                    var regions = Amazon.RegionEndpoint.EnumerableAllRegions;
                    //Amazon.Runtime.AWSCredentials credentials = new Amazon.Runtime.StoredProfileAWSCredentials(profile_.ProfileName);
                    foreach (var r in regions)
                    {
                        string region_;
                        if (r.SystemName != "us-gov-west-1" && r.SystemName != "cn-north-1")
                        {
                            region_ = r.SystemName;
                            var region = RegionEndpoint.GetBySystemName(region_);

                            AmazonEC2Client           ec2            = new AmazonEC2Client(profile_.Accesskey, profile_.Secretkey, region);
                            DescribeInstancesRequest  request        = new DescribeInstancesRequest();
                            DescribeInstancesResponse response       = ec2.DescribeInstances(request);
                            DescribeVolumesRequest    volumeRequest  = new DescribeVolumesRequest();
                            DescribeVolumesResponse   volumeResponse = ec2.DescribeVolumes(volumeRequest);
                            int size = 0;
                            foreach (var volume in volumeResponse.Volumes)
                            {
                                size += volume.Size;
                            }
                            List <Reservation> result = response.Reservations;
                            foreach (var item in result)
                            {
                                List <Instance> results = item.Instances;
                                foreach (var instance in results)
                                {
                                    InstanceDetail p = new InstanceDetail();
                                    p.InstanceId = instance.InstanceId.ToString();
                                    DescribeInstanceStatusRequest req = new DescribeInstanceStatusRequest();
                                    req.InstanceIds.Add(p.InstanceId);
                                    DescribeInstanceStatusResponse resp = ec2.DescribeInstanceStatus(req);
                                    var statuses = resp.InstanceStatuses;
                                    foreach (var status in statuses)
                                    {
                                        p.InstanceState = status.Status.Status;
                                    }

                                    if (p.InstanceState == null)
                                    {
                                        p.InstanceState = "Not Available";
                                    }

                                    p.Region   = r.SystemName;
                                    p.DiskSize = (size / result.Count).ToString() + " GB"; //
                                    if (instance.PublicIpAddress != null)
                                    {
                                        p.IpAddress = instance.PublicIpAddress;
                                    }
                                    else
                                    {
                                        p.IpAddress = "Not Assigned";
                                    }

                                    p.ProfileName   = profile_.ProfileName;
                                    p.InstanceType  = instance.InstanceType;
                                    p.Status        = instance.State.Name.Value;
                                    p.ResourceGroup = "Not Applicable";
                                    if (instance.IamInstanceProfile != null)
                                    {
                                        p.MachineName = instance.IamInstanceProfile.Arn;
                                    }
                                    else
                                    {
                                        p.MachineName = "Not Assigned";
                                    }
                                    p.accountId = profile_.accountId;
                                    var type = instance.InstanceType;
                                    p.Type = "virtualMachines";
                                    var b = instance.Tags.Count;
                                    if (b != 0)
                                    {
                                        p.MachineName = instance.Tags[0].Value;
                                    }
                                    if (instance.Platform != null)
                                    {
                                        p.OSType = instance.Platform;
                                    }
                                    else
                                    {
                                        p.OSType = "Amazon Linux";
                                    }

                                    profilelist.Add(p);
                                }
                            }
                        }
                    }
                }

                return(profilelist);
            }
            catch (Exception e)
            {
                this.log.Error(e);
                return(null);
            }
        }
Esempio n. 8
0
        private void btnServerStart_Click(object sender, EventArgs e)
        {
            this.btnRefreshStatus.Enabled = false;
            this.btnServerStart.Enabled   = false;
            this.btnServerStopAll.Enabled = false;

            //Stop any other ones running first...
            this.btnServerStopAll_Click(null, null);

            try {
                Configuration configuration           = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                string        AMI                     = configuration.AppSettings.Settings["AMI"].Value;
                string        IP                      = configuration.AppSettings.Settings["IPAddress"].Value;
                string        type                    = configuration.AppSettings.Settings["InstanceType"].Value;
                string        securityGroup           = configuration.AppSettings.Settings["SecurityGroup"].Value;
                string        urlToStartupPackage     = "WZA_startupPackageURL=" + configuration.AppSettings.Settings["URLToStartupPackage"].Value;
                bool          shouldUseStartupPackage = bool.Parse(configuration.AppSettings.Settings["ShouldUseStartupPackage"].Value);

                this.statusStripLbl.Text = "Starting a Wowza server - " + DateTime.Now.ToShortTimeString();
                RunInstancesRequest req = new RunInstancesRequest();
                req.EbsOptimized = false;
                req.ImageId      = AMI;
                req.InstanceType = InstanceType.FindValue(type);
                req.MaxCount     = 1;
                req.MinCount     = 1;
                if (shouldUseStartupPackage)
                {
                    byte[] encbuff = System.Text.Encoding.UTF8.GetBytes(urlToStartupPackage);
                    req.UserData = Convert.ToBase64String(encbuff);
                }
                req.SecurityGroupIds = new List <string> {
                    securityGroup
                };
                RunInstancesResponse response = this.EC2.RunInstances(req);

                //wait
                AssociateAddressRequest addressReq = new AssociateAddressRequest();
                Instance latestInstance            = response.Reservation.Instances.OrderBy(o => o.LaunchTime).FirstOrDefault();

                int giveUpCount = 0;
                while (giveUpCount < 20)
                {
                    var statusRequest = new DescribeInstanceStatusRequest {
                        InstanceIds = { latestInstance.InstanceId }
                    };

                    var result = this.EC2.DescribeInstanceStatus(statusRequest);
                    if (result.InstanceStatuses.Count > 0 && result.InstanceStatuses[0].InstanceState.Code == 16)
                    {
                        break;
                    }

                    this.GetStatus(false);
                    giveUpCount++;

                    int timeout = 0;
                    while (timeout < 1000)
                    {
                        this.statusStripLbl.Text = "Waiting for the Wowza server to start- " + DateTime.Now.ToShortTimeString();
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                        timeout++;
                    }
                }

                this.statusStripLbl.Text = "Associated the IP address " + IP + " to the new server - " + DateTime.Now.ToShortTimeString();

                addressReq.InstanceId = latestInstance.InstanceId;
                addressReq.PublicIp   = IP;
                AssociateAddressResponse addressResponse = this.EC2.AssociateAddress(addressReq);

                this.GetStatus(false);
            } catch (Exception ex) {
                this.statusStripLbl.Text = "Caught Exception: " + ex.Message;
            }

            this.btnRefreshStatus.Enabled = true;
            this.btnServerStart.Enabled   = true;
            this.btnServerStopAll.Enabled = true;
        }