コード例 #1
0
        private String getImagesAsCsv(ILambdaContext context)
        {
            String accountId        = context.InvokedFunctionArn.Split(':')[4];
            var    ec2Client        = new AmazonEC2Client();
            var    asClient         = new AmazonAutoScalingClient();
            var    getImagesRequest = new DescribeImagesRequest();
            var    getLCRequest     = new DescribeLaunchConfigurationsRequest();

            getLCRequest.MaxRecords = 100;


            getImagesRequest.Filters.Add(new Amazon.EC2.Model.Filter
            {
                Name   = "is-public",
                Values = new List <string>()
                {
                    "false"
                }
            });
            getImagesRequest.Filters.Add(new Amazon.EC2.Model.Filter
            {
                Name   = "owner-id",
                Values = new List <string>()
                {
                    accountId
                }
            });

            var lcResponse     = asClient.DescribeLaunchConfigurationsAsync(getLCRequest);
            var imagesResponse = ec2Client.DescribeImagesAsync(getImagesRequest);

            imagesResponse.Wait();
            lcResponse.Wait();
            imagesResponse.Result.Images.Sort((image1, image2) => - 1 * image1.CreationDate.CompareTo(image2.CreationDate));
            List <LaunchConfiguration> launchConfigIds = lcResponse.Result.LaunchConfigurations;

            var sb = new StringBuilder();

            sb.Append("DateCreated,AMI-Name,AMI-ID,OwnerID,LaunchConfigExists,LaunchConfigName,Description\n");
            imagesResponse.Result.Images.ForEach(i => {
                List <String> lcs = launchConfigIds.FindAll(lc => lc.ImageId.Equals(i.ImageId)).Select(lc => lc.LaunchConfigurationName).ToList();
                bool lcExists     = lcs.Count > 0;
                String sLcs       = lcExists ? String.Join(",", lcs) : String.Empty;
                sb.Append($"{i.CreationDate},{i.Name},{i.ImageId},{i.OwnerId},{lcExists},{sLcs},{i.Description}\n");
            });
            return(sb.ToString());
        }
コード例 #2
0
        private static async Task DeleteAmis()
        {
            var client    = new AmazonEC2Client(RegionEndpoint.APSoutheast2);
            var asgClient = new AmazonAutoScalingClient(RegionEndpoint.APSoutheast2);

            var request = new DescribeImagesRequest();

            request.Owners.Add(ownerId);
            var images = await client.DescribeImagesAsync(request);

            var launchConfigs = await asgClient.DescribeLaunchConfigurationsAsync();

            var dateToKeepAmisFrom = new DateTime(2018, 11, 03);

            foreach (var image in images.Images.Where(x => DateTime.Parse(x.CreationDate) < dateToKeepAmisFrom))
            {
                Console.WriteLine($"Deleting Image: {image.ImageId} - {image.Name}...");
                if (!image.Tags.Any(t => t.Key == "Master"))
                {
                    if (launchConfigs.LaunchConfigurations.Any(x => x.ImageId == image.ImageId))
                    {
                        Console.WriteLine("Skipped belonging to Launch configuration.");
                    }
                    else
                    {
                        await client.DeregisterImageAsync(new DeregisterImageRequest(image.ImageId));

                        var snapshotIds = image.BlockDeviceMappings.Select(x => x.Ebs.SnapshotId);
                        foreach (var snapshotId in snapshotIds)
                        {
                            Console.WriteLine($"Deleting Snapshot {snapshotId}...");
                            await client.DeleteSnapshotAsync(new DeleteSnapshotRequest(snapshotId));
                        }
                    }
                }
                else
                {
                    Console.WriteLine("Skipping because having Tag of Master.");
                }
            }
        }