如何使用Amazon PHP SDK 2获取EC2实例列表?

Vic*_*nov 14 php amazon-ec2

如何使用AWS SDK for PHP 2获取与某些过滤器匹配的Amazon EC2实例列表?

Vic*_*nov 31

使用DescribeInstances方法.让我们用更多细节来介绍这个问题.

您需要先获取Ec2Client实例.初始化客户端的最简单方法:

$config = array();
$config['key'] = 'key';
$config['secret'] = 'secret';
$config['region'] = 'us-east-1';
$config['version'] = 'latest'; // Or Specified
$ec2Client = \Aws\Ec2\Ec2Client::factory($config);
Run Code Online (Sandbox Code Playgroud)

然后只需调用DescribeInstances方法.

$result = $ec2Client->DescribeInstances(array(
        'Filters' => array(
                array('Name' => 'instance-type', 'Values' => array('m1.small')),
        )
));
Run Code Online (Sandbox Code Playgroud)

您可以在Amazon DescribeInstances API方法页面上获取可用过滤器列表.

但等等,这里可能有什么困难?

  • 请注意参数名称Filters.在API中它被调用Filter
  • Values调用的参数与API不同,它是一个数组

是的,这都在文档中描述.但是,如果你看一些旧的API使用示例,你会发现语法已经改变了,这可能很难注意到那个例子中需要更新的东西才能使事情有效.

为了完成示例,让我展示一些简单的结果输出.

$reservations = $result['Reservations'];
foreach ($reservations as $reservation) {
    $instances = $reservation['Instances'];
    foreach ($instances as $instance) {

        $instanceName = '';
        foreach ($instance['Tags'] as $tag) {
            if ($tag['Key'] == 'Name') {
                $instanceName = $tag['Value'];
            }
        }


        echo 'Instance Name: ' . $instanceName . PHP_EOL;
        echo '---> State: ' . $instance['State']['Name'] . PHP_EOL;
        echo '---> Instance ID: ' . $instance['InstanceId'] . PHP_EOL;
        echo '---> Image ID: ' . $instance['ImageId'] . PHP_EOL;
        echo '---> Private Dns Name: ' . $instance['PrivateDnsName'] . PHP_EOL;
        echo '---> Instance Type: ' . $instance['InstanceType'] . PHP_EOL;
        echo '---> Security Group: ' . $instance['SecurityGroups'][0]['GroupName'] . PHP_EOL;
    }

}
Run Code Online (Sandbox Code Playgroud)