在AWS SSM中检索命令调用

时间:2018-04-27 16:53:46

标签: amazon-web-services ssm

我正在尝试向正在运行的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> } }

提前致谢。

2 个答案:

答案 0 :(得分:3)

我有同样的问题,我在调用get_command_invocation()之前通过添加time.sleep()调用来修复它。短暂的延迟就足够了。

答案 1 :(得分:2)

只需添加这两行。

import time
time.sleep(2)

然后,它通常可以正常工作,只需要0.65秒,但最好花2秒。为了使它更好,您可以在for循环中添加一些很酷的东西(如打印语句),然后在其中进行类似的睡眠。