명령 상태 이해 - AWS Systems Manager

명령 상태 이해

AWS Systems Manager의 기능인 Run Command는 어떤 명령을 처리하는 동안과 명령을 처리한 각 관리형 노드에 대해 그 명령이 거치게 되는 다양한 상태에 대한 자세한 상태 정보를 보고합니다. 다음 방법을 사용하여 명령 상태를 모니터링할 수 있습니다.

  • Run Command 콘솔 인터페이스의 Commands(명령) 탭에서 Refresh(새로 고침) 아이콘을 선택합니다.

  • AWS Command Line Interface(AWS CLI)를 사용하여 list-commands 또는 list-command-invocations를 호출합니다. AWS Tools for Windows PowerShell을 사용하여 Get-SSMCommand 또는 Get-SSMCommandInvocation을 호출합니다.

  • 상태 변경에 응답하도록 Amazon EventBridge를 구성합니다.

  • 모든 상태 변경 또는 Failed, TimedOut 등의 특정 상태에 대해 알림을 보내도록 Amazon Simple Notification Service(SNS)를 구성합니다.

Run Command 상태

Run Command는 플러그인, 호출, 전체 명령 상태라는 세 가지 영역에 대한 자세한 상태 정보를 보고합니다. 플러그인은 명령의 SSM 문서에 정의된 코드 실행 블록입니다. 플러그인에 대한 자세한 내용은 Command 문서 플러그인 참조 섹션을 참조하세요.

동시에 여러 관리형 노드에 명령을 보내는 경우, 각 노드를 대상으로 하는 명령 사본 각각을 명령 호출이라고 합니다. 예를 들어 AWS-RunShellScript 문서를 사용하여 ifconfig 명령을 20개의 Linux 인스턴스에 보내는 경우 이 명령에는 20개의 호출이 있습니다. 각 명령 호출은 개별적으로 상태를 보고합니다. 지정된 명령 호출에 대한 플러그인 역시 상태를 개별적으로 보고합니다.

마지막으로, Run Command에는 모든 플러그인과 호출에 대한 총체적인 명령 상태가 포함되어 있습니다. 다음 표에 나와 있는 것처럼, 총체적인 명령 상태는 플러그인이나 호출에서 보고되는 상태와 다를 수 있습니다.

참고

max-concurrency 또는 max-errors 파라미터를 사용하여 많은 수의 관리형 노드에 명령을 실행할 경우 다음 표의 설명과 같이 명령 상태는 해당 파라미터에 따른 제한을 반영합니다. 이런 파라미터에 대한 자세한 내용은 대규모로 명령 실행 섹션을 참조하세요.

명령 플러그인 및 호출의 세부 상태
상태 표시기 Details
보류중 명령이 아직 관리형 노드로 전송되지 않았거나 SSM Agent에 의해 수신되지 않았습니다. 시간 제한(초)(Timeout (seconds)) 파라미터와 실행 시간 제한(Execution timeout) 파라미터의 합에 해당하는 시간이 경과하기 전에 에이전트가 명령을 수신하지 않으면 상태가 Delivery Timed Out로 변경됩니다.
InProgress Systems Manager가 관리형 노드에 명령을 보내려고 시도하거나 SSM Agent에서 명령을 수신하고 인스턴스에서 실행을 시작했습니다. 모든 명령 플러그인의 결과에 따라 상태는 Success, Failed, Delivery Timed Out 또는 Execution Timed Out으로 변경됩니다. 예외: 에이전트가 노드에서 실행 중이 아니거나 사용 가능한 경우 명령 상태는 에이전트를 다시 사용할 수 있거나 실행 시간 제한에 도달할 때까지 In Progress으로 유지됩니다. 상태는 종료 상태로 변경됩니다.
Delayed 시스템에서 관리형 노드로 명령 전송을 시도했지만 완료하지 못했습니다. 시스템이 다시 시도합니다.
Success 이 상태는 다양한 조건에서 반환됩니다. 이 상태가 노드에서 명령이 처리되었다는 뜻은 아닙니다. 예를 들어 관리형 노드의 SSM Agent에 명령이 수신된 후 PowerShell ExecutionPolicy에서 명령 실행을 차단한 결과로 종료 코드 0이 반환될 수 있습니다. 이것은 종료 상태입니다. 명령에서 Success 상태를 반환하는 조건은 다음과 같습니다.
  • 단일 인스턴스를 타겟팅할 때 명령이 관리형 노드의 SSM Agent에 수신되었고 종료 코드 0이 반환되었습니다.

  • 여러 인스턴스를 타겟팅할 때 실패한 호출 수가 명령에 지정된 오류 임계값을 초과하지 않았습니다.

  • 여러 인스턴스를 타겟팅할 때 한 번 이상의 호출이 성공했지만 나머지 호출은 제한 시간이 초과되었습니다. 지정된 오류 임계값은 여전히 적용됩니다.

  • 태그를 타겟팅할 때 태그와 관련된 인스턴스가 발견되지 않았습니다.

  • 태그를 타켓팅할 때 실패한 호출 수가 명령에 지정된 오류 임계값을 초과하지 않았습니다.

  • 태그를 타켓팅할 때 한 번 이상의 호출이 성공했지만 나머지 호출은 제한 시간이 초과되었습니다. 지정된 오류 임계값은 여전히 적용됩니다.

  • 명령 실행을 방지하거나 재정의하여 종료 코드 0이 반환되는 애플리케이션 또는 정책을 OS 수준에서 적용되고 있습니다.

