Menghapus Snapshot - AWS Storage Gateway

Dokumentasi Amazon S3 File Gateway telah dipindahkan ke Apa itu Amazon S3 File Gateway?

Dokumentasi Amazon FSx File Gateway telah dipindahkan ke Apa itu Amazon FSx File Gateway?

Dokumentasi Tape Gateway telah dipindahkan ke Apa itu Tape Gateway?

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menghapus Snapshot

Anda dapat menghapus snapshot volume penyimpanan Anda. Misalnya, Anda mungkin ingin melakukan ini jika Anda telah mengambil banyak snapshot dari volume penyimpanan dari waktu ke waktu dan Anda tidak memerlukan snapshot yang lebih lama. Karena snapshot adalah cadangan tambahan, jika Anda menghapus snapshot, hanya data yang tidak diperlukan di snapshot lain yang dihapus.

Di konsol Amazon EBS, Anda dapat menghapus snapshot satu per satu. Untuk informasi tentang cara menghapus snapshot menggunakan konsol Amazon EBS, lihat Menghapus Snapshot Amazon EBS di Panduan Pengguna Amazon EC2.

Untuk menghapus beberapa snapshot sekaligus, Anda dapat menggunakan salah satu AWS SDK yang mendukung operasi Storage Gateway. Sebagai contoh, lihatMenghapus Snapshot dengan Menggunakan AWS SDK for Java,Menghapus Snapshot dengan Menggunakan AWS SDK untuk.NET, danMenghapus Snapshot dengan Menggunakan AWS Tools for Windows PowerShell.

Menghapus Snapshot dengan Menggunakan AWS SDK for Java

Untuk menghapus banyak snapshot yang terkait dengan volume, Anda dapat menggunakan pendekatan terprogram. Contoh berikut menunjukkan cara menghapus snapshot menggunakan AWS SDK for Java. Untuk menggunakan kode contoh, Anda harus terbiasa dengan menjalankan aplikasi konsol Java. Untuk informasi selengkapnya, lihat Memulai di AWS SDK for Java Developer Guide. Jika Anda hanya perlu menghapus beberapa snapshot, gunakan konsol seperti yang dijelaskan diMenghapus Snapshot.

contoh : Menghapus Snapshot dengan Menggunakan AWS SDK for Java

Contoh kode Java berikut mencantumkan snapshot untuk setiap volume gateway dan apakah waktu mulai snapshot sebelum atau sesudah tanggal yang ditentukan. Ini menggunakan AWS SDK for Java API untuk Storage Gateway dan Amazon EC2. Amazon EC2 API mencakup operasi untuk bekerja dengan snapshot.

Perbarui kode untuk menyediakan titik akhir layanan, nama sumber daya Amazon gateway Anda (ARN), dan jumlah hari yang lalu Anda ingin menyimpan snapshot. Snapshot yang diambil sebelum cutoff ini dihapus. Anda juga perlu menentukan nilai BooleanviewOnly, yang menunjukkan apakah Anda ingin melihat snapshot yang akan dihapus atau benar-benar melakukan penghapusan snapshot. Jalankan kode terlebih dahulu hanya dengan opsi tampilan (yaitu, dengan viewOnly set ketrue) untuk melihat apa yang dihapus kode. Untuk daftar endpoint AWS layanan yang dapat Anda gunakan dengan Storage Gateway, lihat AWS Storage Gateway Endpoints dan Quotas di. Referensi Umum AWS

