Неожиданные результаты с вложенными для операторов в коде Python - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть 2 аккаунта AWS. Я пишу код (с ролями между учетными записями) для отслеживания значений тегов EC2 (дата xx / xx / xx) для тега «расход». Это работало на одной учетной записи, но у меня возникли проблемы со структурой кода с несколькими учетными записями. У меня есть 3 тега в одной учетной записи (основной) и 2 в другой (дочерний), о которых следует сообщить.

import boto3
import collections
import datetime
import time
import sys

sns_client = boto3.client('sns')

from datetime import date as dt

aws_account_numbers = { "MassIT-Core":"xxxxxxxxxxxx", "MassIT-Engineering-Sandbox":"xxxxxxxxxxxx"}

def lambda_handler(event, context):
    roleArn = "arn:aws:iam::%s:role/CrossAccount-CostExplorer-Role" % account_num
     stsClient = boto3.client('sts')
     sts_response = stsClient.assume_role(RoleArn=roleArn,RoleSessionName='AssumeCrossAccountRole', DurationSeconds=1800)
     ec2 = boto3.client(service_name='ec2',region_name=region,aws_access_key_id = sts_response['Credentials']['AccessKeyId'],
                       aws_secret_access_key = sts_response['Credentials']['SecretAccessKey'], aws_session_token = sts_response['Credentials']['SessionToken'])

def lambda_handler(event, context):
    acctnum2 = (boto3.client('sts').get_caller_identity()['Account'])
    today = datetime.date.today()
    mdy = today_string = today.strftime('%m/%d/%y')
    ec2 = boto3.resource('ec2')
        for name, acctnum in aws_account_numbers.items():
            for instance in ec2.instances.all():
                if instance.tags is None:
                    continue
                for tag in instance.tags:
                    if tag['Key'] == 'expenddate':
                        expiredInstances=[]
                        if (tag['Value']) <= mdy:
                            sns_client.publish(
                                TopicArn = 'arn:aws:sns:us-east-1:xxxxxxxxxxxx:EOTSS-Monitor-Tag-Exceptions',
                                Subject = '!!!! Tag Exception has Expired.',
                                Message = str("The tag exception for instance %s has expired in account %s" % (instance.id,acctnum2)))
                        else:
                            print ("end")

В результате я получаю 6 электронных писем (sns) с 3 тегами, один раз для основной учетной записи и один раз для дочерней учетной записи. Эти 3 экземпляра EC2 не живут в дочернем аккаунте. Я новичок в Python. Я хочу получить 3 электронных письма от основной учетной записи и 2 электронных письма от дочерней учетной записи, которые будут представлять фактические теги, по которым прошло expdenddate.

...