PHP和AWS – 按标签检索EC2实例
发布时间:2020-12-13 17:14:42 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试通过标签通过 PHP检索EC2实例.我可以使用标签创建服务器,我可以使用标签数据检索服务器,但如果我想要做的是通过其中一个标签检索,我很难找到示例. 这有效: if ($server_group != '') $filter[] = array('Name' = 'tag-value','Value' = $server_g
我正在尝试通过标签通过
PHP检索EC2实例.我可以使用标签创建服务器,我可以使用标签数据检索服务器,但如果我想要做的是通过其中一个标签检索,我很难找到示例.
这有效: if ($server_group != '') $filter[] = array('Name' => 'tag-value','Value' => $server_group); $response = $ec2->describe_instances(array('Filter' => $filter)); 但是,问题是它会找到任何带有我赋给变量$server_group的值的标记,无论它是否是正确的标记.我当然可以简单地注意如何分配标签值,但这不是防弹. 文档中解释了替代语法: 示例:仅列出已分配标记的资源目的= 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实例.我们使用环境标记来表示DEV,PRD或QA环境.以下是一段代码片段,用于演示我们如何通过API进行过滤:
<?php $aws = AwsCommonAws::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'] == AwsEc2EnumInstanceStateName::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); 我们在cron工作中使用它来确保QA每晚关闭,因为没有人在一夜之间使用它,它为我们节省了几美元而没有运行它. 要重写您的过滤器以查找值为X的所有用途标记: 'Filters' => array( array('Name' => 'tag:Purpose','Values' => array('X') ) ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |