簡體   English   中英

有沒有辦法檢查 ssm send_command 是否正常運行?

[英]Is there a way to check that ssm send_command is running properly?

我目前正在嘗試使用 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"]})

我要做的就是創建一個新目錄,然后將 ssh 放入我的實例中,看看它是否存在。 我現在已經運行了這個腳本幾次,但一點運氣都沒有,我是否遺漏了什么,或者是否有更好的方法來檢查send_command調用是否有效?

是的,實際上有很多方法可以檢查命令是否有效。

如果我們運行以下命令:

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)

這個 function 的結果也是一個字典,我們可以從中檢索到很多關於命令的信息。

command_invocation_result['Status'] ## Returns the status of the execution of the command
command_invocation_result['StatusDetails'] ## Returns more information about the execution status

我們還可以得到命令的output和命令的錯誤output:

command_invocation_result['StandardOutputContent']
command_invocation_result['StandardErrorContent']

請不要在命令中執行ls -lart ,可以從StandardOutputContent檢索 output 。

send_commandget_invocation_command的文檔: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm.html

此外,我們可以 go 進入 AWS 控制台 -> 系統管理器 -> 運行命令,select 命令歷史記錄,我們還應該在此處獲得有關已執行命令的一些信息:

在此處輸入圖像描述

最后但同樣重要的是,為了成功運行命令,EC2 實例需要具有 SSM 的 IAM 角色: https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-rc-setting- up.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM