因此,首先,我到处寻找有关我所面临问题的现有主题,但是我什么都没找到。我也将其发布在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 一次,我相信是“ strong>”命令,但没有提及)。
注意:正如我提到的 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受限制。
答案 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>
}