Amazon Redshift
Clusterverwaltungshandbuch

Verwalten von Snapshots unter der Verwendung von AWS SDK for Java

Das folgende Beispiel illustriert diese üblichen Operationen zu einem Snapshot:

  • Erstellen eines manuellen Cluster-Snapshots von einem Cluster.

  • Anzeige von Informationen zu allen Snapshots eines Clusters.

  • Löschen von manuellen Snapshots eines Clusters.

In diesem Beispiel wird ein Snapshot des Clusters initiiert. Wenn der Snapshot erfolgreich erstellt ist, werden alle manuellen Snapshots, die vor dem neuen Snapshot erstellt wurden, gelöscht. Wenn die Erstellung des manuellen Snapshots initiiert wird, ist der Snapshot nicht sofort verfügbar. Daher verwendet dieses Beispiel eine Schleife zur Abfrage des Status des Snapshots durch den Aufruf der describeClusterSnapshot-Methode. Normalerweise dauert es einige Momente, bis der Snapshot nach seiner Initiierung verfügbar ist. Weitere Informationen zu Snapshots finden Sie unter Amazon Redshift-Snapshots.

Eine schrittweise Anleitung für die Ausführung des folgenden Beispiels finden Sie unter Ausführung von Java-Beispielen für Amazon Redshift unter Verwendung von Eclipse. Sie müssen den Code aktualisieren und eine Cluster-ID angeben.

/** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ // snippet-sourcedescription:[CreateAndDescribeSnapshot demonstrates how to create an Amazon Redshift cluster snapshot and describe existing snapshots.] // snippet-service:[redshift] // snippet-keyword:[Java] // snippet-keyword:[Amazon Redshift] // snippet-keyword:[Code Sample] // snippet-keyword:[CreateClusterSnapshot] // snippet-keyword:[DeleteClusterSnapshot] // snippet-keyword:[DescribeClusterSnapshots] // snippet-sourcetype:[full-example] // snippet-sourcedate:[2019-01-30] // snippet-sourceauthor:[AWS] // snippet-start:[redshift.java.CreateAndDescribeSnapshot.complete] package com.amazonaws.services.redshift; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import com.amazonaws.services.redshift.model.*; public class CreateAndDescribeSnapshot { public static AmazonRedshift client; public static String clusterIdentifier = "***provide a cluster identifier***"; public static long sleepTime = 20; public static void main(String[] args) throws IOException { // Default client using the {@link com.amazonaws.auth.DefaultAWSCredentialsProviderChain} client = AmazonRedshiftClientBuilder.defaultClient(); try { // Unique snapshot identifier String snapshotId = "my-snapshot-" + (new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss")).format(new Date()); Date createDate = createManualSnapshot(snapshotId); waitForSnapshotAvailable(snapshotId); describeSnapshots(); deleteManualSnapshotsBefore(createDate); describeSnapshots(); } catch (Exception e) { System.err.println("Operation failed: " + e.getMessage()); } } private static Date createManualSnapshot(String snapshotId) { CreateClusterSnapshotRequest request = new CreateClusterSnapshotRequest() .withClusterIdentifier(clusterIdentifier) .withSnapshotIdentifier(snapshotId); Snapshot snapshot = client.createClusterSnapshot(request); System.out.format("Created cluster snapshot: %s\n", snapshotId); return snapshot.getSnapshotCreateTime(); } private static void describeSnapshots() { DescribeClusterSnapshotsRequest request = new DescribeClusterSnapshotsRequest() .withClusterIdentifier(clusterIdentifier); DescribeClusterSnapshotsResult result = client.describeClusterSnapshots(request); printResultSnapshots(result); } private static void deleteManualSnapshotsBefore(Date creationDate) { DescribeClusterSnapshotsRequest request = new DescribeClusterSnapshotsRequest() .withEndTime(creationDate) .withClusterIdentifier(clusterIdentifier) .withSnapshotType("manual"); DescribeClusterSnapshotsResult result = client.describeClusterSnapshots(request); for (Snapshot s : result.getSnapshots()) { DeleteClusterSnapshotRequest deleteRequest = new DeleteClusterSnapshotRequest() .withSnapshotIdentifier(s.getSnapshotIdentifier()); Snapshot deleteResult = client.deleteClusterSnapshot(deleteRequest); System.out.format("Deleted snapshot %s\n", deleteResult.getSnapshotIdentifier()); } } private static void printResultSnapshots(DescribeClusterSnapshotsResult result) { System.out.println("\nSnapshot listing:"); for (Snapshot snapshot : result.getSnapshots()) { System.out.format("Identifier: %s\n", snapshot.getSnapshotIdentifier()); System.out.format("Snapshot type: %s\n", snapshot.getSnapshotType()); System.out.format("Snapshot create time: %s\n", snapshot.getSnapshotCreateTime()); System.out.format("Snapshot status: %s\n\n", snapshot.getStatus()); } } private static Boolean waitForSnapshotAvailable(String snapshotId) throws InterruptedException { Boolean snapshotAvailable = false; System.out.println("Wating for snapshot to become available."); while (!snapshotAvailable) { DescribeClusterSnapshotsResult result = client.describeClusterSnapshots(new DescribeClusterSnapshotsRequest() .withSnapshotIdentifier(snapshotId)); String status = (result.getSnapshots()).get(0).getStatus(); if (status.equalsIgnoreCase("available")) { snapshotAvailable = true; } else { System.out.print("."); Thread.sleep(sleepTime*1000); } } return snapshotAvailable; } } // snippet-end:[redshift.java.CreateAndDescribeSnapshot.complete]