【问题标题】:Get UserId from a list of Users for a Lambda Function (AWS)从 Lambda 函数 (AWS) 的用户列表中获取 UserId
【发布时间】:2019-07-10 10:28:33
【问题描述】:

我正在尝试在 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() 返回一个字典,其中包含用户列表及其数据字典,如下所示:

{
'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'

}

【问题讨论】:

  • 你在说什么用户?你的应用程序? IAM 用户? client.list_users() 是什么?如果没有更多的上下文,很难回答你的问题。请阅读stackoverflow.com/help/mcve 以帮助重新表述您的问题。

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


【解决方案1】:

我认为这里有几个错误,虽然我不确定您在标记实例时给出的是哪个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]

【讨论】:

  • 这给了我错误:'Values': [user.get('UserId')] TypeError: unhashable type: 'dict' 对不起,我还是有点困惑嵌套的字典/列表
  • 对我来说很好,你是复制了这段代码还是修改了你的,因为你原来的 instancefilters 不是有效的 python
  • 哦,是的,我修改了我的,一开始并没有注意到有问题的括号,谢谢!
猜你喜欢
  • 2020-03-21
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 2018-07-17
  • 1970-01-01
  • 2019-10-21
  • 1970-01-01
  • 2020-02-13
相关资源
最近更新 更多