code: func (s *Scheduler) createStack(ctx context.Context, input *createStackInput, output chan stackOperationOutput, ss twelvefactor.StatusStream) error {
  	waiter := s.waitFor(ctx, createStack, ss)
  
  	submitted := make(chan error)
  	fn := func() error {
  		_, err := s.cloudformation.CreateStack(&cloudformation.CreateStackInput{
  			StackName:   input.StackName,
  			TemplateURL: input.Template.URL,
  			Tags:        input.Tags,
  			Parameters:  input.Parameters,
  		})
  		submitted <- err
  		return err
  	}
  	go func() {
  		stack, err := s.performStackOperation(ctx, *input.StackName, fn, waiter, ss)
  		output <- stackOperationOutput{stack, err}
  	}()
  
  	return <-submitted
  }
docs: // createStack creates a new CloudFormation stack with the given input. This
  // function returns as soon as the stack creation has been submitted. It does
  // not wait for the stack creation to complete.