// Creates a Spot instance request by using Price, imageId, instance and zone.
// Other input parameters can be configured by uncommenting the appropriate portion of the code
func (p *Parameters) RequestSpotInstances(svc *ec2.EC2, imageId string) (string, error) {
	paramsForReq := &ec2.RequestSpotInstancesInput{
		SpotPrice: aws.String(p.Price), // Required
		//		AvailabilityZoneGroup: aws.String(p.Zone),
		//		BlockDurationMinutes:  aws.Int64(1),
		//		ClientToken:           aws.String("String"),
		//		DryRun:                aws.Bool(true),
		//		InstanceCount:         aws.Int64(1),
		//		LaunchGroup:           aws.String("String"),
		LaunchSpecification: &ec2.RequestSpotLaunchSpecification{
			//			AddressingType: aws.String("String"),
			//			BlockDeviceMappings: []*ec2.BlockDeviceMapping{
			//				{// Required
			//					DeviceName: aws.String("String"),
			//					Ebs: &ec2.EbsBlockDevice{
			//						DeleteOnTermination: aws.Bool(true),
			//						Encrypted:           aws.Bool(true),
			//						Iops:                aws.Int64(1),
			//						SnapshotId:          aws.String("String"),
			//						VolumeSize:          aws.Int64(1),
			//						VolumeType:          aws.String("VolumeType"),
			//					},
			//					NoDevice:    aws.String("String"),
			//					VirtualName: aws.String("String"),
			//				},
			//				// More values...
			//			},
			//			EbsOptimized: aws.Bool(true),
			//			IamInstanceProfile: &ec2.IamInstanceProfileSpecification{
			//				Arn:  aws.String("String"),
			//				Name: aws.String("String"),
			//			},
			ImageId:      aws.String(imageId),
			InstanceType: aws.String(p.Instance),
			//			KernelId:     aws.String("String"),
			//			KeyName:      aws.String("String"),
			//			Monitoring: &ec2.RunInstancesMonitoringEnabled{
			//				Enabled: aws.Bool(true), // Required
			//			},
			//			NetworkInterfaces: []*ec2.InstanceNetworkInterfaceSpecification{
			//				{// Required
			//					AssociatePublicIpAddress: aws.Bool(true),
			//					DeleteOnTermination:      aws.Bool(true),
			//					Description:              aws.String("String"),
			//					DeviceIndex:              aws.Int64(1),
			//					Groups: []*string{
			//						aws.String("String"), // Required
			//						// More values...
			//					},
			//					NetworkInterfaceId: aws.String("String"),
			//					PrivateIpAddress:   aws.String("String"),
			//					PrivateIpAddresses: []*ec2.PrivateIpAddressSpecification{
			//						{// Required
			//							PrivateIpAddress: aws.String("String"), // Required
			//							Primary:          aws.Bool(true),
			//						},
			//						// More values...
			//					},
			//					SecondaryPrivateIpAddressCount: aws.Int64(1),
			//					SubnetId:                       aws.String("String"),
			//				},
			//				// More values...
			//			},
			Placement: &ec2.SpotPlacement{
				AvailabilityZone: aws.String(p.Zone),
				//				GroupName:        aws.String("String"),
			},
			//			RamdiskId: aws.String("String"),
			//			SecurityGroupIds: []*string{
			//				aws.String("String"), // Required
			//				// More values...
			//			},
			//			SecurityGroups: []*string{
			//				aws.String("String"), // Required
			//				// More values...
			//			},
			//			SubnetId: aws.String("String"),
			//			UserData: aws.String("String"),
		},
		//		Type:       aws.String(p.Instance),
		//		ValidFrom:  aws.Time(time.Now()),
		//		ValidUntil: aws.Time(time.Now()),
	}
	resp, err := svc.RequestSpotInstances(paramsForReq)

	if err != nil {
		return "", err
	}
	return fmt.Sprintln(resp), nil
}