import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import com.amazonaws.auth.PropertiesCredentials; import com.amazonaws.services.ec2.AmazonEC2Client; import com.amazonaws.services.ec2.model.DeleteSnapshotRequest; import com.amazonaws.services.ec2.model.DescribeSnapshotsRequest; import com.amazonaws.services.ec2.model.DescribeSnapshotsResult; import com.amazonaws.services.ec2.model.Filter; import com.amazonaws.services.ec2.model.Snapshot; import com.amazonaws.services.storagegateway.AWSStorageGatewayClient; import com.amazonaws.services.storagegateway.model.ListVolumesRequest; import com.amazonaws.services.storagegateway.model.ListVolumesResult; import com.amazonaws.services.storagegateway.model.VolumeInfo; public class ListDeleteVolumeSnapshotsExample { public static AWSStorageGatewayClient sgClient; public static AmazonEC2Client ec2Client; static String serviceURLSG = "https://storagegateway.us-east-1.amazonaws.com"; static String serviceURLEC2 = "https://ec2.us-east-1.amazonaws.com"; // The gatewayARN public static String gatewayARN = "*** provide gateway ARN ***"; // The number of days back you want to save snapshots. Snapshots before this cutoff are deleted // if viewOnly = false. public static int daysBack = 10; // true = show what will be deleted; false = actually delete snapshots that meet the daysBack criteria public static boolean viewOnly = true; public static void main(String[] args) throws IOException { // Create a Storage Gateway and amazon ec2 client sgClient = new AWSStorageGatewayClient(new PropertiesCredentials( ListDeleteVolumeSnapshotsExample.class.getResourceAsStream("AwsCredentials.properties"))); sgClient.setEndpoint(serviceURLSG); ec2Client = new AmazonEC2Client(new PropertiesCredentials( ListDeleteVolumeSnapshotsExample.class.getResourceAsStream("AwsCredentials.properties"))); ec2Client.setEndpoint(serviceURLEC2); List<VolumeInfo> volumes = ListVolumesForGateway(); DeleteSnapshotsForVolumes(volumes, daysBack); } public static List<VolumeInfo> ListVolumesForGateway() { List<VolumeInfo> volumes = new ArrayList<VolumeInfo>(); String marker = null; do { ListVolumesRequest request = new ListVolumesRequest().withGatewayARN(gatewayARN); ListVolumesResult result = sgClient.listVolumes(request); marker = result.getMarker(); for (VolumeInfo vi : result.getVolumeInfos()) { volumes.add(vi); System.out.println(OutputVolumeInfo(vi)); } } while (marker != null); return volumes; } private static void DeleteSnapshotsForVolumes(List<VolumeInfo> volumes, int daysBack2) { // Find snapshots and delete for each volume for (VolumeInfo vi : volumes) { String volumeARN = vi.getVolumeARN(); String volumeId = volumeARN.substring(volumeARN.lastIndexOf("/")+1).toLowerCase(); Collection<Filter> filters = new ArrayList<Filter>(); Filter filter = new Filter().withName("volume-id").withValues(volumeId); filters.add(filter); DescribeSnapshotsRequest describeSnapshotsRequest = new DescribeSnapshotsRequest().withFilters(filters); DescribeSnapshotsResult describeSnapshotsResult = ec2Client.describeSnapshots(describeSnapshotsRequest); List<Snapshot> snapshots = describeSnapshotsResult.getSnapshots(); System.out.println("volume-id = " + volumeId); for (Snapshot s : snapshots){ StringBuilder sb = new StringBuilder(); boolean meetsCriteria = !CompareDates(daysBack, s.getStartTime()); sb.append(s.getSnapshotId() + ", " + s.getStartTime().toString()); sb.append(", meets criteria for delete? " + meetsCriteria); sb.append(", deleted? "); if (!viewOnly & meetsCriteria) { sb.append("yes"); DeleteSnapshotRequest deleteSnapshotRequest = new DeleteSnapshotRequest().withSnapshotId(s.getSnapshotId()); ec2Client.deleteSnapshot(deleteSnapshotRequest); } else { sb.append("no"); } System.out.println(sb.toString()); } } } private static String OutputVolumeInfo(VolumeInfo vi) { String volumeInfo = String.format( "Volume Info:\n" + " ARN: %s\n" + " Type: %s\n", vi.getVolumeARN(), vi.getVolumeType()); return volumeInfo; } // Returns the date in two formats as a list public static boolean CompareDates(int daysBack, Date snapshotDate) { Date today = new Date(); Calendar cal = new GregorianCalendar(); cal.setTime(today); cal.add(Calendar.DAY_OF_MONTH, -daysBack); Date cutoffDate = cal.getTime(); return (snapshotDate.compareTo(cutoffDate) > 0) ? true : false; } }

Menghapus Snapshot dengan Menggunakan AWS SDK untuk.NET

Untuk menghapus banyak snapshot yang terkait dengan volume, Anda dapat menggunakan pendekatan terprogram. Contoh berikut menunjukkan cara menghapus snapshot menggunakan AWS SDK for .NET versi 2 dan 3. Untuk menggunakan kode contoh, Anda harus terbiasa dengan menjalankan aplikasi konsol.NET. Untuk informasi selengkapnya, lihat Memulai di AWS SDK for .NET Developer Guide. Jika Anda hanya perlu menghapus beberapa snapshot, gunakan konsol seperti yang dijelaskan diMenghapus Snapshot.

contoh : Menghapus Snapshot dengan Menggunakan AWS SDK untuk.NET

Dalam contoh kode C # berikut, AWS Identity and Access Management pengguna dapat membuat daftar snapshot untuk setiap volume gateway. Pengguna kemudian dapat menentukan apakah waktu mulai snapshot sebelum atau setelah tanggal tertentu (periode retensi) dan menghapus snapshot yang telah melewati periode retensi. Contoh menggunakan AWS SDK for .NET API untuk Storage Gateway dan Amazon EC2. Amazon EC2 API mencakup operasi untuk bekerja dengan snapshot.

Contoh kode berikut menggunakan AWS SDK for .NET versi 2 dan 3. Anda dapat memigrasikan versi.NET yang lebih lama ke versi yang lebih baru. Untuk informasi selengkapnya, lihat Memigrasi Kode Anda ke Versi Terbaru AWS SDK for .NET.

Perbarui kode untuk menyediakan titik akhir layanan, nama sumber daya Amazon gateway Anda (ARN), dan jumlah hari yang lalu Anda ingin menyimpan snapshot. Snapshot yang diambil sebelum cutoff ini dihapus. Anda juga perlu menentukan nilai BooleanviewOnly, yang menunjukkan apakah Anda ingin melihat snapshot yang akan dihapus atau benar-benar melakukan penghapusan snapshot. Jalankan kode terlebih dahulu hanya dengan opsi tampilan (yaitu, dengan viewOnly set ketrue) untuk melihat apa yang dihapus kode. Untuk daftar endpoint AWS layanan yang dapat Anda gunakan dengan Storage Gateway, lihat AWS Storage Gateway Endpoints dan Quotas di. Referensi Umum AWS

Pertama, Anda membuat pengguna dan melampirkan kebijakan IAM minimum ke pengguna. Kemudian Anda menjadwalkan snapshot otomatis untuk gateway Anda.

Kode berikut membuat kebijakan minimum yang memungkinkan pengguna menghapus snapshot. Dalam contoh ini, kebijakan diberi namasgw-delete-snapshot.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "StmtEC2Snapshots", "Effect": "Allow", "Action": [ "ec2:DeleteSnapshot", "ec2:DescribeSnapshots" ], "Resource": [ "*" ] }, { "Sid": "StmtSgwListVolumes", "Effect": "Allow", "Action": [ "storagegateway:ListVolumes" ], "Resource": [ "*" ] } ] }

