2017-11-12 5 views
1

インスタンスをIAMロールでフィルタリングする方法はありますか? 基本的には、私が起動したすべてのインスタンスを終了するスクリプトが必要ですが、他のIAMロールで起動されたインスタンスには触れません。boto3のインスタンスをIAMロールでフィルタリングしますか?

+1

あなたが代わりにそれらをタグ付けして、それを使用する必要があります。 IAMの役割がこのように使用されることは想定されていない可能性があります。また、誰か(またはあなたが誤って)何らかの似たような目的でIAMの役割を使用しようとすると、誤ってインスタンスを終了したときに、予期せぬことをやった。タグは、この方法で使用するためのものです。 – bryan60

+1

インスタンスプロファイルのフィルタリングは理想的ではありませんが、ここではawscliでこれを行う方法を説明します(また、boto3と同等の機能を実現する方法もあります):aws ec2 describe-instances --query "Reservations []。Instances []。 {id:InstanceId、role:IamInstanceProfile.Arn} " – jarmod

答えて

2

方法1:

それだけで1回限りの活動であるならば、あなたはAWS-CLI自体の使用を検討することができます。

特定のIAMロールを持つすべてのインスタンスを一覧表示するには、以下のaws-cliコマンドを使用します。

aws ec2 describe-instances --region us-east-1 --query 'Reservations[*].Instances[?IamInstanceProfile.Arn==`<Enter you Instance Profile ARN here>`].{InstanceId: InstanceId}' --output text 

インスタンス・プロファイルアーン<Enter you Instance Profile ARN here>を交換してください。

注: あなたは、NOTRole ARNInstance Profile Arnを入力する必要があります。あなたは、その後のリストを渡すことができます/プロフィール-ASDNSDLKJ

インスタンスプロファイル:

ARN:AWS:IAM :: XXXXXXXXXXXXアーンプロフィール

インスタンスは次の形式になりますは、上記のcliコマンドのterminate-instanceに返されます。 instance-idsは、スペースで区切る必要があります。

aws ec2 terminate-instances --instance-ids i-1234567890abcdef0 i-1234567890jkefpq1

方法2:

import boto3 

client = boto3.client('ec2',region_name='us-east-1') 
response = client.describe_instances(
    Filters=[ 
     { 
      'Name': 'iam-instance-profile.arn', 
      'Values': [ 
       'arn:aws:iam::1234567890:instance-profile/MyProfile-ASDNSDLKJ', 
      ] 
     }, 
    ] 
) 
terminate_instance_list = [] 
for resp in response['Reservations']: 
    for inst in resp['Instances']: 
    #print inst['InstanceId'] 
    terminate_instance_list.append(inst['InstanceId']) 


#print(terminate_instance_list) 
if terminate_instance_list: 
    response = client.terminate_instances(
     InstanceIds=terminate_instance_list 
    ) 
    print(response) 
関連する問題