static Filter[] GetFilters()
        {
            var res = new List<Filter>
                {
                    new Filter().WithName("root-device-type").WithValue("ebs")
                };

            var filterText = ConfigurationManager.AppSettings["InstanceFilters"];
            var filterItems = filterText.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();

            var tagsText = ConfigurationManager.AppSettings["InstanceTags"];
            var tagItems = tagsText.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            filterItems.AddRange(tagItems.Select(item => "tag:" + item));

            foreach (var item in filterItems)
            {
                var parts = item.Split('=');
                if (parts.Length != 2)
                    throw new ApplicationException(string.Format("Invalid filter parameter: '{0}'", item));

                var filter = new Filter().WithName(parts[0]).WithValue(parts[1]);
                res.Add(filter);
            }

            return res.ToArray();
        }
        // delete older snapshots to keep the list clean
        void PruneSnapShots(string volume_id)
        {
            try
            {
                DescribeSnapshotsRequest dsr = new DescribeSnapshotsRequest();
                Filter f = new Filter();
                f.Name = "volume-id";
                f.Value.Add(volume_id);
                dsr.Filter.Add(f);
                dsr.Owner = "self";
                var resp = aec.DescribeSnapshots(dsr);
                var list = resp.DescribeSnapshotsResult.Snapshot;
                list.Sort((Snapshot s1, Snapshot s2) => { return s2.StartTime.CompareTo(s1.StartTime); });

                if (list.Count > snaps2keep)
                {
                    for (int i = snaps2keep; i < list.Count; i++)
                    {
                        DeleteSnapshotRequest del_req = new DeleteSnapshotRequest();
                        del_req.SnapshotId = list[i].SnapshotId;
                        aec.DeleteSnapshot(del_req);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Caught exception while pruning snapshots: " + e.Message);
                Console.WriteLine("Stacktrace: " + e.StackTrace);
            }
        }
Esempio n. 3
0
        // #############################################################################################

        SecurityGroup CreateSecurityGroup(IAmazonEC2 ec2, string secGroupName, string vpc)
        {
            SecurityGroup MySG;

            Amazon.EC2.Model.Filter nameFilter = new Amazon.EC2.Model.Filter();
            nameFilter.Name   = "group-name";
            nameFilter.Values = new List <string>()
            {
                secGroupName
            };

            var describeRequest = new DescribeSecurityGroupsRequest();

            describeRequest.Filters.Add(nameFilter);
            var describeResponse = new DescribeSecurityGroupsResponse();

            describeResponse = ec2.DescribeSecurityGroups(describeRequest);

            if (describeResponse.SecurityGroups.Count > 0)
            {
                //return describeResponse.SecurityGroups[0];
                MySG = describeResponse.SecurityGroups[0];
                MySG = AddSGIPrermissions(ec2, MySG);
                return(MySG);
            }


            var createRequest = new CreateSecurityGroupRequest();

            createRequest.GroupName   = secGroupName;
            createRequest.VpcId       = vpc;
            createRequest.Description = "My sample security group for EC2-Classic";

            var createResponse = new CreateSecurityGroupResponse();
            //createResponse = CreateSecurityGroupResponse(createRequest);
            var Groups = new List <string>()
            {
                createResponse.GroupId
            };


            createResponse = ec2.CreateSecurityGroup(createRequest);

            MySG = new SecurityGroup();

            MySG.GroupId = createResponse.GroupId;
            MySG.VpcId   = vpc;

            MySG = AddSGIPrermissions(ec2, MySG);


            return(MySG);

            // ec2.des
        }
        public List<Image> GetImagesByTagName(string tagName)
        {
            var baseImageTagFilter = new Filter(_filterName, new List<string> {tagName});

            var request = new DescribeImagesRequest
            {
                Filters = new List<Filter> {baseImageTagFilter}
            };

            DescribeImagesResponse response = _ec2Client.DescribeImages(request);
            return response.Images;
        }
Esempio n. 5
0
        internal static void WriteSnapshots(IAmazonEC2 ec2, DateTime captureTime, string accountId, string region)
        {
            var describeSnapshotRequest = new DescribeSnapshotsRequest();
            var filters = new List <Filter>();
            var filter  = new Filter();

            filter.Name   = "owner-id";
            filter.Values = new List <string> {
                accountId
            };
            filters.Add(filter);
            describeSnapshotRequest.Filters = filters;
            var ssResponse = ec2.DescribeSnapshots(describeSnapshotRequest);

            foreach (var snapshot in ssResponse.Snapshots)
            {
                string snapshotJson = JsonConvert.SerializeObject(snapshot);
                Common.UpdateTopology(captureTime, accountId, region, "ss", snapshot.SnapshotId, snapshotJson, "UPDATE");
            }
        }
Esempio n. 6
0
 static IEnumerable<Snapshot> GetSnapshotsWithBackupDate()
 {
     AmazonEC2 ec2 = GetEC2Client();
     Filter filter = new Filter().WithName("tag:BackupDate").WithValue("*");
     var request = new DescribeSnapshotsRequest().WithFilter(filter);
     var response = ec2.DescribeSnapshots(request);
     return response.DescribeSnapshotsResult.Snapshot;
 }
Esempio n. 7
0
        static bool CheckSnapshotCompletion(string snapshotID)
        {
            bool status = false;
            AmazonEC2 ec2 = GetEC2Client();
            Filter filter = new Filter();
            var request = new DescribeSnapshotsRequest().WithSnapshotId(snapshotID);
            var response = ec2.DescribeSnapshots(request);
            foreach (Snapshot s in response.DescribeSnapshotsResult.Snapshot)
            {
                if (s.SnapshotId == snapshotID)
                {
                    if (s.Status == "completed")
                    {
                        status = true;
                    }

                }

            }
            return status;
        }
Esempio n. 8
0
        public async Task detachAndDeleteInternetGatewaysAsync(string vpcid)
        {
            var request = new DescribeInternetGatewaysRequest();
            var filter = new Filter { Name = "attachment.vpc-id" };
            filter.Values.Add(vpcid);
            request.Filters.Add(filter);

            var response = await _ec2Client.DescribeInternetGatewaysAsync(request);

            foreach (var gateway in response.InternetGateways)
            {
                await _ec2Client.DetachInternetGatewayAsync(new DetachInternetGatewayRequest {
                    InternetGatewayId = gateway.InternetGatewayId, VpcId = vpcid
                });
                await _ec2Client.DeleteInternetGatewayAsync(new DeleteInternetGatewayRequest {
                    InternetGatewayId = gateway.InternetGatewayId
                });
            }
        }
Esempio n. 9
0
        // enumerate VPC security group and create a security group for EC2-VPC
        public void create_lunch_checkstatus_for_istance()
        {
            //Create an Amazon EC2 Client Using the the SDK
            var ec2Client = new AmazonEC2Client();
            // enumerate VPC security group
            string        secGroupName = "my-sample-sg-vpc";
            SecurityGroup mySG         = null;
            string        vpcID        = "vpc-7cdc5904";

            Amazon.EC2.Model.Filter vpcFilter = new Amazon.EC2.Model.Filter
            {
                Name   = "vpc-id",
                Values = new List <string>()
                {
                    vpcID
                }
            };
            var dsgRequest = new DescribeSecurityGroupsRequest();

            dsgRequest.Filters.Add(vpcFilter);
            var dsgResponse            = ec2Client.DescribeSecurityGroups(dsgRequest);
            List <SecurityGroup> mySGs = dsgResponse.SecurityGroups;

            foreach (SecurityGroup item in mySGs)
            {
                Console.WriteLine("Existing security group: " + item.GroupId);
                if (item.GroupName == secGroupName)
                {
                    mySG = item;
                }
            }
            //create a security group for EC2-VPC
            if (mySG == null)
            {
                var newSGRequest = new CreateSecurityGroupRequest()
                {
                    GroupName   = secGroupName,
                    Description = "My sample security group for EC2-VPC",
                    VpcId       = vpcID
                };
                var csgResponse = ec2Client.CreateSecurityGroup(newSGRequest);
                Console.WriteLine();
                Console.WriteLine("New security group: " + csgResponse.GroupId);

                List <string> Groups = new List <string>()
                {
                    csgResponse.GroupId
                };
                var newSgRequest = new DescribeSecurityGroupsRequest()
                {
                    GroupIds = Groups
                };
                var newSgResponse = ec2Client.DescribeSecurityGroups(newSgRequest);
                mySG = newSgResponse.SecurityGroups[0];
            }
            //Create and initialize an IpPermission object.

            //iprange = the IP addresses of your local machine
            string ipRange = "0.0.0.0/0";

            List <string> ranges = new List <string>()
            {
                ipRange
            };

            var ipPermission = new IpPermission()
            {
                IpProtocol = "tcp",
                //The beginning and end of the port range. This example specifies a single port, 3389, which is used to communicate with Windows over RDP.
                //it should be changed if u launch a linux instance (use 22 insted )
                FromPort = 3389,
                ToPort   = 3389,
                IpRanges = ranges
            };
            //Create and initialize an AuthorizeSecurityGroupIngressRequest object.

            var ingressRequest = new AuthorizeSecurityGroupIngressRequest();

            ingressRequest.GroupId = mySG.GroupId;
            ingressRequest.IpPermissions.Add(ipPermission);
            //Pass the request object to the AuthorizeSecurityGroupIngress method, which returns an AuthorizeSecurityGroupIngressResponse object.
            var ingressResponse = ec2Client.AuthorizeSecurityGroupIngress(ingressRequest);

            Console.WriteLine("New RDP rule for: " + ipRange);

            //Create and initialize a network interface.for lunch enstance
            string subnetID = "subnet-048d6c59";

            List <string> groups = new List <string>()
            {
                mySG.GroupId
            };
            var eni = new InstanceNetworkInterfaceSpecification()
            {
                DeviceIndex = 0,
                SubnetId    = subnetID,
                Groups      = groups,
                AssociatePublicIpAddress = true
            };
            List <InstanceNetworkInterfaceSpecification> enis = new List <InstanceNetworkInterfaceSpecification>()
            {
                eni
            };

            string amiID       = "ami-06a0d33fc8d328de0";
            string keyPairName = "my-sample-key";

            var launchRequest = new RunInstancesRequest()
            {
                ImageId           = amiID,
                InstanceType      = "m3.large",
                MinCount          = 1,
                MaxCount          = 1,
                KeyName           = keyPairName,
                NetworkInterfaces = enis
            };

            //launch
            RunInstancesResponse launchResponse = ec2Client.RunInstances(launchRequest);

            List <String> instanceIds = new List <string>();

            foreach (Instance instance in launchResponse.Reservation.Instances)
            {
                Console.WriteLine(instance.InstanceId);
                instanceIds.Add(instance.InstanceId);
            }
            //check the status of the enstance
            var instanceRequest = new DescribeInstancesRequest();

            instanceRequest.InstanceIds = new List <string>();
            instanceRequest.InstanceIds.AddRange(instanceIds);
            var response = ec2Client.DescribeInstances(instanceRequest);

            Console.WriteLine(response.Reservations[0].Instances[0].State.Name);
        }