code: func (b *DynamoDBBackend) DeleteRange(ctx context.Context, startKey, endKey []byte) error {
  	if len(startKey) == 0 {
  		return trace.BadParameter("missing parameter startKey")
  	}
  	if len(endKey) == 0 {
  		return trace.BadParameter("missing parameter endKey")
  	}
  	// keep fetching and deleting until no records left,
  	// keep the very large limit, just in case if someone else
  	// keeps adding records
  	for i := 0; i < backend.DefaultLargeLimit/100; i++ {
  		result, err := b.getRecords(ctx, prependPrefix(startKey), prependPrefix(endKey), 100, nil)
  		if err != nil {
  			return trace.Wrap(err)
  		}
  		if len(result.records) == 0 {
  			return nil
  		}
  		requests := make([]*dynamodb.WriteRequest, 0, len(result.records))
  		for _, record := range result.records {
  			requests = append(requests, &dynamodb.WriteRequest{
  				DeleteRequest: &dynamodb.DeleteRequest{
  					Key: map[string]*dynamodb.AttributeValue{
  						hashKeyKey: {
  							S: aws.String(hashKey),
  						},
  						fullPathKey: {
  							S: aws.String(record.FullPath),
  						},
  					},
  				},
  			})
  		}
  		input := dynamodb.BatchWriteItemInput{
  			RequestItems: map[string][]*dynamodb.WriteRequest{
  				b.Tablename: requests,
  			},
  		}
  
  		if _, err = b.svc.BatchWriteItemWithContext(ctx, &input); err != nil {
  			return trace.Wrap(err)
  		}
  	}
  	return trace.ConnectionProblem(nil, "not all items deleted, too many requests")
  }
docs: // DeleteRange deletes range of items with keys between startKey and endKey