PHP和AWS-通过标记检索EC2实例
我试图通过PHP通过标记检索EC2实例。我可以创建带有标记的服务器,我可以检索带有标记数据的服务器,但是如果我想通过这些标记中的一个进行检索,我很难找到示例 这项工作:PHP和AWS-通过标记检索EC2实例,php,amazon-web-services,amazon-ec2,Php,Amazon Web Services,Amazon Ec2,我试图通过PHP通过标记检索EC2实例。我可以创建带有标记的服务器,我可以检索带有标记数据的服务器,但是如果我想通过这些标记中的一个进行检索,我很难找到示例 这项工作: if ($server_group != '') $filter[] = array('Name' => 'tag-value','Value' => $server_group); $response = $ec2->describe_instances(array('Filter' =&
if ($server_group != '')
$filter[] = array('Name' => 'tag-value','Value' => $server_group);
$response = $ec2->describe_instances(array('Filter' => $filter));
但是,问题是它会找到任何具有我分配给变量$server_组的值的标记,不管它是否是正确的标记。当然,我可以很小心地分配标记值,但这不是防弹的
文档中解释了替代语法:
示例:要仅列出已分配标记PURSE=X的资源,请指定:
Filter.1.Name=tag:Purpose
Filter.1.Value.1=X
然而,他们没有给出任何例子。我想应该是:
$filter[] = array('Filter.1.Name','Value' => 'tag:Group');
$filter[] = array('Name' => 'Filter.1.Value.1','Value' => $server_group);
然而,这似乎不起作用——我没有得到任何回报
有人这样做过吗?有一个他们可以分享的工作示例吗?我可能没有在Google中提出正确的问题-有很多关于如何创建标记的示例,但没有通过它们检索的示例。我们最近需要编写一个脚本来轻松关闭QA环境中的所有EC2实例。我们使用一个环境标签来表示开发、PRD或QA环境。下面是一段代码片段,演示如何通过API进行过滤:
<?php
$aws = \Aws\Common\Aws::factory(array(
'key' => $key,
'secret' => $secret,
'region' => $region
));
$ec2 = $aws->get('ec2');
$args = array(
'Filters' => array(
array('Name' => 'tag:Environment',
'Values' => array('QA')
)
)
);
$results = $ec2->describeInstances($args);
$reservations = $results['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'];
}
}
if ($instance['State']['Name'] == \Aws\Ec2\Enum\InstanceStateName::RUNNING){
$shutdownInstances['InstanceIds'][] = $instance['InstanceId'];
}
}
}
$results = $ec2->stopInstances($shutdownInstances);
$hipURL = "http://api.hipchat.com/v1/rooms/message?auth_token=$token&room_id=$roomId&from=$from&message=QA%20has%20been%20told%20to%20shutdown.";
$result = file_get_contents($hipURL);
获取整个列表并在本地进行筛选
'Filters' => array(
array('Name' => 'tag:Purpose',
'Values' => array('X')
)
)