2016-07-12 6 views
1

Das primäre Ziel, das ich erreichen möchte, besteht darin, über meine laufenden EC2-Instanzen in PHP zu iterieren.Unterschiedliche Ausgabe in AWS PHP SDK als in AWSCLI

Es ist wirklich einfach, die Daten mit einem Bash-Skript zu erhalten, wie unten dargestellt:

Bash-Skript:

#!/bin/bash 
export AWS_ACCESS_KEY_ID="AKIDEXAMPLE" 
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY" 
aws ec2 describe-instances --region="eu-west-1" --filter "Name=instance-state-name,Values=running" 

Bash Ausgang:

{ 
    "Reservations": [ 
     { 
      "OwnerId": "58728357357", 
      "ReservationId": "r-0e0283649826935", 
      "Instances": [ 
       { 
        "SecurityGroups": [ 
         { 
          "GroupId": "sg-2fe333148", 
          "GroupName": "WEB" 
         } 
        ], 
        "PublicDnsName": "ec2-53-13-121-72.eu-west-1.compute.amazonaws.com", 
        "Architecture": "x86_64", 
        "LaunchTime": "2016-07-11T08:28:23.000Z", 
        "RootDeviceName": "/dev/sda1", 
        "BlockDeviceMappings": [ 
         { 
          "Ebs": { 

      // ... 

     } 
    ] 
} 

aber wenn ich versuche, die Englisch: www.doc-o-matic.com/webhelp/Tdlg.html Im folgenden Beispiel wird mit denselben Schlüsseln ein scheinbar unbrauchbares Objekt dargestellt - oder zumindest sieht das Objekt so aus, als würde es eine leere Datenstruktur darstellen.

PHP File:

<?php 
require __DIR__ . "/vendor/autoload.php"; 

$settings = [ 
    "version" => "latest", 
    "region" => "eu-west-1", 
    "credentials" => [ 
     "key" => "AKIDEXAMPLE", 
     "secret" => "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY", 
    ], 
]; 

$client = new \Aws\Ec2\Ec2Client($settings); 
$result = $client->describeInstances([ 
    "Filters" => [ 
     [ 
      "Name" => "instance-state-name", 
      "Value" => "running", 
     ] 
    ], 
]); 

var_dump($result); 

PHP Output:

Was zum Teufel soll ich mit dieser AWS \ Ergebnis vorhatte?

class Aws\Result#82 (1) { 
    private $data => 
    array(2) { 
    'Reservations' => 
    array(0) { 
    } 
    '@metadata' => 
    array(4) { 
     'statusCode' => 
     int(200) 
     'effectiveUri' => 
     string(35) "https://ec2.eu-west-1.amazonaws.com" 
     'headers' => 
     array(5) { 
     ... 
     } 
     'transferStats' => 
     array(1) { 
     ... 
     } 
    } 
    } 
} 

Fehle ich etwas in der PHP-Konfiguration? Kann mir bitte jemand helfen, mich in die richtige Richtung zu lenken?

P.S. Ich habe die API-Schlüssel in den obigen Beispielen maskiert.

+2

zuerst die Schlüssel-ID und Zugangsschlüssel aus der Frage entfernen, wenn sie in Gebrauch sind, bevor jemand sie abholt. – error2007s

+0

Welche Ausgabe erwarten Sie auch von dem PHP-Code? – error2007s

+0

@ error2007s Ich erwarte mindestens _some_ Daten über meine Instanzen, wie ich es mit dem Bash-Beispiel mache. Iterating '$ results' gibt mir nichts - das erste Element ist ein leeres Array. Beispiele zeigen '$ results [" Reservations "]', um die Instanzdaten zu speichern, aber meins ist leer. – Greg

Antwort

0

EC2 :: DescribeInstances verwendet ein Array von Filtern, die jeweils eine Zeichenfolge Name und ein Array mit der Zeichenfolge Values enthalten. In Ihrem CLI-Beispiel haben Sie etwas für Values angegeben, während Sie in Ihrem PHP-Beispiel stattdessen Value angegeben haben. Dieses Feld wird vom SDK nicht erkannt und wird ignoriert. Weitere Informationen finden Sie unter the SDK API docs.

Ihre PHP sollen lesen aktualisiert werden:

<?php 
require __DIR__ . "/vendor/autoload.php"; 

$settings = [ 
    "version" => "latest", 
    "region" => "eu-west-1", 
    "credentials" => [ 
     "key" => "AKIDEXAMPLE", 
     "secret" => "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY", 
    ], 
]; 

$client = new \Aws\Ec2\Ec2Client($settings); 
$result = $client->describeInstances([ 
    "Filters" => [ 
     [ 
      "Name" => "instance-state-name", 
      "Values" => ["running"], 
     ] 
    ], 
]); 

var_dump($result); 
+0

Was ist der Wert von $ Ergebnis? Was passiert, wenn Sie iterieren? – Greg

+0

Auch Ihr Rat ist falsch. Für "Werte" wird ein Array benötigt, für "Wert" ist ein String erforderlich. Dies wird in dem von Ihnen geposteten Link erläutert. – Greg