如何获取带有 Amazon PHP SDK 2 的 EC2 实例列表?
2022-08-31 00:29:56
如何使用适用于 PHP 2 的 AWS 开发工具包获取与某些筛选条件匹配的 Amazon EC2 实例列表?
如何使用适用于 PHP 2 的 AWS 开发工具包获取与某些筛选条件匹配的 Amazon EC2 实例列表?
为此,请使用 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);
然后只需调用方法。DescribeInstances
$result = $ec2Client->DescribeInstances(array(
'Filters' => array(
array('Name' => 'instance-type', 'Values' => array('m1.small')),
)
));
您可以在 Amazon DescribeInstances API 方法页面上获取可用筛选器的列表。
但是等等,这里可能有什么困难呢?
Filters
Filter
Values
是的,这一切都在文档中进行了描述。但是,如果您查看一些旧的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;
}
}
维克多的回答很好,但它对我不起作用,因为我错过了一行:
$reservations=$result->toArray();
Amazon PHP SDK 2 为许多事情(包括 this)返回 Guzzle Model 对象,并且需要将它们转换为数组,foreach 才能正常工作。更多信息在这里:
http://guzzlephp.org/api/class-Guzzle.Service.Resource.Model.html