func()

in sample_apps_reinvent2021/goV2/utils/timestream-dependency-helper.go [585:655]


func (timestreamDependencyHelper TimestreamDependencyHelper) DeleteS3Bucket(bucketName string) error {

	bucketExistsFlag, err := timestreamDependencyHelper.S3BucketExists(bucketName)
	if bucketExistsFlag == false {
		return err
	}
	// Setup BatchDeleteIterator to iterate through a list of objects.
	deleteObject := func(bucket, key, versionId *string) {
		fmt.Printf("Object: %s/%s\n", *key, aws.ToString(versionId))
		_, err := timestreamDependencyHelper.S3Svc.DeleteObject(context.TODO(), &s3.DeleteObjectInput{
			Bucket:    bucket,
			Key:       key,
			VersionId: versionId,
		})
		if err != nil {
			fmt.Printf("Failed to delete object: %v", err)
		}
	}

	in := &s3.ListObjectsV2Input{Bucket: aws.String(bucketName)}
	for {
		out, err := timestreamDependencyHelper.S3Svc.ListObjectsV2(context.TODO(), in)
		if err != nil {
			fmt.Printf("Failed to list objects: %v", err)
		}
		for _, item := range out.Contents {
			deleteObject(&bucketName, item.Key, nil)
		}
		if out.IsTruncated {
			in.ContinuationToken = out.NextContinuationToken
		} else {
			break
		}
	}

	inVer := &s3.ListObjectVersionsInput{Bucket: aws.String(bucketName)}
	for {
		out, err := timestreamDependencyHelper.S3Svc.ListObjectVersions(context.TODO(), inVer)
		if err != nil {
			fmt.Printf("Failed to list version objects: %v", err)
		}

		for _, item := range out.DeleteMarkers {
			deleteObject(&bucketName, item.Key, item.VersionId)
		}

		for _, item := range out.Versions {
			deleteObject(&bucketName, item.Key, item.VersionId)
		}

		if out.IsTruncated {
			inVer.VersionIdMarker = out.NextVersionIdMarker
			inVer.KeyMarker = out.NextKeyMarker
		} else {
			break
		}
	}

	fmt.Printf("Deleted object(s) from bucket: %s\n", bucketName)
	deleteBucketInput := &s3.DeleteBucketInput{
		Bucket: aws.String(bucketName),
	}
	_, err = timestreamDependencyHelper.S3Svc.DeleteBucket(context.TODO(), deleteBucketInput)

	if err != nil {
		fmt.Printf("Error: %s\n", err.Error())
	} else {
		fmt.Println("delete S3 Bucket is successful")
	}
	return err
}