2016-05-02 40 views
0

我试图启动一个请求有效的现货实例,只能从特定日期和时间到某个日期和时间。以下是我的配置。启动Spot Insities时出现无效时间错误

$request_valid_from = new DateTime(); 
$request_valid_until = add_time_interval((clone $request_valid_from), 5); 

$config = [ 
       'BlockDurationMinutes' => 60, 
       'InstanceCount' => 1, 
       'SpotPrice' => strval($this->get_average_spot_price('c3.large)), 
       'Type' => 'one-time', 

       'LaunchSpecification' => [ 
         'EbsOptimized' => false, 
         'InstanceType' => 'c3.large', 
         'ImageId' => AMI_ID, 
        ], 
       'ValidFrom' => $request_valid_from, 
       'ValidUntil' => $request_valid_until, 
      ]; 

echo($config) 

function add_time_interval($current_time, $interval){ 
     $current_time->modify('+' .strval($interval) . ' seconds'); 
     return $current_time; 
    } 

当我打印配置时,我得到以下;

"BlockDurationMinutes": 60, 
    "InstanceCount": 1, 
    "SpotPrice": "0.04592", 
    "Type": "one-time", 
    "LaunchSpecification": { 
     "EbsOptimized": false, 
     "InstanceType": "c3.large", 
     "ImageId": "ami-b23c22dc" 
    }, 
    "ValidFrom": { 
     "date": "2016-05-02 13:11:18.000000", 
     "timezone_type": 3, 
     "timezone": "Asia\/Tokyo" 
    }, 
    "ValidUntil": { 
     "date": "2016-05-02 13:11:23.000000", 
     "timezone_type": 3, 
     "timezone": "Asia\/Tokyo" 
    } 

现在,我尝试启动现场实例,并收到以下错误消息。

InvalidTime (client): "Mon May 02 04:28:11 UTC 2016" is an invalid time 

错误消息的时间是不同的。所以,我按照this设置了正确的imezone。

运行命令date会给出正确的时间(如请求中所示)。我不知道为什么错误信息显示不同的时间。

详细的错误消息

06-May-2016 13:40:20 Asia/Tokyo] PHP Fatal error: Uncaught exception 'Aws\Ec2\Exception\Ec2Exception' with message 'Error executing "RequestSpotInstances" on "https://ec2.ap-northeast-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://ec2.ap-northeast-1.amazonaws.com` resulted in a `400 Bad Request` response: 
<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>InvalidTime</Code><Message>"Fri May 06 04:40:19 UT (truncated...) 
InvalidTime (client): "Fri May 06 04:40:19 UTC 2016" is an invalid time - <?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>InvalidTime</Code><Message>"Fri May 06 04:40:19 UTC 2016" is an invalid time</Message></Error></Errors><RequestID>efd4458f-e05a-4cb7-8332-4be2dca8c486</RequestID></Response>' 

exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: `POST https://ec2.ap-northeast-1.amazonaws.com` resulted in a `400 Bad Request` response: 
<?xml version="1.0" encoding="UTF-8"?> 
<Response><Errors><Error><Code>InvalidTime</Code><Message>"Fri May 06 04:40:19 UT (trunca in /projects/mv2/millvi-auto-scaling/ec2-manager/vendor/aws/aws-sdk-php/src/WrappedHttpHandler.php on line 192 
+0

它看起来像你的日期时间越来越字符串化到W3C格式,当它应该是在ISO8601'YYYY-MM-DDTHH(implicltly?):MM:SSZ'。这是什么语言,请求如何发送?一个sdk?通过aws-cli? –

+0

我使用AWS PHP [SDK](https://docs.aws.amazon.com/aws-sdk-php/v3/api/)版本3.0 – user3288346

+0

我尝试使用'$ request_valid_from-> format(DateTime :: ISO8601)和'$ request_valid_from->格式(“c”)'。它仍然没有工作。 – user3288346

回答

0

它采取了一些时间代码来执行,所以推迟了request_valid_from略微(按2秒)和它的工作。

$request_valid_from = new DateTime(); 

//Delay the request slightly (2 seconds) 
$request_valid_from = add_time_interval((clone $request_valid_from), 2); 

$request_valid_until = add_time_interval((clone $request_valid_from), 10);