2012-12-17 10 views
4

PHP를 통해 태그별로 EC2 인스턴스를 검색하려고합니다. 태그를 사용하여 서버를 만들 수 있습니다. 태그 데이터가있는 서버를 검색 할 수 있지만 원하는 작업이 태그 중 하나를 검색하는 경우 예제를 찾는 데 어려움이 있습니다.PHP와 AWS - 태그로 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에서 정확한 질문을하지 않을 수도 있습니다. 태그를 만드는 방법에 대한 많은 예제가 있지만 태그를 검색하는 방법은 아닙니다.

+0

전체 목록을 얻고 로컬로 필터링 – Guy

답변

4

우리는 최근 품질 보증 환경에서 모든 EC2 인스턴스를 쉽게 종료 할 수있는 스크립트를 작성해야했습니다. DEV, 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); 

우리는 아무도 하룻밤을 사용하여 없기 때문에 QA는 매일 밤 종료를 얻을 수 있도록 cron 작업에서 이것을 사용하고 그것은 우리에게 몇 달러를 절약 할 수 실행하지 마십시오.

는 X의 값으로 모든 목적의 태그를 찾는 필터를 다시 작성하려면

'Filters' => array(
    array('Name' => 'tag:Purpose', 
     'Values' => array('X') 
) 
)