Kode C# berikut menemukan semua snapshot di gateway yang ditentukan yang cocok dengan volume dan periode cut-off yang ditentukan dan kemudian menghapusnya.

using System; using System.Collections.Generic; using System.Text; using Amazon.EC2; using Amazon.EC2.Model; using Amazon.StorageGateway.Model; using Amazon.StorageGateway; namespace DeleteStorageGatewaySnapshotNS { class Program { /* * Replace the variables below to match your environment. */ /* IAM AccessKey */ static String AwsAccessKey = "AKIA................"; /* IAM SecretKey */ static String AwsSecretKey = "*******************************"; /* Account number, 12 digits, no hyphen */ static String OwnerID = "123456789012"; /* Your Gateway ARN. Use a Storage Gateway ID, sgw-XXXXXXXX* */ static String GatewayARN = "arn:aws:storagegateway:ap-southeast-2:123456789012:gateway/sgw-XXXXXXXX"; /* Snapshot status: "completed", "pending", "error" */ static String SnapshotStatus = "completed"; /* Region where your gateway is activated */ static String AwsRegion = "ap-southeast-2"; /* Minimum age of snapshots before they are deleted (retention policy) */ static int daysBack = 30; /* * Do not modify the four lines below. */ static AmazonEC2Config ec2Config; static AmazonEC2Client ec2Client; static AmazonStorageGatewayClient sgClient; static AmazonStorageGatewayConfig sgConfig; static void Main(string[] args) { // Create an EC2 client. ec2Config = new AmazonEC2Config(); ec2Config.ServiceURL = "https://ec2." + AwsRegion + ".amazonaws.com"; ec2Client = new AmazonEC2Client(AwsAccessKey, AwsSecretKey, ec2Config); // Create a Storage Gateway client. sgConfig = new AmazonStorageGatewayConfig(); sgConfig.ServiceURL = "https://storagegateway." + AwsRegion + ".amazonaws.com"; sgClient = new AmazonStorageGatewayClient(AwsAccessKey, AwsSecretKey, sgConfig); List<VolumeInfo> StorageGatewayVolumes = ListVolumesForGateway(); List<Snapshot> StorageGatewaySnapshots = ListSnapshotsForVolumes(StorageGatewayVolumes, daysBack); DeleteSnapshots(StorageGatewaySnapshots); } /* * List all volumes for your gateway * returns: A list of VolumeInfos, or null. */ private static List<VolumeInfo> ListVolumesForGateway() { ListVolumesResponse response = new ListVolumesResponse(); try { ListVolumesRequest request = new ListVolumesRequest(); request.GatewayARN = GatewayARN; response = sgClient.ListVolumes(request); foreach (VolumeInfo vi in response.VolumeInfos) { Console.WriteLine(OutputVolumeInfo(vi)); } } catch (AmazonStorageGatewayException ex) { Console.WriteLine(ex.Message); } return response.VolumeInfos; } /* * Gets the list of snapshots that match the requested volumes * and cutoff period. */ private static List<Snapshot> ListSnapshotsForVolumes(List<VolumeInfo> volumes, int snapshotAge) { List<Snapshot> SelectedSnapshots = new List<Snapshot>(); try { foreach (VolumeInfo vi in volumes) { String volumeARN = vi.VolumeARN; String volumeID = volumeARN.Substring(volumeARN.LastIndexOf("/") + 1).ToLower(); DescribeSnapshotsRequest describeSnapshotsRequest = new DescribeSnapshotsRequest(); Filter ownerFilter = new Filter(); List<String> ownerValues = new List<String>(); ownerValues.Add(OwnerID); ownerFilter.Name = "owner-id"; ownerFilter.Values = ownerValues; describeSnapshotsRequest.Filters.Add(ownerFilter); Filter statusFilter = new Filter(); List<String> statusValues = new List<String>(); statusValues.Add(SnapshotStatus); statusFilter.Name = "status"; statusFilter.Values = statusValues; describeSnapshotsRequest.Filters.Add(statusFilter); Filter volumeFilter = new Filter(); List<String> volumeValues = new List<String>(); volumeValues.Add(volumeID); volumeFilter.Name = "volume-id"; volumeFilter.Values = volumeValues; describeSnapshotsRequest.Filters.Add(volumeFilter); DescribeSnapshotsResponse describeSnapshotsResponse = ec2Client.DescribeSnapshots(describeSnapshotsRequest); List<Snapshot> snapshots = describeSnapshotsResponse.Snapshots; Console.WriteLine("volume-id = " + volumeID); foreach (Snapshot s in snapshots) { if (IsSnapshotPastRetentionPeriod(snapshotAge, s.StartTime)) { Console.WriteLine(s.SnapshotId + ", " + s.VolumeId + ", " + s.StartTime + ", " + s.Description); SelectedSnapshots.Add(s); } } } } catch (AmazonEC2Exception ex) { Console.WriteLine(ex.Message); } return SelectedSnapshots; } /* * Deletes a list of snapshots. */ private static void DeleteSnapshots(List<Snapshot> snapshots) { try { foreach (Snapshot s in snapshots) { DeleteSnapshotRequest deleteSnapshotRequest = new DeleteSnapshotRequest(s.SnapshotId); DeleteSnapshotResponse response = ec2Client.DeleteSnapshot(deleteSnapshotRequest); Console.WriteLine("Volume: " + s.VolumeId + " => Snapshot: " + s.SnapshotId + " Response: " + response.HttpStatusCode.ToString()); } } catch (AmazonEC2Exception ex) { Console.WriteLine(ex.Message); } } /* * Checks if the snapshot creation date is past the retention period. */ private static Boolean IsSnapshotPastRetentionPeriod(int daysBack, DateTime snapshotDate) { DateTime cutoffDate = DateTime.Now.Add(new TimeSpan(-daysBack, 0, 0, 0)); return (DateTime.Compare(snapshotDate, cutoffDate) < 0) ? true : false; } /* * Displays information related to a volume. */ private static String OutputVolumeInfo(VolumeInfo vi) { String volumeInfo = String.Format( "Volume Info:\n" + " ARN: {0}\n" + " Type: {1}\n", vi.VolumeARN, vi.VolumeType); return volumeInfo; } } }

Menghapus Snapshot dengan Menggunakan AWS Tools for Windows PowerShell

Untuk menghapus banyak snapshot yang terkait dengan volume, Anda dapat menggunakan pendekatan terprogram. Contoh berikut menunjukkan cara menghapus snapshot menggunakan. AWS Tools for Windows PowerShell Untuk menggunakan contoh skrip, Anda harus terbiasa dengan menjalankan PowerShell skrip. Untuk informasi selengkapnya, lihat Memulai di AWS Tools for Windows PowerShell. Jika Anda perlu menghapus hanya beberapa snapshot, gunakan konsol seperti yang dijelaskan dalamMenghapus Snapshot.

contoh : Menghapus Snapshot dengan Menggunakan AWS Tools for Windows PowerShell

Contoh PowerShell skrip berikut mencantumkan snapshot untuk setiap volume gateway dan apakah waktu mulai snapshot sebelum atau sesudah tanggal yang ditentukan. Ini menggunakan AWS Tools for Windows PowerShell cmdlet untuk Storage Gateway dan Amazon EC2. Amazon EC2 API mencakup operasi untuk bekerja dengan snapshot.

Anda perlu memperbarui skrip dan memberikan gateway Anda Nama Sumber Daya Amazon (ARN) dan jumlah hari yang lalu Anda ingin menyimpan snapshot. Snapshot yang diambil sebelum cutoff ini dihapus. Anda juga perlu menentukan nilai BooleanviewOnly, yang menunjukkan apakah Anda ingin melihat snapshot yang akan dihapus atau benar-benar melakukan penghapusan snapshot. Jalankan kode terlebih dahulu hanya dengan opsi tampilan (yaitu, dengan viewOnly set ketrue) untuk melihat apa yang dihapus kode.

<# .DESCRIPTION Delete snapshots of a specified volume that match given criteria. .NOTES PREREQUISITES: 1) AWS Tools for Windows PowerShell from https://aws.amazon.com/powershell/ 2) Credentials and AWS Region stored in session using Initialize-AWSDefault. For more info see, https://docs.aws.amazon.com/powershell/latest/userguide/specifying-your-aws-credentials.html .EXAMPLE powershell.exe .\SG_DeleteSnapshots.ps1 #> # Criteria to use to filter the results returned. $daysBack = 18 $gatewayARN = "*** provide gateway ARN ***" $viewOnly = $true; #ListVolumes $volumesResult = Get-SGVolume -GatewayARN $gatewayARN $volumes = $volumesResult.VolumeInfos Write-Output("`nVolume List") foreach ($volumes in $volumesResult) { Write-Output("`nVolume Info:") Write-Output("ARN: " + $volumes.VolumeARN) write-Output("Type: " + $volumes.VolumeType) } Write-Output("`nWhich snapshots meet the criteria?") foreach ($volume in $volumesResult) { $volumeARN = $volume.VolumeARN $volumeId = ($volumeARN-split"/")[3].ToLower() $filter = New-Object Amazon.EC2.Model.Filter $filter.Name = "volume-id" $filter.Value.Add($volumeId) $snapshots = get-EC2Snapshot -Filter $filter Write-Output("`nFor volume-id = " + $volumeId) foreach ($s in $snapshots) { $d = ([DateTime]::Now).AddDays(-$daysBack) $meetsCriteria = $false if ([DateTime]::Compare($d, $s.StartTime) -gt 0) { $meetsCriteria = $true } $sb = $s.SnapshotId + ", " + $s.StartTime + ", meets criteria for delete? " + $meetsCriteria if (!$viewOnly -AND $meetsCriteria) { $resp = Remove-EC2Snapshot -SnapshotId $s.SnapshotId #Can get RequestId from response for troubleshooting. $sb = $sb + ", deleted? yes" } else { $sb = $sb + ", deleted? no" } Write-Output($sb) } }