code: func (c *Cloud) DescribeSnapshot(snapshotID string) (status string, isCompleted bool, err error) {
  	request := &ec2.DescribeSnapshotsInput{
  		SnapshotIds: []*string{
  			aws.String(snapshotID),
  		},
  	}
  	result, err := c.ec2.DescribeSnapshots(request)
  	if err != nil {
  		return "", false, err
  	}
  	if len(result) != 1 {
  		return "", false, fmt.Errorf("wrong result from DescribeSnapshots: %#v", result)
  	}
  	if result[0].State == nil {
  		return "", false, fmt.Errorf("missing state from DescribeSnapshots: %#v", result)
  	}
  	if *result[0].State == ec2.SnapshotStateCompleted {
  		return *result[0].State, true, nil
  	}
  	if *result[0].State == ec2.SnapshotStateError {
  		return *result[0].State, false, fmt.Errorf("snapshot state is error: %s", *result[0].StateMessage)
  	}
  	if *result[0].State == ec2.SnapshotStatePending {
  		return *result[0].State, false, nil
  	}
  	return *result[0].State, false, fmt.Errorf("unknown state")
  }
docs: // DescribeSnapshot returns the status of the snapshot