объект ec2.Instance’ не является итеративным

#python #amazon-ec2 #aws-lambda #boto3

#python #amazon-ec2 #aws-lambda #boto3

Вопрос:

Я пытаюсь скопировать указанные теги ec2 в их соответствующие тома. функция вызывается, когда состояние экземпляра изменяется на «запущенное». Однако я не хочу, чтобы код выполнялся в каждом экземпляре — для первой версии кода, когда он вызывался в моем единственном экземпляре, он выполнялся во всех экземплярах. даже те, которые уже были помечены. Я хочу, чтобы он запускался только для конкретных экземпляров, которые загружаются.

с некоторыми изменениями я получаю ошибку: объект ec2.Instance’ не поддается повторению я действительно новичок в python и не уверен, как поступить. Есть какие-либо предложения от вас, светлые умы?

—-ВОТ МОЙ ЛЯМБДА-КОД—-

 import boto3
import json

def lambda_handler(event, context):
    # is_test = context.function_name == 'test'  # this value is injected by SAM local
    
    instance = boto3.resource('ec2').Instance(id=event["detail"]["instance-id"])
   
    
    tags_to_use = ['Stack-Name', 'StackID']

    for instance in instance:
        tags = instance.tags
        to_tag = [t for t in tags if t['Key'] in tags_to_use]
        for vol in instance.volumes.all():
            print(f"Tagging volume {vol.id} from instance {instance.id}")
            vol.create_tags(Tags=to_tag)
  

Комментарии:

1. Вы получаете единственный экземпляр в первой строке обработчика, а затем пытаетесь выполнить for instance in instance — почему? Неважно, что Instance объект не является итеративным, эта строка не имеет смысла, даже если бы это было так.

2. Перевод: Просто удалите эту строку!

3. Спасибо за ваши комментарии. как я уже сказал, я учусь и действительно ценю ваш вклад. Я удалил эту строку и получил это: { «ErrorMessage»: «объект ‘NoneType’ не имеет атрибута ‘get'», «ErrorType»: «AttributeError», «stackTrace»: [ » File «/var/task/lambda_function.py «, строка 8, в lambda_handlern напечатать(instance.tags)n», «Файл «/var/runtime/boto3/resources/factory.py «, строка 345, в property_loadern возвращает self.meta.data.get(name)n» ] }