了解命令狀態 - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

了解命令狀態

Run Command (AWS Systems Manager 的功能) 報告命令在處理期間經歷之不同狀態的詳細狀態資訊 (適用於處理命令的每個受管節點)。您可以使用下列方法來監控命令狀態:

  • 在 Run Command 主控台介面的 Commands (命令) 標籤中選擇 Refresh (重新整理) 圖示。

  • 使用 AWS Command Line Interface (AWS CLI) 呼叫 list-commandslist-command-invocations。或使用 AWS Tools for Windows PowerShell 呼叫 Get-SSMCommandGet-SSMCommandInvocation

  • 設定 Amazon EventBridge 以回應狀態或狀態變更。

  • 將 Amazon Simple Notification Service (Amazon SNS) 設定為針對所有狀態變更或 FailedTimedOut 之類的特定狀態傳送通知。

Run Command 狀態

Run Command 為以下三個領域報告狀態詳細資訊:外掛程式、呼叫和整體命令狀態。外掛程式是一種程式碼執行區塊,其在命令的 SSM 文件中有定義。如需外掛程式的詳細資訊,請參閱 命令文件外掛程式參考

當您同時將命令傳送到多個受管節點,將每個節點視為命令的每個命令副本是一種命令呼叫。例如,如果您使用的是 AWS-RunShellScript 文件和將 ifconfig 命令傳送到 20 個執行個體,該命令會有 20 個叫用。每個命令呼叫會個別報告狀態。指定命令叫用的外掛程式也會個別報告狀態。

最後,Run Command 包含所有外掛程式和呼叫的彙總命令狀態。彙總命令狀態可能會與外掛程式或呼叫所回報的狀態不同,如以下資料表所示。

注意

如果您使用 max-concurrencymax-errors 參數對大量受管節點執行命令,命令狀態會反映這些參數所實施的限制,如下列資料表所述。如需這些參數的詳細資訊,請參閱 大規模執行命令

命令外掛程式和呼叫的詳細狀態
狀態 詳細資訊
待定 該命令尚未傳送至受管節點或尚未被 SSM Agent 接收。如果代理程式未收到命令之前的時間長度等於 Timeout (seconds) (逾時 (秒)) 參數與 Execution timeout (執行逾時) 參數的總和,則狀態會變更為 Delivery Timed Out
InProgress Systems Manager 嘗試將命令傳送至執行個體,或由 SSM Agent 接收命令,並開始在受管節點上執行。根據所有命令外掛程式的結果,狀態變更為 SuccessFailedDelivery Timed OutExecution Timed Out異常情形:如果代理程式未執行或在節點上不可用,則命令狀態會保留在 In Progress,直到代理程式再次可用,或直到達到執行逾時限制為止。此狀態會接著變更為終止狀態。
延遲 系統嘗試將命令傳送至受管節點,但未成功。系統會再次重試。
Success (成功) 在受管節點透過 SSM Agent 接收的命令且傳回零的結束程式碼。此狀態代表命令在節點成功處理。這是一個終端狀態。
注意

若要排除錯誤或取得更多命令執行的相關資訊,透過傳回適當的結束代碼 (非零結束代碼適用於命令失敗),傳送處理錯誤或例外狀況的命令。

DeliveryTimedOut 在總逾時過期前,不會將此命令傳送到受管理節點。總逾時不會計入父命令的 max-errors 限制,但它們不會影響父命令狀態是否為 SuccessIncompleteDelivery Timed Out。這是一個終端狀態。
ExecutionTimedOut 命令自動化會在受管節點上開始,但是命令在執行逾時過期前未完成。執行超時計算為失敗,這將會傳送非零回覆,Systems Manager 將會停止嘗試執行命令自動化,並回報失敗狀態。
失敗 命令在受管節點上未成功執行。若是外掛程式,這表示結果碼不為零。若是命令叫用,這表示一或多個外掛程式的結果碼不為零。呼叫失敗不會計入父命令的 max-errors 限制。這是一個終端狀態。
已取消 命令在完成前已取消。這是一個終端狀態。
交付成果 無法將命令傳送至受管節點。節點可能不存在或可能不回應。交付成果呼叫不會計入父命令的 max-errors 限制,但它們不會影響父命令狀態是否為 SuccessIncomplete。例如,若命令中所有的呼叫狀態都是 Undeliverable,則命令狀態會傳回 Failed。但是,若命令進行 5 次呼叫,其中 4 次傳回了狀態 Undeliverable,1 次則傳回了狀態 Success,則父命令的狀態便是 Success。這是一個終端狀態。
已終止 父命令超過其 max-errors 限制和系統已取消後續命令呼叫。這是一個終端狀態。
InvalidPlatform 命令已傳送到與所選文件指定的所需平台不相符的受管節點。Invalid Platform 不會計入父命令的最高錯誤限制,但它確實會影響父命令狀態為成功或失敗。例如,若命令中所有的呼叫狀態都是 Invalid Platform,則命令狀態會傳回 Failed。但是,若命令進行 5 次呼叫,其中 4 次傳回了狀態 Invalid Platform,1 次則傳回了狀態 Success,則父命令的狀態便是 Success。這是一個終端狀態。
AccessDenied 啟動命令的 AWS Identity and Access Management (IAM) 使用者或角色沒有存取目標受管節點的權限。Access Denied 不會計入父命令的 max-errors 限制中,但可能會決定父命令的狀態是 SuccessFailed。例如,若命令中所有的呼叫狀態都是 Access Denied,則命令狀態會傳回 Failed。但是,若命令進行 5 次呼叫,其中 4 次傳回了狀態 Access Denied,1 次則傳回了狀態 Success,則父命令的狀態便是 Success。這是一個終端狀態。
命令的詳細狀態
狀態 詳細資訊
待定 任何受管節點上的代理程式都尚未收到命令。
InProgress 已將此命令傳送到至少一個受管節點,但在所有節點上都尚未達到最終狀態。
延遲 系統嘗試將命令傳送至節點,但未成功。系統會再次重試。
Success (成功) 在指定或目標受管節點上透過 SSM Agent 接收的命令且傳回零的結束程式碼。所有命令呼叫已達到終止狀態,而且未達到 max-errors 的值。此狀態代表命令在所有指定或目標受管節點上順利處理。這是一個終端狀態。
注意

