AWS Systems Manager "In Progress" 命令限制为 5?
AWS Systems Manager "In Progress" commands limit to 5?
所以首先,我四处寻找关于我所面临问题的现有线程,但我没有找到任何东西。我也在 AWS forums 上 post 编辑了这个,但没有得到任何答复。如果这里已经有一个线程,我很抱歉。此外,我会为即将到来的相对长post.
道歉
现在,我想做的是 运行 同一应用程序的多个(阻塞)进程,使用 AWS-RunShellScript 文档。问题是,使用此方法启动的进程不能超过 5 个。如果我通过 SSH 甚至手动启动它们,我可以毫无问题地启动几十个。
我使用的实例是Ubuntu。我正在使用 Python 3.7.4 进行 AWS 资源操作,但在使用 AWS 控制台 时也会发生同样的情况。
每个命令通常会阻止终端(即阻止您在终端的那个实例中发出进一步的命令,如果您手动执行的话)-反过来,设置其状态,如 AWS SSM 所见 - 进行中。从本质上讲,从 AWS SSM 的角度来看,该命令并不完整,直到进程被终止或停止(更多内容见下文)。
问题是我可以 运行 多达 4 个进程通过 SSM 并且仍然能够使用 SSM 来操纵它们(杀戮、检查等)——意思是最多 4 个命令 进行中 。然而,当我启动第 5 个时,虽然它们都继续工作,但我不能再使用 SSM,没有其他命令被执行(无论是新进程还是任何其他命令)
最简单的重现方法是发送 5 简单的 sleep 60 命令,通过 AWS-RunShellScript 文档,然后尝试任何新命令 - 你会注意到在 SSM 中它们将弹出为 In Progress,但如果你拖尾 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 受限。
简答。增加 amazon-ssm-agent.json 文件中的 CommandWorkersLimit 设置
关于我如何追踪它的回复稍微长一些。
源代码中来自ReleaseNotes
Removed the upper limit for the maximum number of parallel executing
documents on the agent (previously the max was 10) You can configure
this number by setting the “CommandWorkerLimit” attribute in
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>
}
所以首先,我四处寻找关于我所面临问题的现有线程,但我没有找到任何东西。我也在 AWS forums 上 post 编辑了这个,但没有得到任何答复。如果这里已经有一个线程,我很抱歉。此外,我会为即将到来的相对长post.
道歉现在,我想做的是 运行 同一应用程序的多个(阻塞)进程,使用 AWS-RunShellScript 文档。问题是,使用此方法启动的进程不能超过 5 个。如果我通过 SSH 甚至手动启动它们,我可以毫无问题地启动几十个。
我使用的实例是Ubuntu。我正在使用 Python 3.7.4 进行 AWS 资源操作,但在使用 AWS 控制台 时也会发生同样的情况。
每个命令通常会阻止终端(即阻止您在终端的那个实例中发出进一步的命令,如果您手动执行的话)-反过来,设置其状态,如 AWS SSM 所见 - 进行中。从本质上讲,从 AWS SSM 的角度来看,该命令并不完整,直到进程被终止或停止(更多内容见下文)。
问题是我可以 运行 多达 4 个进程通过 SSM 并且仍然能够使用 SSM 来操纵它们(杀戮、检查等)——意思是最多 4 个命令 进行中 。然而,当我启动第 5 个时,虽然它们都继续工作,但我不能再使用 SSM,没有其他命令被执行(无论是新进程还是任何其他命令)
最简单的重现方法是发送 5 简单的 sleep 60 命令,通过 AWS-RunShellScript 文档,然后尝试任何新命令 - 你会注意到在 SSM 中它们将弹出为 In Progress,但如果你拖尾 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 受限。
简答。增加 amazon-ssm-agent.json 文件中的 CommandWorkersLimit 设置
关于我如何追踪它的回复稍微长一些。
源代码中来自ReleaseNotes
Removed the upper limit for the maximum number of parallel executing documents on the agent (previously the max was 10) You can configure this number by setting the “CommandWorkerLimit” attribute in 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>
}