참고

리소스 그룹을 타켓팅할 때도 동일한 조건이 적용됩니다. 오류를 해결하거나 명령 실행에 대한 자세한 정보를 얻으려면 적절한 종료 코드(명령 실패에 대한 0 이외의 종료 코드)를 반환해 오류나 예외를 처리하는 명령을 전송합니다.

DeliveryTimedOut 총 시간 제한 만료 전까지 명령이 관리형 노드로 전송되지 않았습니다. 상위 명령의 max-errors 제한에 총 시간 초과 횟수가 계산되지는 않지만, 상위 명령 상태를 Success, Incomplete 또는 Delivery Timed Out으로 표시할지 여부에는 영향을 미칩니다. 이것은 종료 상태입니다.
ExecutionTimedOut 관리형 노드에서 명령 자동화가 시작되었지만, 실행 시간제한 만료 전까지 명령이 완료되지 않았습니다. 실행 시간 초과는 실패로 계산되며, 이 경우 0이 아닌 응답이 전송되고 Systems Manager는 명령 자동화 실행 시도를 종료하고 실패 상태를 보고합니다.
Failed 관리형 노드에서 명령 실행을 완료하지 못했습니다. 플러그인의 경우 이는 결과 코드가 0이 아니었음을 나타냅니다. 명령 호출의 경우 이는 하나 이상의 플러그인에 대한 결과 코드가 0이 아니었음을 나타냅니다. 호출 실패는 상위 명령의 max-errors 제한에 계산됩니다. 이것은 종료 상태입니다.
취소됨 명령이 완료되기 전에 취소되었습니다. 이것은 종료 상태입니다.
Undeliverable 관리형 노드로 명령을 전달할 수 없습니다. 해당 노드가 없거나 응답하지 않는 것일 수 있습니다. 배달할 수 없는 호출은 상위 명령의 max-errors 제한에 계산되지 않지만 상위 명령 상태를 Success 또는 Incomplete으로 표시할지 여부에 영향을 미치지도 않습니다. (예를 들어 명령의 모든 호출이 Undeliverable 상태인 경우 반환된 명령 상태는 Failed입니다. 그러나 명령에 5개 호출이 있는 경우 그 중 4개가 Undeliverable 상태를 반환하고 나머지 1개가 Success 상태를 반환하는 경우 상위 명령의 상태는 Success입니다.) 이것은 종료 상태입니다.
Terminated 상위 명령이 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 한도에 불리하게 작용하지 않지만 상위 명령 상태가 Success 또는 Failed인지 여부에 원인을 제공합니다. (예를 들어 명령의 모든 호출이 Access Denied 상태인 경우 반환된 명령 상태는 Failed입니다. 그러나 명령에 5개 호출이 있는 경우 그 중 4개가 Access Denied 상태를 반환하고 나머지 1개가 Success 상태를 반환하는 경우 상위 명령의 상태는 Success입니다.) 이것은 종료 상태입니다.
명령의 세부 상태
상태 표시기 Details
보류중 어떤 관리형 노드에서도 에이전트가 아직 명령을 받지 않았습니다.
InProgress 1개 이상의 관리형 노드로 명령을 전송했지만 모든 노드에서 최종 상태에 도달하지는 못했습니다.
Delayed 시스템에서 노드로 명령 전송을 시도했지만 완료하지 못했습니다. 시스템이 다시 시도합니다.
Success 지정되었거나 대상이 된 모든 관리형 노드의 SSM Agent에 명령이 수신되었고 종료 코드 0을 반환했습니다. 모든 명령 호출이 터미널 상태에 도달했고 max-errors 값에 도달하지 않았습니다. 이 상태가 지정되었거나 대상이 된 모든 관리형 노드에서 명령이 처리되었다는 뜻은 아닙니다. 이것은 종료 상태입니다.
참고

