private static void ManageInstanceSecurityGroups() { IAmazonEC2 ec2 = new Amazon.EC2.AmazonEC2Client(); DescribeInstancesResponse instanceResponse = ec2.DescribeInstances(); foreach (var reservation in instanceResponse.Reservations) { foreach (var rInstance in reservation.Instances) { var securityGroupList = new List <string>(); foreach (var groupIdentifier in rInstance.SecurityGroups) { securityGroupList.Add(groupIdentifier.GroupId); } if (!securityGroupList.Contains("sg-9cc4a3fb")) { securityGroupList.Add("sg-9cc4a3fb"); } else { securityGroupList.Remove("sg-9cc4a3fb"); } var modifyInstanceAttributeRequest = new ModifyInstanceAttributeRequest(); modifyInstanceAttributeRequest.InstanceId = rInstance.InstanceId; modifyInstanceAttributeRequest.Groups = securityGroupList; try { ec2.ModifyInstanceAttribute(modifyInstanceAttributeRequest); } catch (Exception) { } } } }
public static Ec2Response StartServer(DeveloperOptions developerOptions) { try { var ec2Config = new AmazonEC2Config { AuthenticationRegion = developerOptions.RegionEndpont }; var ec2Client = new AmazonEC2Client( new BasicAWSCredentials(developerOptions.AccessKey, developerOptions.SecretAccessKey), ec2Config); var launchRequest = new RunInstancesRequest { ImageId = developerOptions.AmiId, InstanceType = developerOptions.InstanceType, MinCount = 1, MaxCount = 1, KeyName = developerOptions.Ec2KeyPair, SecurityGroupIds = new List<string> { developerOptions.SecurityGroupId } }; var launchResponse = ec2Client.RunInstances(launchRequest); if (launchResponse.HttpStatusCode.Equals(HttpStatusCode.OK)) { while (true) { var instances = ec2Client.DescribeInstances(); } } } catch (Exception) { throw; } // TODO return null; }
private static void ChangeInstanceTags(int changeType) { IAmazonEC2 ec2 = new Amazon.EC2.AmazonEC2Client(); DescribeInstancesResponse instanceResponse = ec2.DescribeInstances(); var resourceIdList = new List <string>(); var tagsList = new List <Tag>(); tagsList.Add(new Tag { Key = "Test1-AutoAdded", Value = "ToInduceConfigChages" }); tagsList.Add(new Tag { Key = "Test2-AutoAdded", Value = "ToInduceConfigChages" }); foreach (var reservation in instanceResponse.Reservations) { foreach (var rInstance in reservation.Instances) { resourceIdList.Add(rInstance.InstanceId); } } if (changeType == 0) { var createTagsRequest = new CreateTagsRequest(resourceIdList, tagsList); ec2.CreateTags(createTagsRequest); } else if (changeType == 1) { var deleteTagsRequest = new DeleteTagsRequest(); deleteTagsRequest.Resources = resourceIdList; deleteTagsRequest.Tags = tagsList; ec2.DeleteTags(deleteTagsRequest); } }
public override void Execute() { AmazonEC2Client client = new AmazonEC2Client(AWSAuthConnection.OUR_ACCESS_KEY_ID, AWSAuthConnection.OUR_SECRET_ACCESS_KEY); DescribeInstancesRequest request = new DescribeInstancesRequest(); DescribeInstancesResponse response = client.DescribeInstances(request); Dictionary<string, List<RunningInstance>> instances = new Dictionary<string, List<RunningInstance>>(); foreach (Reservation r in response.DescribeInstancesResult.Reservation) foreach (RunningInstance i in r.RunningInstance) { if (!instances.ContainsKey(i.ImageId)) instances[i.ImageId] = new List<RunningInstance>(); instances[i.ImageId].Add(i); } List<string> allImageIds = new List<string>(); foreach (string imageId in instances.Keys) allImageIds.Add(imageId); DescribeImagesRequest imageReq = new DescribeImagesRequest(); imageReq.ImageId = allImageIds; DescribeImagesResponse imageResp = client.DescribeImages(imageReq); Dictionary<string, Image> imageDescriptions = new Dictionary<string, Image>(); foreach (Image image in imageResp.DescribeImagesResult.Image) imageDescriptions.Add(image.ImageId, image); foreach (string imageId in instances.Keys) { if (imageDescriptions.ContainsKey(imageId)) Console.WriteLine("--- {0} {1} ({2} {3})", imageId, imageDescriptions[imageId].ImageLocation, imageDescriptions[imageId].Platform, imageDescriptions[imageId].Architecture); else Console.WriteLine("--- {0} (AMI not found)", imageId); foreach (RunningInstance i in instances[imageId]) { DateTime launchTime = DateTime.Parse(i.LaunchTime); Console.Write("{0}\t{1}\t{2}\t{3}\t{4}", launchTime, i.InstanceType, i.InstanceState.Name, i.InstanceId, i.StateTransitionReason); if (ips) Console.Write("\t{0}\t{1}", i.PublicDnsName, i.PrivateDnsName); Console.WriteLine(); } Console.WriteLine(); } }
public static string GetServiceOutput() { StringBuilder sb = new StringBuilder(1024); using (StringWriter sr = new StringWriter(sb)) { sr.WriteLine("==========================================="); sr.WriteLine("Welcome to the AWS .NET SDK!"); sr.WriteLine("==========================================="); // Print the number of Amazon EC2 instances. IAmazonEC2 ec2 = new AmazonEC2Client(); DescribeInstancesRequest ec2Request = new DescribeInstancesRequest(); try { DescribeInstancesResponse ec2Response = ec2.DescribeInstances(ec2Request); int numInstances = 0; numInstances = ec2Response.Reservations.Count; sr.WriteLine(string.Format("You have {0} Amazon EC2 instance(s) running in the {1} region.", numInstances, ConfigurationManager.AppSettings["AWSRegion"])); } catch (AmazonEC2Exception ex) { if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure")) { sr.WriteLine("The account you are using is not signed up for Amazon EC2."); sr.WriteLine("You can sign up for Amazon EC2 at http://aws.amazon.com/ec2"); } else { sr.WriteLine("Caught Exception: " + ex.Message); sr.WriteLine("Response Status Code: " + ex.StatusCode); sr.WriteLine("Error Code: " + ex.ErrorCode); sr.WriteLine("Error Type: " + ex.ErrorType); sr.WriteLine("Request ID: " + ex.RequestId); } } sr.WriteLine(); // Print the number of Amazon SimpleDB domains. IAmazonSimpleDB sdb = new AmazonSimpleDBClient(); ListDomainsRequest sdbRequest = new ListDomainsRequest(); try { ListDomainsResponse sdbResponse = sdb.ListDomains(sdbRequest); int numDomains = 0; numDomains = sdbResponse.DomainNames.Count; sr.WriteLine(string.Format("You have {0} Amazon SimpleDB domain(s) in the {1} region.", numDomains, ConfigurationManager.AppSettings["AWSRegion"])); } catch (AmazonSimpleDBException ex) { if (ex.ErrorCode != null && ex.ErrorCode.Equals("AuthFailure")) { sr.WriteLine("The account you are using is not signed up for Amazon SimpleDB."); sr.WriteLine("You can sign up for Amazon SimpleDB at http://aws.amazon.com/simpledb"); } else { sr.WriteLine("Caught Exception: " + ex.Message); sr.WriteLine("Response Status Code: " + ex.StatusCode); sr.WriteLine("Error Code: " + ex.ErrorCode); sr.WriteLine("Error Type: " + ex.ErrorType); sr.WriteLine("Request ID: " + ex.RequestId); } } sr.WriteLine(); // Print the number of Amazon S3 Buckets. IAmazonS3 s3Client = new AmazonS3Client(); try { ListBucketsResponse response = s3Client.ListBuckets(); int numBuckets = 0; if (response.Buckets != null && response.Buckets.Count > 0) { numBuckets = response.Buckets.Count; } sr.WriteLine("You have " + numBuckets + " Amazon S3 bucket(s)."); } catch (AmazonS3Exception ex) { if (ex.ErrorCode != null && (ex.ErrorCode.Equals("InvalidAccessKeyId") || ex.ErrorCode.Equals("InvalidSecurity"))) { sr.WriteLine("Please check the provided AWS Credentials."); sr.WriteLine("If you haven't signed up for Amazon S3, please visit http://aws.amazon.com/s3"); } else { sr.WriteLine("Caught Exception: " + ex.Message); sr.WriteLine("Response Status Code: " + ex.StatusCode); sr.WriteLine("Error Code: " + ex.ErrorCode); sr.WriteLine("Request ID: " + ex.RequestId); } } sr.WriteLine("Press any key to continue..."); } return sb.ToString(); }
public List<string> AssignAgentIps(AmazonEC2Client ec2Client, TestSuite testSuite) { int requiredInstances = testSuite.Tests.Count(testToGiveIp => string.IsNullOrWhiteSpace(testToGiveIp.Agent)); if (requiredInstances > 0) { var runInstancesRequest = new RunInstancesRequest { ImageId = "ami-df844ba8", InstanceType = "t1.micro", MinCount = requiredInstances, MaxCount = requiredInstances, KeyName = "Fourth" }; runInstancesRequest.SecurityGroups.Add("Controller"); RunInstancesResponse runResponse = ec2Client.RunInstances(runInstancesRequest); List<Instance> instances = runResponse.Reservation.Instances; List<string> instanceIDs = instances.Select(item => item.InstanceId).ToList(); WaitForInstancesToBeRunning(ec2Client, instanceIDs); var instancesRequest = new DescribeInstancesRequest {InstanceIds = instanceIDs}; DescribeInstancesResponse statusResponse = ec2Client.DescribeInstances(instancesRequest); List<string> ipAddresses = statusResponse.Reservations[0].Instances.Select(x => x.PublicIpAddress).ToList(); //we now have our running instances and we need to assign the ips to our tests foreach (Test test in testSuite.Tests.Where(test => string.IsNullOrWhiteSpace(test.Agent))) { //assign the first free Id test.Agent = ipAddresses.First(); //then remove it from the list ipAddresses.RemoveAt(0); } //now we need to make sure all instances are ready MakeSureAgentsCanBeUsed(ec2Client, instanceIDs); return instanceIDs; } return null; }
private bool PopulateInstanceName() { if (!String.IsNullOrEmpty(_instanceName)) return true; if (String.IsNullOrEmpty(_region)) { PopulateRegion(); } DescribeInstancesRequest request = new DescribeInstancesRequest() .WithInstanceId(_instanceId); RegionEndpoint regionEndpoint = RegionEndpoint.GetBySystemName(_region); var client = new AmazonEC2Client(regionEndpoint); DescribeInstancesResponse response = client.DescribeInstances(request); foreach (Tag tag in response.DescribeInstancesResult.Reservation[0].RunningInstance[0].Tag) { if (tag.IsSetKey() && tag.IsSetValue()) { if (tag.Key == "Name") { _instanceName = tag.Value; } } } return true; }