Esempio n. 1
0
        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)
                    {
                    }
                }
            }
        }
Esempio n. 2
0
        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);
        }
Esempio n. 4
0
        //###############################################################

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