是的,实际上有很多方法可以检查命令是否有效。
如果我们运行以下命令:
ssm_response = ec2.send_command(InstanceIds=[instance_id],
DocumentName='AWS-RunShellScript',
Parameters={"commands": ["cd ~ && mkdir hello && ls -lart"]})
的回归send_command
是一个字典,其中包含命令的 id。可以按如下方式检索此 id:
command_id = ssm_response['Command']['CommandId']
我们需要这个 id,因为预计该命令将运行更长的时间并且send_command
不会等到命令终止。
为了获取命令的状态,我们可以使用get_command_invocation
如下:
command_invocation_result = ec2.get_command_invocation(CommandId=command_id, InstanceId=instance_id)
该函数的结果也是一个字典,我们可以从中检索有关该命令的大量信息。
command_invocation_result['Status'] ## Returns the status of the execution of the command
command_invocation_result['StatusDetails'] ## Returns more information about the execution status
我们还可以获得命令的输出和命令的错误输出:
command_invocation_result['StandardOutputContent']
command_invocation_result['StandardErrorContent']
请注意,在命令中我正在执行ls -lart
可以从其中检索输出StandardOutputContent
.
文档为send_command
and get_invocation_command
: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm.html
此外,我们可以进入 AWS 控制台 -> Systems Manager -> Run Command,选择命令历史记录,我们还应该获得有关已执行命令的一些信息:
最后但并非最不重要的一点是,为了成功运行命令,EC2 实例需要具有 SSM 的 IAM 角色:https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-rc-setting-up.html