public async Task <Result> StartDataServer()
        {
            if (EC2Client == null || TaskConfigurationService == null)
            {
                return new Result()
                       {
                           ErrorCode = Constants.ErrorCodes.FAILURE
                       }
            }
            ;

            InstanceConfiguration instanceConfiguration = TaskConfigurationService.GetDataPreparationConfiguration();

            var runInstanceResponse = await Instances.LaunchInstance(EC2Client, instanceConfiguration);

            var instanceId = runInstanceResponse.Reservation.Instances[0].InstanceId;

            bool isInstanceRunning = false;
            DescribeInstanceStatusResponse describeInstanceStatusResponse;

            GetInstanceStatusRequestConfiguration instanceStatusReqConfig = new GetInstanceStatusRequestConfiguration()
            {
                InstanceIds = new List <string>()
                {
                    instanceId
                },
                IncludeAllInstances = true
            };

            // timeout?
            while (!isInstanceRunning)
            {
                describeInstanceStatusResponse = await Instances.GetInstanceStatus(EC2Client, instanceStatusReqConfig);

                var instance = describeInstanceStatusResponse.InstanceStatuses.Where(i => i.InstanceId == instanceId)
                               .FirstOrDefault();

                if (instance != null)
                {
                    switch (instance.InstanceState.Code)
                    {
                    case INSTANCE_STATE_CODE_PENDING:
                        continue;

                    case INSTANCE_STATE_CODE_RUNNING:
                        isInstanceRunning = true;
                        break;

                    default:
                        throw new System.Exception("Instance stopped.");
                    }
                }
                else
                {
                    throw new System.Exception("Instance not found.");
                }
            }

            return(new Result {
                ErrorCode = Constants.ErrorCodes.OK
            });
        }