AWS PHP SDK中的输出与AWSCLI中的输出不同

时间:2016-07-12 11:24:28

标签: php amazon-web-services amazon-ec2 aws-cli aws-php-sdk

我试图实现的主要目标是在PHP中迭代运行的EC2实例。

使用bash脚本获取数据非常容易,如下所示:

Bash脚本:

    graph1 = new links.Graph(document.getElementById('adasLineChart1'));
    graph1.draw(data1, options1);


    links.events.addListener(graph1, "selectItem", function(event) {

    });

Bash输出:

function counter(){

//trigger graph event similar to mouse on click event.
}

但是,当我尝试以下示例时,使用相同的键,我会看到似乎是一个不可用的对象 - 或者至少该对象看起来像是一个空的数据结构。

PHP文件:

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

PHP输出:

我对这个AWS \ Result有什么意义呢?

{
    "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配置中的内容吗?请有人帮我指点正确的方向吗?

P.S。我在上面的示例中屏蔽了API密钥。

1 个答案:

答案 0 :(得分: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);