2016-07-12 2 views
1

Основная цель, которую я пытаюсь достичь, - перебрать мои экземпляры EC2 в PHP.Различные выходные данные в AWS PHP SDK, чем в AWSCLI

Это очень легко получить данные с помощью Баш скрипт, как показано ниже:

Bash скрипт:

#!/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:

{ 
    "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": { 

      // ... 

     } 
    ] 
} 

Однако, когда я пытаюсь в следующем примере, используя те же ключи, мне представляется то, что кажется непригодным для объекта - или, по крайней мере, объект выглядит так, будто он представляет собой пустую структуру данных.

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 Вывод:

Какого черта я имел в виду, чтобы сделать с этим AWS \ Результат?

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) { 
     ... 
     } 
    } 
    } 
} 

Я что-то упустил в конфигурации PHP? Пожалуйста, может кто-нибудь помочь указать мне в правильном направлении?

P.S. Я замаскировал ключи API в приведенных выше примерах.

+2

Сначала удалите идентификатор ключа и ключ доступа от вопроса, если они используются, прежде чем кто-то берет их. – error2007s

+0

И какой результат вы ожидаете от кода PHP? – error2007s

+0

@ error2007s Я ожидаю увидеть по крайней мере _some_ данные о моих экземплярах, как и в примере с bash. Итерация '$ results' не дает мне ничего - первый элемент - пустой массив. Примеры показывают '$ results [" Reservations "]' для хранения данных экземпляра, но мой пуст. – Greg

ответ

0

EC2 :: DescribeInstances принимает массив фильтров, каждый из которых имеет строку Name и массив строки Values. В примере CLI вы предоставили что-то для Values, тогда как в вашем примере PHP вы поставили Value. Это поле не распознается SDK и будет проигнорировано. См. the SDK API docs для получения дополнительной информации.

Ваш PHP должен быть обновлен следующим образом:

<?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

Какова ценность '$ result'? Что произойдет, если вы перейдете? – Greg

+0

Кроме того, ваши советы неверны. Для 'values' требуется массив, для' value' требуется строка. Это объясняется в опубликованной вами ссылке. – Greg

Смежные вопросы