2019-01-21 13:12:01 -08:00
/**
* 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]
2019-09-05 19:52:34 -07:00
// snippet-sourcesyntax:[java]
2019-01-21 13:12:01 -08:00
// snippet-keyword:[Amazon Redshift]
// snippet-keyword:[Code Sample]
// snippet-keyword:[CreateClusterSnapshot]
// snippet-keyword:[DeleteClusterSnapshot]
// snippet-keyword:[DescribeClusterSnapshots]
// snippet-sourcetype:[full-example]
2019-02-01 14:37:00 -08:00
2019-01-21 13:12:01 -08:00
// snippet-sourcedate:[2015-02-19]
// snippet-sourceauthor:[AWS]
// snippet-start:[redshift.java.CreateAndDescribeSnapshot.complete]
2019-02-01 14:37:00 -08:00
2019-01-21 13:12:01 -08:00
import java.io.IOException ;
import java.text.SimpleDateFormat ;
import java.util.Date ;
2019-02-01 14:37:00 -08:00
import com.amazonaws.services.redshift.model.* ;
2019-01-21 13:12:01 -08:00
public class CreateAndDescribeSnapshot {
2019-02-01 14:37:00 -08:00
public static AmazonRedshift client ;
public static String clusterIdentifier = " ***provide a cluster identifier*** " ;
public static long sleepTime = 20 ;
2019-01-21 13:12:01 -08:00
public static void main ( String [ ] args ) throws IOException {
2019-02-01 14:37:00 -08:00
// Default client using the {@link com.amazonaws.auth.DefaultAWSCredentialsProviderChain}
client = AmazonRedshiftClientBuilder . defaultClient ( ) ;
2019-01-21 13:12:01 -08:00
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 ;
2020-10-21 01:24:38 -07:00
System . out . println ( " Waiting for snapshot to become available. " ) ;
2019-01-21 13:12:01 -08:00
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 ;
}
}
2020-10-21 01:24:38 -07:00
// snippet-end:[redshift.java.CreateAndDescribeSnapshot.complete]