Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python AWS系统经理“;“进行中”;命令限制为5?_Python_Amazon Web Services_Amazon Systems Manager - Fatal编程技术网

Python AWS系统经理“;“进行中”;命令限制为5?

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控制台时也会发生同

因此,首先,我四处寻找关于我所面临问题的现有线索,但我没有找到任何线索。我也把这个贴在网上了,但没有得到回复。如果已经有一个线程在这里了,我道歉。此外,我会为即将发布的相对较长的帖子道歉

现在,我尝试使用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文件,实际上不会执行任何新命令。更奇怪的是,您会注意到日志在此块之后停止:

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源代码发行说明)。这肯定是要更改的设置,将尽快检查并标记为已接受。谢谢!