веб-сервисы Amazon — другой вывод в AWS PHP SDK, чем в AWSCLI

Основная цель, которую я пытаюсь достичь, — это перебирать мои запущенные экземпляры EC2 в PHP.

Получить данные с помощью 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"
{
"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
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);

Какого черта я собираюсь сделать с этим AWS \ Result?

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? Пожалуйста, может кто-нибудь помочь направить меня в правильном направлении?

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

1

Решение

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

Ваш 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]