Python AWS系统经理“;“进行中”;命令限制为5?
因此,首先,我四处寻找关于我所面临问题的现有线索,但我没有找到任何线索。我也把这个贴在网上了,但没有得到回复。如果已经有一个线程在这里了,我道歉。此外,我会为即将发布的相对较长的帖子道歉 现在,我尝试使用AWS RunShellScript文档运行同一应用程序的多个(阻塞)进程。问题是,使用此方法启动的进程不能超过5个。如果我通过SSH甚至手动启动它们,我可以毫无问题地启动几十个 我正在使用的实例是Ubuntu。我正在使用Python 3.7.4进行AWS资源操作,但使用AWS控制台时也会发生同样的情况 每个命令通常会阻止终端(即,如果您要手动执行,则阻止您在该终端实例中发出进一步的命令),这反过来会设置其状态,如AWS SSM所示-正在进行中。本质上,从AWS SSM的角度来看,该命令在进程终止或停止之前是不完整的(下面将详细介绍) 问题是,我可以通过SSM运行多达4个进程,并且仍然能够使用SSM(杀戮、检查等)操纵它们-这意味着最多有4个命令正在执行。然而,当我启动第五个命令时,当它们都继续工作时,我不能再使用SSM了,没有其他命令被执行(无论是新进程还是任何其他命令) 最简单的复制方法是通过AWS RunShellScript文件发送5simple sleep 60命令,然后尝试任何新命令-您会注意到在SSM中,它们将作为正在执行的命令弹出,但如果跟踪amazon-SSM-agent.log文件,实际上不会执行任何新命令。更奇怪的是,您会注意到日志在此块之后停止:Python AWS系统经理“;“进行中”;命令限制为5?,python,amazon-web-services,amazon-systems-manager,Python,Amazon Web Services,Amazon Systems Manager,因此,首先,我四处寻找关于我所面临问题的现有线索,但我没有找到任何线索。我也把这个贴在网上了,但没有得到回复。如果已经有一个线程在这里了,我道歉。此外,我会为即将发布的相对较长的帖子道歉 现在,我尝试使用AWS RunShellScript文档运行同一应用程序的多个(阻塞)进程。问题是,使用此方法启动的进程不能超过5个。如果我通过SSH甚至手动启动它们,我可以毫无问题地启动几十个 我正在使用的实例是Ubuntu。我正在使用Python 3.7.4进行AWS资源操作,但使用AWS控制台时也会发生同
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"
超过此点后将不再处理其他命令,也不会记录更多信息。但是,使用我们的示例,当睡眠结束时,排队的命令将在另一个插槽打开后立即执行(假设您一次只能排队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受到限制。简短回答。增加amazon-ssm-agent.json文件中的CommandWorkersLimit设置 对我是如何找到它的反应稍微长一点 从源代码中删除 删除了最大并行执行次数的上限 您可以配置代理上的文档(以前最大值为10) 通过在中设置“CommandWorkerLimit”属性来设置此数字 amazon-ssm-agent.json文件 如果我们在Mds部分中获取一个峰值文件,您可以看到它被设置为5
{
"Profile":{
"ShareCreds" : true,
"ShareProfile" : ""
},
"Mds": {
"CommandWorkersLimit" : 5,
"StopTimeoutMillis" : 20000,
"Endpoint": "",
"CommandRetryLimit": 15
},
... <LOTS DELETED>
}
{
“简介”:{
“共享信条”:没错,
“共享配置文件”:”
},
“Mds”:{
“CommandWorkersLimit”:5,
“StopTimeoutMillis”:20000,
“端点”:“,
“命令限制”:15
},
...
}
嗯,我现在觉得有点傻。我看过aws文档,boto文档。参数本身有点模糊,没有任何东西,也没有人在任何地方这样说(除了您链接的ssm源代码发行说明)。这肯定是要更改的设置,将尽快检查并标记为已接受。谢谢!