2017-07-07 13 views
0

私のpythonコードは以下の通りです。おかげインスタンスタグ情報boto3を使用しています:取得していないオブジェクト

import boto3 
    import yaml 

    def get_all_running_instances(unique_name): 
     """ 
     Returns instance data for given instance id. 
     :param unique_name: 
     :return: 
     """ 
     count = 1 
     rname = unique_name.rsplit('-', 1)[0] + '-' + str(count) 
     print rname 
     ec2 = boto3.resource('ec2') 
     instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running', 'pending']}]) 
     for instance in instances: 
      print(instance.id, instance.instance_type) 
     for instance in instances: 
      for tag in instance.tags: 
       if rname in tag['Value'] and "Name" in tag['Key']: 
        count = count + 1 
        rname = rname.rsplit('-', 1)[0] + '-' + str(count) 
     return count 
    x = get_all_running_instances('test-1') 
    print x 

出力は次のようであると、インスタンスのそれぞれに関連付けられたタグ情報を取得することができません。 私は、この関数の一部として返されたタグ情報に対してラムダを実行しています。

('i-08987804493yyyyyy82', 't2.medium') 
    ('i-0e96754xxxxxxxxx', 't2.small') 
    Traceback (most recent call last): 
     File "dummy.py", line 30, in <module> 
     x = get_all_running_instances('test-1') 
     File "dummy.py", line 23, in get_all_running_instances 
     for tag in instance.tags: 
    **TypeError**: 'NoneType' object is not iterable 
+0

ありがとうございましたHelloV。それがトリックでした。 – rashcuva

答えて

1

すべてのインスタンスに少なくとも1つのタグがあるとします。あなたのケースでは、コードが失敗する原因となるタグのないインスタンスがあります。代わりに、タグが存在するかどうかを確認してから、反復する前にtagsにチェックすることができます。

上記のコードでは、タグが定義されていないインスタンスは無視されます。必要に応じてコードを変更することができます。これを確認するには、instance-idinstance-typeを印刷するときにタグを印刷することもできます。

for instance in instances: 
    print(instance.id, instance.instance_type, instance.tags) 
関連する問題