Цикл Python3 for выполняется только один раз - PullRequest
0 голосов
/ 15 мая 2018

У меня есть скрипт, использующий пользовательскую библиотеку (nwmaws), которая перебирает все мои учетные записи AWS и создает динамический ARN, который я использую, чтобы взять на себя роль администратора для печати всех EC2 идентификаторы экземпляров во всех указанных учетных записях. Тем не менее, мой for loop по какой-то причине выполняет итерацию только по одной учетной записи (у меня есть как минимум 20 учетных записей или около того) Ниже мой код и вывод:

CODE:

import boto3 
import nwmaws

accounts = nwmaws.Accounts().list()

def get_sts_token(**kwargs):
    role_arn = kwargs['RoleArn']
    region_name = kwargs['RegionName']
    sts = boto3.client(
        'sts',
        region_name=region_name,
    )
    token = sts.assume_role(
        RoleArn=role_arn,
        RoleSessionName='GetInstances',
        DurationSeconds=900,
    )
    return token["Credentials"]

def create_role_arn():
    for i in accounts:
        account_list = i.account_id
        role_arn = "arn:aws:iam::{}:role/ADFS- 
        GlobalAdmins".format(account_list)
        tokens = get_sts_token(RoleArn=role_arn, RegionName="us-east-1")
        print(role_arn)
        access_key = tokens['AccessKeyId']
        secret_key = tokens['SecretAccessKey']
        session_token = tokens['SessionToken']

        s = boto3.session.Session(aws_access_key_id=access_key,
            aws_secret_access_key=secret_key,
            aws_session_token=session_token
            )
        return s.resource('ec2')

def get_all_instances():
    ec2 = create_role_arn()

    instances = ec2.instances.filter(
        Filters=[{'Name': 'instance-state-name', 'Values': ['running']}])

    for instance in instances:
        print(instance.id)

get_all_instances()

OUTPUT:

arn:aws:iam::XXXXXXXXXXXX:role/ADFS-GlobalAdmins
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
i-xxxxxxxx
etc etc 

Как видите, он только создает один ARN, печатает экземпляры в этой учетной записи и затем завершает работу.

...