AWS 系统管理器"In Progress"命令限制为 5?



所以首先,我四处寻找关于我面临的问题的现有线程,但我什么也没找到。我也在 AWS 论坛上发布了这个,但没有得到答案。如果这里已经有一个现有的线程,我很抱歉。此外,我将为即将到来的相对较长的帖子道歉。

现在,我正在尝试做的是使用AWS-RunShellScript 文档运行同一应用程序的多个(阻塞(进程。问题是,我不能使用此方法启动超过5个进程。如果我通过SSH甚至手动启动它们,我可以毫无问题地启动数十个。

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

每个命令通常会阻止终端(即,如果您要手动执行,则阻止您在终端实例中发出进一步的命令( - 这反过来又设置其状态,如 AWS SSM -进行中所示。从本质上讲,从 AWS SSM 的角度来看,该命令并不完整,直到进程被终止或停止(下文将详细介绍(。

问题是我可以通过 SSM 运行多达 4 个进程,并且仍然能够使用 SSM(终止、检查等(操作它们 - 这意味着最多有4个正在进行的命令。但是,当我启动第 5 个时,当它们都继续工作时,我不能再使用 SSM,没有执行其他命令(无论是新进程还是任何其他命令(

重现此问题的最简单方法是通过AWS-RunShellScript文档发送5个简单的睡眠 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"

超过此点后,不会处理其他命令,也不会记录进一步的信息。但是,使用我们的示例,当睡眠结束时,一旦打开另一个插槽,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 个(您可以配置 此数字通过在 amazon-ssm-agent.json file

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

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

编辑配置文件的方向

最新更新