若要排除錯誤或取得更多命令執行的相關資訊,透過傳回適當的結束代碼 (非零結束代碼適用於命令失敗),傳送處理錯誤或例外狀況的命令。

DeliveryTimedOut 在總逾時過期前,不會將此命令傳送到受管理節點。max-errors 或多個命令呼叫的值顯示為狀態 Delivery Timed Out。這是一個終端狀態。
失敗

命令在受管節點上未成功執行。max-errors 或多個命令呼叫的值顯示為狀態 Failed。這是一個終端狀態。

未完成 已在所有受管節點上嘗試命令且一或多個呼叫沒有值 Success。不過,沒有足夠的呼叫失敗,狀態會變為 Failed。這是一個終端狀態。
已取消 命令在完成前已取消。這是一個終端狀態。
RateExceeded 超過待處理呼叫帳戶配額的命令視為目標之受管節點數量。系統已在任何節點上執行命令前將其取消。這是一個終端狀態。
AccessDenied 啟動命令的使用者或角色沒有存取目標資源群組的權限。AccessDenied 不會計入父命令的 max-errors 限制中,但可能會決定父命令的狀態是 SuccessFailed。(例如,若命令中所有的叫用狀態為 AccessDenied,則傳回的命令狀態為 Failed。但是,若命令進行 5 次叫用,其中 4 次則傳回了狀態 AccessDenied,其中 1 次傳回狀態 Success,則父命令的狀態為 Success。) 這是一個終端狀態。
標籤中沒有執行個體 命令瞄準的標籤金鑰對值或資源群組並未符合任何受管節點。這是一個終端狀態。

了解命令逾時值

執行命令時,Systems Manager 會強制執行下列逾時值。

總逾時

在 Systems Manager 主控台中,您可以在 Timeout (seconds) (逾時 (秒)) 欄位中指定逾時值。傳送命令之後,Run Command 會檢查命令是否已過期。如果命令達到命令過期期限 (總逾時),則它會將所有狀態為 InProgressPendingDelayed 之叫用的狀態變更為 DeliveryTimedOut


                    Systems Manager 主控台中的 Timeout (seconds) (逾時 (秒)) 欄位

在更技術的層面上,總逾時 (Timeout (seconds) (逾時 (秒)) 包含兩個逾時值,如下所示:

Total timeout = "Timeout(seconds)" from the console + "timeoutSeconds": "{{ executionTimeout }}" from your SSM document

例如,Systems Manager 主控台中 Timeout (seconds) (逾時 (秒)) 的預設值是 600 秒。如果您使用 AWS-RunShellScript SSM 文件執行命令,"timeoutSeconds": "{{ executionTimeout }}" 的預設值是 3600 秒,如下列文件範例所示:

"executionTimeout": { "type": "String", "default": "3600", "runtimeConfig": { "aws:runShellScript": { "properties": [ { "timeoutSeconds": "{{ executionTimeout }}"

這表示在系統將命令狀態設定為 DeliveryTimedOut 之前,執行時間為 4,200 秒 (70 分鐘)。

執行逾時

在 Systems Manager 主控台中,您可以在 Execution Timeout (執行逾時) 欄位中指定執行逾時值 (如果有的話)。並非所有 SSM 文件都需要您指定執行逾時。僅在 SSM 文件中已定義對應的輸入參數時,才會顯示執行逾時欄位。如果指定了逾時,命令即必須在此期間內完成。

注意

Run Command 依賴於 SSM Agent 文件終端機回應,以判斷命令是否已傳遞給代理程式。SSM Agent 必須傳送用於叫用或命令、被標記為 ExecutionTimedOutExecutionTimedOut 信號。


                    Systems Manager 主控台中的 Execution Timeout (執行逾時) 欄位
預設執行逾時

如果 SSM 文件不要求您明確指定執行逾時值,則 Systems Manager 會強制執行硬式編碼預設執行逾時。

Systems Manager 如何報告逾時

如果 Systems Manager 收到目標上 SSM Agent 的 execution timeout 回覆,則 Systems Manager 會將命令叫用標記為 executionTimeout

如果 Run Command 不會收到來自 SSM Agent 的文件終端機回應,則命令叫用被標記為 deliveryTimeout

為了判斷目標上的逾時狀態,SSM Agent 會結合所有參數和 SSM 文件的內容,以計算出 executionTimeout。當 SSM Agent 判斷命令已逾時,會將 executionTimeout 傳送至服務。

Timeout (seconds) (逾時 (秒)) 的預設為 3600 秒。Execution Timeout (執行逾時) 的預設也是 3600 秒。因此,命令的總預設逾時為 7200 秒。

注意

SSM Agent 會根據 SSM 文件類型和文件版本的不同,來處理 executionTimeout