AWS Systems Manager“进行中”命令限制为5个?

时间:2019-08-29 10:05:45

标签: python amazon-web-services amazon-systems-manager

因此,首先,我到处寻找有关我所面临问题的现有主题,但是我什么都没找到。我也将其发布在AWS forums上,但没有任何答案。如果已经有一个现有的线程在此,我深表歉意。此外,对于即将到来的较长篇幅,我将深表歉意。

现在,我正在尝试使用 AWS-RunShellScript文档运行同一应用程序的多个(阻止)进程。问题是,使用该方法启动的进程最多只能有 5 个进程。如果我通过SSH甚至手动启动它们,那么我可以启动数十个而没有任何问题。

我正在使用的实例是 Ubuntu 。我正在使用 Python 3.7.4 进行AWS资源操作,但是在使用 AWS Console 时也会发生同样的情况。

每个命令通常会阻塞终端(例如,如果您要手动执行操作,则阻止您在终端的该实例中发布其他命令)-依次设置其状态,如AWS SSM-进行中所示。从本质上讲,从AWS SSM角度来看,该命令是不完整的,直到该过程被终止或停止(更多内容在下文中)。

问题是我可以通过SSM最多运行 4 个进程,并且仍然可以使用SSM(杀死,检查等)来操纵它们-意味着最多 4 < / strong>命令进行中。但是,当我启动第5个命令时,尽管它们都可以继续工作,但我再也无法使用SSM了,没有其他命令被执行(无论是新进程还是任何其他命令)

最简单的方法是通过 AWS-RunShellScript 文档发送 5 个简单的 sleep 60 命令,然后尝试任何新命令-您会在SSM中注意到它们会弹出为进行中,但如果拖尾 amazon-ssm-agent.log 文件,则实际上不会执行任何新命令。更奇怪的是,您会注意到在此代码段之后日志停止了:

2019-08-13 08:25:12 INFO [MessagingDeliveryService] SendReply Response{
  Description: "Reply e82b5dcb-0e81-4698-8f6e-fe1411f18300 was successfully sent.",
  MessageId: "aws.ssm.1af47ba7-0d28-41ac-83dd-3bffbaa7db2d.i-08d3f4176a025a07b",
  ReplyId: "e82b5dcb-0e81-4698-8f6e-fe1411f18300",
  ReplyStatus: "QUEUED"

此后将不再处理其他命令,也不会记录其他信息。但是,以我们的示例为例,当 sleep 结束时,只要打开另一个插槽,就会立即执行 QUEUED 命令(假设您只能将 5 ”命令,但没有提及)。

注意:正如我提到的 AWS-RunShellScript 文档一样, AWS-RunRemoteScript 文档也发生了同样的问题。

由于我必须提供一些代码,因此请使用 Python 在上述示例中找到以下代码段:

run_cmd_shell = lambda: ssm.send_command(
        Targets=[{
            'Key': 'tag:Name',
            'Values': ['test_ssm']
        },
        {
            'Key': 'tag:Role',
            'Values': ['slave']
        }
        ],
        DocumentName='AWS-RunShellScript',
        Parameters={'commands': [f'sleep {sleep_time}'],
                    'workingDirectory': [workingDirectory],
                    'executionTimeout': [executionTimeout]
            },
        OutputS3BucketName=bucket_name,
        OutputS3KeyPrefix=bucket_prefix,
        MaxConcurrency='150'
    )


remote_cmd_script = lambda: ssm.send_command(
        Targets=[{
            'Key': 'tag:Name',
            'Values': ['test_ssm']
        },
        {
            'Key': 'tag:Role',
            'Values': ['slave']
        }
        ],
        DocumentName='AWS-RunRemoteScript',
        Parameters={'sourceType': ['S3'],
                    'sourceInfo': [f'{{"path":"https://s3.amazonaws.com/{bucket_name}/agents/{project_name}"}}'],
                    'commandLine': [f'sleep {sleep_time}'],
                    'workingDirectory': [workingDirectory],
                    'executionTimeout': [executionTimeout]
            },
        OutputS3BucketName=bucket_name,
        OutputS3KeyPrefix=bucket_prefix,
        MaxConcurrency='150'
    )

我希望能够通过SSH或手动运行尽可能多的阻止命令(这比 5 要多得多),但是我在SSM方面做错了什么,或AWS SSM受限制。

1 个答案:

答案 0 :(得分:0)

简短回答。在amazon-ssm-agent.json文件中增加CommandWorkersLimit设置

我如何追踪它的响应时间稍长。

来自源代码中的ReleaseNotes

  

删除了最大并行执行数的上限   代理上的文档(以前最多为10个)您可以配置   通过在中设置“ CommandWorkerLimit”属性   amazon-ssm-agent.json文件

如果我们在Mds部分中提取了一个amazon-ssm-agent.json.template峰值文件,则可以看到它设置为5。

{
    "Profile":{
        "ShareCreds" : true,
        "ShareProfile" : ""
    },
    "Mds": {
        "CommandWorkersLimit" : 5,
        "StopTimeoutMillis" : 20000,
        "Endpoint": "",
        "CommandRetryLimit": 15
    },
... <LOTS DELETED> 
}