有没有办法检查 ssm send_command 是否正常运行?

nko*_*h73 5 python amazon-ec2 amazon-web-services aws-ssm

我目前正在尝试使用 python 和 boto 在我的 ec2 实例上远程运行脚本,但我无法判断我的调用是否send_command正常工作。截至目前我的代码看起来像

ec2 = boto3.client('ssm',region_name='us-east-2', aws_access_key_id='XXXXXXXXX',aws_secret_access_key='XXXXXXXXXXXXXXXXXXX')
a = ec2.send_command(InstanceIds=ids, DocumentName='AWS-RunShellScript', Comment='abcdabcd', Parameters={"commands":["mkdir hello"]})
Run Code Online (Sandbox Code Playgroud)

我想做的就是创建一个新目录,然后通过 ssh 进入我的实例,看看它是否存在。我已经运行这个脚本几次了,但一点运气都没有,是否有我遗漏的东西,或者是否有更好的方法来检查呼叫是否send_command正常工作?

Erv*_*gyi 11

是的,实际上有很多方法可以检查命令是否有效。

如果我们运行以下命令:

ssm_response = ec2.send_command(InstanceIds=[instance_id],
                                 DocumentName='AWS-RunShellScript',
                                 Parameters={"commands": ["cd ~ && mkdir hello && ls -lart"]})
Run Code Online (Sandbox Code Playgroud)

返回的send_command是一个字典,其中包含命令的 id。可以按如下方式检索此 id:

command_id = ssm_response['Command']['CommandId']
Run Code Online (Sandbox Code Playgroud)

我们需要这个 id,因为预计该命令将运行更长的时间并且send_command不会等到命令终止。

为了获取命令的状态,我们可以使用get_command_invocation如下:

command_invocation_result = ec2.get_command_invocation(CommandId=command_id, InstanceId=instance_id)
Run Code Online (Sandbox Code Playgroud)

该函数的结果也是一个字典,我们可以从中检索有关该命令的大量信息。

command_invocation_result['Status'] ## Returns the status of the execution of the command
command_invocation_result['StatusDetails'] ## Returns more information about the execution status
Run Code Online (Sandbox Code Playgroud)

我们还可以获得命令的输出和命令的错误输出:

command_invocation_result['StandardOutputContent']
command_invocation_result['StandardErrorContent']
Run Code Online (Sandbox Code Playgroud)

请注意,在我正在执行的命令中,ls -lart可以从StandardOutputContent.

send_command和的文档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-上.html