AWS Boto 3 - невозможно создать тег, идентификатор экземпляра не найден - другой регион - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь установить тег для экземпляров в нескольких регионах, используя функцию Lambda:

print instance_ids дает мне правильный идентификатор

['i-008a4292a5928c85f']

['i-008a4292a5928c85f', 'i-03253cdbe35bfb1e2']

  instance_ids = []
    launch_date = ""
    launched = ""
    launched1 = ""
    ec = boto3.client('ec2')
    ec2_regions = [region['RegionName'] for region in ec.describe_regions()['Regions']]
    for region in ec2_regions:
     ec = boto3.client('ec2', region_name=region)
     ec2 = boto3.resource('ec2',region_name=region)
     reservations = ec.describe_instances().get('Reservations', []) 

     for reservation in reservations:
      for instance in reservation['Instances']:
         tags = {}
         for tag in instance['Tags']:
             tags[tag['Key']] = tag['Value']
             if tag['Key'] == 'Name':
               name=tag['Value']
         if not 'Owner' in tags or tags['Owner']=='unknown' or tags['Owner']=='Unknown':
              instance_ids.append(instance['InstanceId'])  
              if not 'TerminateOn' in tags:#, create it
                 print  instance_ids
                 ec2.create_tags(Resources=instance_ids ,Tags=[{'Key':'TerminateOn','Value':date_after_month.strftime('%d/%m/%Y')}])

['i-008a4292a5928c85f'] находится в другом регионе, и лямбда-тег создает для него:

i-03253bbb35в том же регионе, что и лямбда, и тег для этой машины не создается, хотя лямбда жалуется, что не может найти экземпляр, для которого создан тег

ClientError: An error occurred (InvalidInstanceID.NotFound) when calling the CreateTags operation: The instance ID 'i-008a4292a5928c85f' does not exist

Если указать идентификатор экземпляра вручную, проблем не возникает

так создано, чтобы поместить instance_id вместо списка:

if not 'TerminateOn' in tags:
                  a = "'" + instance['InstanceId'] + "'"
                  #print a
                  ec2.create_tags(Resources=[a] ,Tags=[{'Key':'TerminateOn','Value':date_after_month.strftime('%d/%m/%Y')}])

but getting The ID ''i-008a4292a5928c85f'' is not valid"

1 Ответ

0 голосов
/ 04 февраля 2019

Работает таким образом (не знаю, почему он не будет принимать список в качестве параметра), указав переменную с идентификатором экземпляра

if not 'Owner' in tags or tags['Owner']=='unknown' or tags['Owner']=='Unknown':
              #ec2 = boto3.resource('ec2',region_name=region)
              instance_ids.append(instance['InstanceId'])  
              if not 'TerminateOn' in tags:

                  ec2.create_tags(Resources=[instance['InstanceId']] ,Tags=[{'Key':'TerminateOn','Value':date_after_month.strftime('%d/%m/%Y')}])
...