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)); }
/// <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>()); } }
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()); }
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); }
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); } }
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; }