func deleteObjects(bucket string, objs []Obj, wg *sync.WaitGroup, S3 *s3.S3) { maxLen := 1000 for i := 0; i < len(objs); i += maxLen { high := i + maxLen if high > len(objs) { high = len(objs) } objects := []*s3.ObjectIdentifier{} for _, obj := range objs[i:high] { objects = append(objects, &s3.ObjectIdentifier{Key: aws.String(obj.key), VersionId: aws.String(obj.id)}) } _, err := S3.DeleteObjects(&s3.DeleteObjectsInput{ Bucket: aws.String(bucket), Delete: &s3.Delete{ Objects: objects, }, }) if err != nil { fmt.Printf("Failed: %s\n", err) } wg.Add(-len(objects)) } return }
func s3Delete(svc *s3.S3, bucket string, keys []*s3.ObjectIdentifier) *s3.DeleteObjectsOutput { params := &s3.DeleteObjectsInput{ Bucket: aws.String(bucket), Delete: &s3.Delete{Objects: keys}, } result, err := svc.DeleteObjects(params) if err != nil { log.Printf("Error deleting from s3: %v", err) } return result }
// DeleteS3Objects deletes the objects specified by the given object keys func DeleteS3Objects(client *s3.S3, bucket string, objKeys []string) (*s3.DeleteObjectsOutput, error) { logger.Debug("DeleteS3Objects: ", bucket, "-", objKeys) s3Ids := make([]*s3.ObjectIdentifier, len(objKeys)) for i, key := range objKeys { s3Ids[i] = &s3.ObjectIdentifier{Key: aws.String(key)} } params := &s3.DeleteObjectsInput{ Bucket: aws.String(bucket), // Required Delete: &s3.Delete{ // Required Objects: s3Ids, Quiet: aws.Bool(true), }, // MFA: aws.String("MFA"), // RequestPayer: aws.String("RequestPayer"), } return client.DeleteObjects(params) }