我正在尝试向正在运行的ubuntu ec2实例发送命令。我已经配置了适当的角色,并且我在ec2实例上运行了ssm代理。使用boto3 SDK,我可以使用client.get_command_invocation()
函数成功发送shell命令,随后可以获取命令Id。现在的挑战是轮询结果。我正在尝试使用InvocationDoesNotExist
函数,但不断收到aws ssm list-command-invocations --command-id #### --instance-id i-#####
错误。我确信我正在使用正确的命令ID和实例ID,因为我已经使用AWS CLI测试了这些,如`ssm_client = boto3.client('ssm')
target_id = "i-####"
response = ssm_client.send_command(
InstanceIds=[
target_id
],
DocumentName="AWS-RunShellScript",
Comment="Code to run" ,
Parameters={
"commands": ["ls -l"]
}
)
cmd_id= response['Command']['CommandId']
response = ssm_client.get_command_invocation(CommandId=cmd_id,
InstanceId=target_id)
print(response)`
中所述。以下是我的代码片段:
botocore.errorfactory.InvocationDoesNotExist: An error occurred (InvocationDoesNotExist) when calling the GetCommandInvocation operation
这是返回的错误:
class App extends React.Component {
render() {
return (
<div>
<p>Hello!</p>
</div>
}
}
提前致谢。
答案 0 :(得分:3)
我有同样的问题,我在调用get_command_invocation()之前通过添加time.sleep()调用来修复它。短暂的延迟就足够了。
答案 1 :(得分:2)
只需添加这两行。
import time
time.sleep(2)
然后,它通常可以正常工作,只需要0.65秒,但最好花2秒。为了使它更好,您可以在for循环中添加一些很酷的东西(如打印语句),然后在其中进行类似的睡眠。