2016-05-02 15 views
0

Ich versuche, Spot-Instanzen mit einer Anfrage zu starten, die nur von einem bestimmten Datum und einer bestimmten Uhrzeit bis zu einem bestimmten Datum und einer bestimmten Uhrzeit gültig ist. Folgendes ist meine Konfiguration.InvalidTime-Fehler beim Starten von Spot-Inszenierungen

$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; 
    } 

Wenn ich die Konfiguration drucke, bekomme ich Folgendes;

"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" 
    } 

Jetzt versuche ich, die Spot-Instanz zu starten, und ich bekomme den folgenden Fehler.

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

Die Zeit auf der Fehlermeldung ist anders. Also setze ich die korrekte Imezone nach this.

Das Ausführen des Befehls date gibt die richtige Zeit (wie in der Anfrage). Ich bin mir nicht sicher, warum die Fehlermeldung eine andere Zeit anzeigt.

Detaillierte Fehlermeldung

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

Es sieht aus wie ist Ihr Datetime immer Zeichenfolge in W3C-Format, wenn es in ISO8601 'YYYY-MM-DDTHH sein sollte (implicltly?): MM: SSZ'. Welche Sprache ist das und wie wird die Anfrage tatsächlich gesendet? Ein SDK? Durch aws-cli? –

+0

Ich benutze die AWS PHP [SDK] (https://docs.aws.amazon.com/aws-sdk-php/v3/api/) Version 3.0 – user3288346

+0

Ich versuchte mit '$ request_valid_from-> -Format (DateTime :: ISO8601) 'und' $ request_valid_from-> Format ("c") '. Es hat immer noch nicht funktioniert. – user3288346

Antwort

0

Es dauerte einige Zeit, um den Code auszuführen, so dass ich verzögert die request_valid_from leicht (um 2 Sekunden) und es funktionierte.

$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);