Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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
Amazon web services 在AWS SSM中运行FOR循环_Amazon Web Services_Aws Systems Manager - Fatal编程技术网

Amazon web services 在AWS SSM中运行FOR循环

Amazon web services 在AWS SSM中运行FOR循环,amazon-web-services,aws-systems-manager,Amazon Web Services,Aws Systems Manager,我需要停止EC2实例中的几个容器,然后一旦它们停止,我需要关闭EC2实例。 我的简单循环如下所示:- for s in `sudo a_custom_script another_old_docker_based_script | grep ^a_pattern`;do sudo a_custom_script "solution_start $s";done “sudo docker ps-aq”中s的;sudo docker停止$s;“完成” oneliner的实际成本

我需要停止EC2实例中的几个容器,然后一旦它们停止,我需要关闭EC2实例。 我的简单循环如下所示:-

for s in `sudo a_custom_script another_old_docker_based_script | grep ^a_pattern`;do sudo a_custom_script "solution_start $s";done
“sudo docker ps-aq”中s的
;sudo docker停止$s;“完成”
oneliner的实际成本如下所示:-

for s in `sudo a_custom_script another_old_docker_based_script | grep ^a_pattern`;do sudo a_custom_script "solution_start $s";done
我的Lambda脚本如下所示:-

import json
import boto3
import time


def lambda_handler(event, context):
    ssm = boto3.client('ssm')
    
    ec2 = boto3.client('ec2', region_name='eu-west-2')
    response = ssm.send_command( InstanceIds=['i-0d2a7492c0a721c19'], DocumentName="AWS-RunShellScript", Parameters={'commands': ['for s in `sudo docker ps -aq`; do sudo docker stop $s";done']},)
    
    time.sleep(2)
    cmd= response['Command']['CommandId']
    response = ssm.get_command_invocation(CommandId=cmd, 
    InstanceId='i-0d2a7492c0a721c19')
    return response
响应中的“状态”字段始终显示“InProgress”,我不确定容器是否处于停止状态

因此,我无法确定是否应该停止EC2实例

请帮助。

基于评论

报告的问题是由于没有给run命令足够的时间来完成而导致的。因此,它似乎长时间处于进程中

解决办法是再等一段时间

为了减少对等待时间的猜测,可以使用基本的for循环来迭代检查命令的进度

例如(伪代码):


有一些胭脂引号
$s“
?对不起!!移除它。这仍然不起作用。为run命令启用cloudwatch日志并检查日志。另外,当您在实例上手动运行该命令时,它是否工作?是@Marcin,for循环是否手动工作。您好@Marcin,它工作了。我不得不给ssm一个长时间的睡眠时间,比如300秒,让它回来告诉我它成功了。实际上,带有自定义命令的for循环大约需要240-250秒,我已经在机器本身中计时了。你在这里建议什么样的投票循环。我知道保持300秒不是一个很好的解决方案。