了解命令狀態 - AWS Systems Manager

了解命令狀態

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

  • 在 Amazon Elastic Compute Cloud (Amazon EC2) 主控台選擇 Run Command (執行命令) 頁面上的 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) 設定為針對所有狀態變更或 Failed 或 TimedOut 之類的特定狀態傳送通知。

Run Command 狀態

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

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

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

注意

如果您使用 max-concurrencymax-errors 參數對大量執行個體執行命令,命令狀態會反映這些參數所實施的限制,如下列資料表所述。如需這些參數的詳細資訊,請參閱 使用目標和速率控制將命令傳送至機群

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

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

交付逾時 在交付逾時過期前,不會將此命令傳送到執行個體。交付逾時不會計入父命令的 max-errors 限制,但它們不會影響父命令狀態是否為 SuccessIncompleteDelivery Timed Out。這是一個終端狀態。
執行逾時 命令執行會在執行個體上開始,但是執行在執行逾時過期前未完成。執行逾時不會計入父命令的 max-errors 限制。這是一個終端狀態。如果達到逾時,Systems Manager 停止命令執行。
失敗

在執行個體上的命令不成功。若是外掛程式,這表示結果碼不為零。若是命令叫用,這表示一或多個外掛程式的結果碼不為零。呼叫失敗不會計入父命令的 max-errors 限制。這是一個終端狀態。

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

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

交付逾時 在交付逾時過期前,不會將此命令傳送到執行個體。max-errors 或多個命令呼叫的值顯示為狀態 Delivery Timed Out。這是一個終端狀態。
執行逾時 命令執行會在執行個體上開始,但是執行在執行逾時過期前未完成。max-errors 或多個命令呼叫的值顯示為狀態 Execution Timed Out。這是一個終端狀態。
失敗

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

未完成 已在所有執行個體上嘗試命令且一或多個呼叫沒有值 Success。不過,沒有足夠的呼叫失敗,狀態會變為 Failed。這是一個終端狀態。
已取消 命令在完成前已取消。這是一個終端狀態。
超過費率 超過待處理呼叫帳戶限制的命令視為目標之執行個體數量。系統已在任何執行個體上執行命令前將其取消。這是一個終端狀態。
存取遭拒 啟動命令的 IAM 使用者或角色沒有存取目標資源群組的權限。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) (逾時 (秒))) 是兩個逾時值的組合,如下所示:

Delivery 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 }}"

這表示該命令會在系統傳回傳遞逾時之前執行 4,200 秒 (70 分鐘)。

執行逾時

在 Systems Manager 主控台中,您可以在 Execution Timeout (執行逾時) 欄位中指定執行逾時值 (如果有的話)。並非所有 SSM 文件都需要您指定執行逾時。如果指定了逾時,命令即必須在此期間內完成。

注意

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


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

預設執行逾時

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

總逾時

總逾時等於 delivery timeout 值加上 execution timeout。如果 SSM 文件不要求 execution timeout,則 total timeout 等於 delivery timeout 值加上 default execution timeout

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