从Lambda函数(AWS)的用户列表中获取UserId

时间:2019-02-16 13:28:14

标签: python list amazon-web-services amazon-ec2 aws-lambda

我正在尝试在AWS中编写一个Lambda函数,该函数针对每个现有用户运行一次。 它需要计算一个用户正在运行多少个实例(我已经有了一些东西,可以使用其创建者的UserId标记每个实例)。 因此,我试图编写一个过滤器,以获取用户的所有正在运行的实例,然后对其进行计数。 问题是:在获得所有用户的列表之后,以某种方式无法从用户获取UserId。 当前看起来像这样:

users = client.list_users()

for user in users:
    #here is where I dont know how to get the UserId i´ve tried things like:
    #userId=user.UserId or userId=user['UserId'] and other things but I just cant get it to work

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

    RunningInstances = [instance.id for instance in instances]

我希望有人能帮助我,我认为应该有一个非常简单的解决方案,但我却找不到它

编辑:我为此使用Boto3。 Boto3的client.list_users()返回一个dict,其中包含有用户列表以及其数据的dict,例如:

{
'Users': [
    {
        'Path': 'string',
        'UserName': 'string',
        'UserId': 'string',
        'Arn': 'string',
        'CreateDate': datetime(2015, 1, 1),
        'PasswordLastUsed': datetime(2015, 1, 1),
        'PermissionsBoundary': {
            'PermissionsBoundaryType': 'PermissionsBoundaryPolicy',
            'PermissionsBoundaryArn': 'string'
        },
        'Tags': [
            {
                'Key': 'string',
                'Value': 'string'
            },
        ]
    },
],
'IsTruncated': True|False,
'Marker': 'string'

}

1 个答案:

答案 0 :(得分:2)

我认为这里有几个错误,尽管我不确定在标记实例时要给出哪个key,但我会假设使用Owner标签。

users = client.list_users()

for user in users.get('Users', [{}]):
    instancefilters = [
        {
            'Name': 'instance-state-name',
            'Values': ['running']
            },
        {
            'Name': 'tag:Owner',
            'Values': [user.get('UserId')]
            }
    ]

    instances = ec2.instances.filter(Filters=instancefilters)

    RunningInstances = [instance.id for instance in instances]