メニュー
Amazon Redshift
管理ガイド (API Version 2012年12月1日)

AWS SDK for Java を使用したスナップショットの管理

以下の例では、スナップショットに関係する一般的な操作を示します。

  • クラスターの手動クラスタースナップショットの作成.

  • クラスターのすべてのスナップショットに関する情報の表示.

  • クラスターの手動スナップショットの削除.

この例では、クラスターのスナップショットが開始されます。スナップショットが正常に作成されると、新しいスナップショットよりも前に作成されていた、クラスターの手動スナップショットがすべて削除されます。手動スナップショットの作成が開始されても、スナップショットはすぐに使用可能になりません。したがって、この例では、describeClusterSnapshot メソッドを呼び出すことで、ループを使用してスナップショットのステータスをポーリングします。開始後スナップショットが使用できるようになるまでに通常は数分かかります。スナップショットの詳細については、Amazon Redshift スナップショット を参照してください。

以下の例を実行するための詳しい手順については、「Eclipse を使用した Amazon Redshift の Java 実行例」を参照してください。コードを更新し、クラスター識別子を指定する必要があります。

Copy
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.PropertiesCredentials; import com.amazonaws.services.redshift.AmazonRedshiftClient; import com.amazonaws.services.redshift.model.CreateClusterSnapshotRequest; import com.amazonaws.services.redshift.model.DeleteClusterSnapshotRequest; import com.amazonaws.services.redshift.model.DescribeClusterSnapshotsRequest; import com.amazonaws.services.redshift.model.DescribeClusterSnapshotsResult; import com.amazonaws.services.redshift.model.Snapshot; public class CreateAndDescribeSnapshot { public static AmazonRedshiftClient client; public static String clusterIdentifier = "***provide cluster identifier***"; public static long sleepTime = 10; public static void main(String[] args) throws IOException { AWSCredentials credentials = new PropertiesCredentials( CreateAndDescribeSnapshot.class .getResourceAsStream("AwsCredentials.properties")); client = new AmazonRedshiftClient(credentials); 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; } }