Amazon Web Services - AWS PHP SDK 中的输出与 AWSCLI 中的输出不同


amazon web services - Different output in AWS PHP SDK than in AWSCLI

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

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

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文件:

<?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''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 密钥。

EC2::D escribeInstances 采用一组筛选器,每个筛选器都有一个字符串Name和一个字符串Values数组。在您的 CLI 示例中,您为Values提供了一些东西,而在 PHP 示例中,您提供了Value。SDK 无法识别此字段,将被忽略。有关更多信息,请参阅开发工具包 API 文档。

您的 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);