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 void ModifyInstance(string instanceId, string instanceType, string regionName, string profileName) { if (string.IsNullOrWhiteSpace(instanceId)) { throw new Exception("Instance id is not specified."); } AWSCredentials creds = GetAWSCredentials(profileName); if (creds == null) { throw new Exception("AWS credentials are not specified"); } RegionEndpoint endpoint = RegionEndpoint.GetBySystemName(regionName); if (endpoint.DisplayName.Contains("Unknown")) { throw new Exception("AWS region endpoint is not valid."); } try { using (AmazonEC2Client client = new AmazonEC2Client(creds, endpoint)) { ModifyInstanceAttributeRequest req = new ModifyInstanceAttributeRequest { InstanceId = instanceId, InstanceType = instanceType }; client.ModifyInstanceAttribute(req); } } catch (AmazonEC2Exception ex) { // Check the ErrorCode to see if the instance does not exist. if ("InvalidInstanceID.NotFound" == ex.ErrorCode) { throw new Exception($"EC2 instance {instanceId} does not exist."); } // The exception was thrown for another reason, so re-throw the exception. throw; } }
/// <summary> /// This method will look up the current VPC NAT ami in the region and create an instance in the subnet specified. /// </summary> /// <param name="ec2Client">The ec2client used to create the NAT instance</param> /// <param name="request">The properties used to launch the NAT instance.</param> /// <returns></returns> public static Instance LaunchNATInstance(IAmazonEC2 ec2Client, LaunchNATInstanceRequest request) { if (ec2Client == null) { throw new ArgumentNullException("ec2Client"); } if (request == null) { throw new ArgumentNullException("request"); } if (string.IsNullOrEmpty(request.SubnetId)) { throw new InvalidOperationException("request.SubnetId is null"); } if (string.IsNullOrEmpty(request.InstanceType)) { throw new InvalidOperationException("request.InstanceType is null"); } List <Filter> filters = new List <Filter>() { new Filter() { Name = "architecture", Values = new List <string>() { "x86_64" } }, new Filter() { Name = "name", Values = new List <string>() { "ami-vpc-nat-*.x86_64-ebs" } } }; DescribeImagesResponse imageResponse = ec2Client.DescribeImages(new DescribeImagesRequest() { Filters = filters }); var image = FindNATImage(ec2Client); if (image == null) { throw new AmazonEC2Exception("No NAT image found in this region"); } RunInstancesRequest runRequest = new RunInstancesRequest() { InstanceType = request.InstanceType, KeyName = request.KeyName, ImageId = image.ImageId, MinCount = 1, MaxCount = 1, SubnetId = request.SubnetId }; RunInstancesResponse runResponse = ec2Client.RunInstances(runRequest); string instanceId = runResponse.Reservation.Instances[0].InstanceId; // Can't associated elastic IP address until the instance is available WaitForInstanceToStartUp(ec2Client, instanceId); ModifyInstanceAttributeRequest modifyRequest = new ModifyInstanceAttributeRequest() { InstanceId = instanceId, Attribute = "sourceDestCheck", Value = "false" }; ec2Client.ModifyInstanceAttribute(modifyRequest); ec2Client.CreateTags(new CreateTagsRequest() { Resources = new List <string>() { instanceId }, Tags = new List <Tag>() { new Tag() { Key = "Name", Value = "NAT" } } }); var allocationId = ec2Client.AllocateAddress(new AllocateAddressRequest() { Domain = "vpc" }).AllocationId; ec2Client.AssociateAddress(new AssociateAddressRequest() { InstanceId = instanceId, AllocationId = allocationId }); var instance = ec2Client.DescribeInstances(new DescribeInstancesRequest() { InstanceIds = new List <string>() { instanceId } }).Reservations[0].Instances[0]; return(instance); }
//############################################################### public string AddVolume(IAmazonEC2 ec2, string instidstr, string name, int size) { https: //docs.aws.amazon.com/sdkfornet/v3/apidocs/items/EC2/TCreateVolumeRequest.html try { ModifyInstanceAttributeRequest ModifyRequest = new ModifyInstanceAttributeRequest(); ModifyInstanceAttributeResponse ModifyResponse = new ModifyInstanceAttributeResponse(); ModifyRequest.InstanceId = instidstr; BlockDeviceMapping mapping = new BlockDeviceMapping { DeviceName = name, Ebs = new EbsBlockDevice { VolumeType = VolumeType.Gp2, VolumeSize = size } }; List <BlockDeviceMapping> mappinglist; mappinglist = new List <BlockDeviceMapping>(); mappinglist.Add(mapping); List <InstanceBlockDeviceMappingSpecification> BDMSpecList; BDMSpecList = new List <InstanceBlockDeviceMappingSpecification>(); InstanceBlockDeviceMappingSpecification BDMSpec = new InstanceBlockDeviceMappingSpecification { DeviceName = name, Ebs = new EbsInstanceBlockDeviceSpecification { VolumeId = "sdsd" //VolumeType = VolumeType.Gp2, // VolumeSize = size } }; //= mapping; BDMSpecList.Add(BDMSpec); //ModifyRequest.Attribute.Value. //--- ModifyRequest.BlockDeviceMappings.Add(BDMSpecList); return("Done"); } catch (Exception ex) { return(ex.ToString()); } //launchRequest.BlockDeviceMappings = mappinglist; }