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()); }
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."); } } }