code: func NewHandler(cfg Config) (*Handler, error) {
  	if err := cfg.CheckAndSetDefaults(); err != nil {
  		return nil, trace.Wrap(err)
  	}
  
  	h := &Handler{
  		Entry: log.WithFields(log.Fields{
  			trace.Component: teleport.Component(teleport.SchemeS3),
  		}),
  		Config:     cfg,
  		uploader:   s3manager.NewUploader(cfg.Session),
  		downloader: s3manager.NewDownloader(cfg.Session),
  		client:     s3.New(cfg.Session),
  	}
  	start := time.Now()
  	h.Infof("Setting up bucket %q, sessions path %q in region %q.", h.Bucket, h.Path, h.Region)
  	if err := h.ensureBucket(); err != nil {
  		return nil, trace.Wrap(err)
  	}
  	h.WithFields(log.Fields{"duration": time.Now().Sub(start)}).Infof("Setup bucket %q completed.", h.Bucket)
  	return h, nil
  }
docs: // NewHandler returns new S3 uploader