Проверьте, существует ли ec2 с помощью lambda boto3

#amazon-web-services #aws-lambda #boto3 #python-3.8

#amazon-веб-сервисы #aws-лямбда #boto3 #python-3.8

Вопрос:

У меня есть 1 идентификатор экземпляра списка из s3, и я хочу проверить каждый идентификатор экземпляра из s3 с идентификатором экземпляра из служб EC2 на наличие проверки ec2. Не могли бы вы помочь мне посоветовать какое-нибудь решение ? Спасибо

 def lambda_handler(event, context): #Get all ec2 information - The current list in AWS ins_inf = ec2_client.describe_instances() for reservation in ins_inf['Reservations']:  for ins_cur in reservation['Instances']:  #Get all instance ID from ec2  ins_cur_id = ins_cur["InstanceId"]  #Get instance ID list from s3  for ins_f_s3 in line_stream(s3_objload.get()['Body']):  #Remove /n  ins_f_s3_re=ins_f_s3.strip()  #Compare instance ID from s3 with current instance ID in aws  if ins_cur_id == ins_f_s3_re:  print (ins_f_s3_re   ' found')  else:  print(ins_f_s3_re   ' not found in aws ')  

И это результат

 i-0a959c122fd51581e not found in aws i-0a959c122fd51581f not found in aws  i-0a959c122fd51581e found i-0a959c122fd51581f not found in aws   

Возможно, вы можете увидеть «i-0a959c122fd51581e» , показывающее 2 сообщения при сравнении. Это не правильно. Может ли кто-нибудь помочь мне в этом деле ? Так много

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

1. Вы печатаете not found in aws каждый раз, когда текущая строка из файла не совпадает. Вы хотите напечатать это только в том случае, если оно не найдено ни в одной из строк. Я бы также рекомендовал загрузить файл в память и не извлекать его повторно из S3 для каждого экземпляра в списке резервирования.

2. Привет, Джорданм, Спасибо за твою идею. Теперь мой python уже хорошо работает. Спасибо

Ответ №1:

Предварительно прочитайте список интересующих вас экземпляров EC2 из S3 и сохраните их в списке. Затем просто проверьте каждый идентификатор экземпляра, возвращенный из вызова DescribeInstances, чтобы узнать, есть ли он в списке S3 (как и предлагает @jordanm в приведенном выше комментарии).

 s3_list = [x.strip() for x in line_stream(s3_objload.get()['Body'])]  ins_inf = ec2_client.describe_instances()  for reservation in ins_inf['Reservations']:  for ins_cur in reservation['Instances']:   # Get instance ID from ec2  ins_cur_id = ins_cur["InstanceId"]    if ins_cur_id in s3_list:  print(ins_cur_id   ' found')  else:  print(ins_cur_id   ' not found')  

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

1. Привет, Джармод, спасибо за твой совет. Теперь я могу это сделать. Так много