code: func (c *Cloud) CreateSnapshot(snapshotOptions *SnapshotOptions) (snapshotID string, status string, err error) {
  	request := &ec2.CreateSnapshotInput{}
  	request.VolumeId = aws.String(snapshotOptions.VolumeID)
  	request.DryRun = aws.Bool(false)
  	descriptions := "Created by Kubernetes for volume " + snapshotOptions.VolumeID
  	request.Description = aws.String(descriptions)
  	res, err := c.ec2.CreateSnapshot(request)
  	if err != nil {
  		return "", "", err
  	}
  	if res == nil {
  		return "", "", fmt.Errorf("nil CreateSnapshotResponse")
  	}
  	if snapshotOptions.Tags != nil {
  		awsID := awsVolumeID(aws.StringValue(res.SnapshotId))
  		// apply tags
  		if err := c.tagging.createTags(c.ec2, string(awsID), ResourceLifecycleOwned, *snapshotOptions.Tags); err != nil {
  			_, delerr := c.DeleteSnapshot(*res.SnapshotId)
  			if delerr != nil {
  				return "", "", fmt.Errorf("error tagging snapshot %s, could not delete the snapshot: %v", *res.SnapshotId, delerr)
  			}
  			return "", "", fmt.Errorf("error tagging snapshot %s: %v", *res.SnapshotId, err)
  		}
  	}
  	return *res.SnapshotId, *res.State, nil
  
  }
docs: // CreateSnapshot creates an EBS volume snapshot