Amazon web services 列出笔记本实例标签可能需要很长时间

Amazon web services 列出笔记本实例标签可能需要很长时间,amazon-web-services,aws-lambda,boto3,amazon-sagemaker,Amazon Web Services,Aws Lambda,Boto3,Amazon Sagemaker,我目前正在使用Lambda函数中的boto3 SDK,以检索有关部署在我帐户中的Sagemaker笔记本实例的各种信息(大约70个,所以不太多…) 我尝试执行的操作之一是列出每个实例的标记。 但是,有时返回标记需要花费很长时间:我的Lambda要么停止(我可以增加超时,但仍然…),要么从sagemaker.list_tags函数引发节流异常(这可以通过增加sagemaker bot3客户端创建时的重试次数来避免): 如果你们有什么办法避免这样的延误:) TY正如您所注意到的,您正在受到限制。您可

我目前正在使用Lambda函数中的boto3 SDK,以检索有关部署在我帐户中的Sagemaker笔记本实例的各种信息(大约70个,所以不太多…)

我尝试执行的操作之一是列出每个实例的标记。

但是,有时返回标记需要花费很长时间:我的Lambda要么停止(我可以增加超时,但仍然…),要么从sagemaker.list_tags函数引发节流异常(这可以通过增加sagemaker bot3客户端创建时的重试次数来避免):

如果你们有什么办法避免这样的延误:)


TY

正如您所注意到的,您正在受到限制。您可以尝试更改延迟(即增加增长因子),而不是增加重试次数。看起来是可配置的

请注意,存储桶(和重新填充速率)通常处于第二粒度。因此,使用70个ARN,您将看到一定的秒数;两位数并不让我感到惊讶

您可能会考虑以不同方式中断工作,因为添加重试/较大的增长因子只会增加函数运行的时间长度。

我已经非常成功地将事情分解,这样Lambda函数每次调用只处理一个ARN。Lambda正在处理工作(我通常会使用SQS队列来管理需要处理的内容),并且可以通过组合配置Lambda和SQS消息可见性来配置工作速率

我不知道除了最初的Lambda之外,你还想完成什么。我意识到,以这种方式分解工作可能(或将)给你的总体工作带来挑战

还值得注意的是,如果启用了CloudTrail,则标记将是“EventName”(与调用的方法相匹配,即CreateTrainingJob、AddTags等)的事件数据(请求数据)的一部分

第三种选择是,如果您试图查找具有特定标记的所有笔记本实例,则可以使用资源组创建查询,并快速查找具有这些标记的ARN

  • CloudTrail:
  • 资源组:
  • 带有SQS的Lambda:

  • 你认为“年龄”是什么?10秒?5分钟?你好@jarmod,我说的“年龄”是指10秒,有时是20秒;)非常感谢Ken Amazon,我会看看你的各种建议
    sagemaker = boto3.client("sagemaker", config=Config(retries = dict(max_attempts = 10)))
    instances_dict = sagemaker.list_notebook_instances()
    
    if not instances_dict['NotebookInstances']:
        return "No Notebook Instances"
    
    while instances_dict:
        for instance in instances_dict['NotebookInstances']:
            print instance['NotebookInstanceArn']
            start = time.time()
            tags_notebook_instance = sagemaker.list_tags(ResourceArn=instance['NotebookInstanceArn'])['Tags']
            print (time.time() - start)
        instances_dict = sagemaker.list_notebook_instances(NextToken=instances_dict['NextToken']) if 'NextToken' in instances_dict else None