오류를 해결하거나 명령 실행에 대한 자세한 정보를 얻으려면 적절한 종료 코드(명령 실패에 대한 0 이외의 종료 코드)를 반환해 오류나 예외를 처리하는 명령을 전송합니다.

DeliveryTimedOut 총 시간 제한 만료 전까지 명령이 관리형 노드로 전송되지 않았습니다. max-errors 이상의 명령 호출 값이 Delivery Timed Out 상태를 표시합니다. 이것은 종료 상태입니다.
Failed

관리형 노드에서 명령 실행을 완료하지 못했습니다. max-errors 이상의 명령 호출 값이 Failed 상태를 표시합니다. 이것은 종료 상태입니다.

불완전 모든 관리형 노드에서 명령을 시도했고 값이 Success가 아닌 호출이 한 개 이상입니다. 하지만 Failed 상태가 될 정도로 많은 호출에 실패한 것은 아닙니다. 이것은 종료 상태입니다.
취소됨 명령이 완료되기 전에 취소되었습니다. 이것은 종료 상태입니다.
RateExceeded 명령의 대상이 되는 관리형 노드 수가 보류 중인 호출에 대한 계정 할당량을 초과했습니다. 시스템에서 이 명령을 어떤 노드에서 실행하기 전에 취소했습니다. 이것은 종료 상태입니다.
AccessDenied 명령을 시작하는 사용자 또는 역할은 대상으로 지정된 리소스 그룹에 액세스할 수 없습니다. AccessDenied는 상위 명령의 max-errors 한도에 불리하게 작용하지 않지만 상위 명령 상태가 Success 또는 Failed인지 여부에 원인을 제공합니다. (예를 들어 명령의 모든 호출이 AccessDenied 상태인 경우 반환된 명령 상태는 Failed입니다. 그러나 명령에 5번의 호출이 있고 그 중 4번은 상태 AccessDenied를 반환하고 1번은 Success 상태를 반환하는 경우 상위 명령의 상태는 Success입니다.) 이것은 종료 상태입니다.
태그에 인스턴스 없음 명령으로 대상 지정된 태그 키 페어 또는 리소스 그룹은 관리형 노드와 일치하지 않습니다. 이것은 종료 상태입니다.

명령 제한 시간 값 이해

Systems Manager는 명령을 실행할 때 다음 시간 제한 값을 적용합니다.

총 제한 시간

Systems Manager 콘솔에서 시간 제한(초)(Timeout (seconds)) 필드에 시간 제한 값을 지정합니다. 명령이 전송된 후 Run Command는 명령이 만료되었는지 여부를 확인합니다. 명령이 명령 만료 제한(총 시간 제한)에 도달하면 상태가 InProgress, Pending 또는 Delayed인 모든 호출에 대해 상태가 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-RunShellScriptSSM 문서를 사용하여 명령을 실행하는 경우 다음 문서 샘플과 같이 "timeoutSeconds": "{{ executionTimeout }}"의 기본값은 3,600초입니다.

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

즉, 시스템이 명령 상태를 DeliveryTimedOut으로 설정하기 전에 명령이 4,200초(70분) 동안 실행됩니다.

실행 제한 시간

Systems Manager 콘솔의 실행 시간 제한(Execution Timeout) 필드에 실행 시간 제한 값을 지정합니다(사용 가능한 경우). 모든 SSM 문서에 실행 시간 제한을 지정해야 하는 것은 아닙니다. Execution Timeout(실행 시간 초과) 필드는 SSM 문서에 해당 입력 파라미터가 정의되어 있는 경우에만 표시됩니다. 지정된 경우 이 시간 내에 명령이 완료되어야 합니다.

참고

Run Command는 명령이 에이전트에 전송되었는지 여부를 판별하기 위해 SSM Agent 문서 터미널 응답에 의존합니다. SSM Agent는 ExecutionTimedOut으로 표시되는 호출 또는 명령에 대한 ExecutionTimedOut 신호를 보내야 합니다.

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))의 기본값은 3,600초입니다. 실행 시간 제한(Execution Timeout)의 기본값도 3,600초입니다. 따라서 명령의 총 기본 시간 제한은 7,200초입니다.

참고

SSM Agent는 SSM 문서 유형 및SSM 문서 버전에 따라 executionTimeout을 다르게 처리합니다.