Noções básicas sobre status de comando - AWS Systems Manager

Noções básicas sobre status de comando

O Run Command, um recurso do AWS Systems Manager, relata informações detalhadas de status sobre os estados diferentes pelos quais um comando passa durante o processamento e para cada nó gerenciado que processou o comando. Você pode monitorar o status de comandos usando os seguintes métodos:

  • Escolha o ícone Refresh (Atualizar) na guia Commands (Comandos) na interface do console Run Command.

  • Chame list-commands ou list-command-invocations usando a AWS Command Line Interface (AWS CLI) Ou chame Get-SSMCommand ou Get-SSMCommandInvocation usando o AWS Tools for Windows PowerShell.

  • Configure o Amazon EventBridge para responder a alterações de estado ou status.

  • Configure o Amazon Simple Notification Service (Amazon SNS) para enviar notificações para todas as alterações de status ou para status específicos, como Failed ou TimedOut.

Status do Run Command

O Run Command relata detalhes de status para três áreas: plug-ins, invocações e um status de comando geral. Um plugin é um bloco de execução de código definido no documento do SSM do comando. Para obter mais informações sobre plug-ins, consulte Referência de plug-ins de documentos de comando.

Quando você envia um comando para vários nós gerenciados ao mesmo tempo, cada cópia do comando que é dirigida a cada nó é uma invocação de comando. Por exemplo, se você usar o documento AWS-RunShellScript e enviar um comando ifconfig para 20 instâncias Linux, esse comando terá 20 invocações. Cada invocação de comando comunica individualmente o status. Os plug-ins para uma determinada invocação de comando também comunicam individualmente o status.

Por fim, o Run Command inclui um status de comando agregado para todos os plug-ins e invocações. O status do comando agregado pode ser diferente do status relatado por plug-ins ou invocações, conforme observado nas tabelas a seguir.

nota

Se você executar comandos para vários nós gerenciados usando os parâmetros max-concurrency ou max-errors, o status do comando refletirá os limites impostos por esses parâmetros, conforme descrito nas tabelas a seguir. Para mais informações sobre esses parâmetros, consulte Execução de comandos em escala.

Status detalhado para plug-ins de comandos e invocações
Status Detalhes
Pendente O comando ainda não foi enviado para o nó gerenciado ou não foi recebido pelo SSM Agent. Se o comando não for recebido pelo agente antes do período de tempo que igual à soma dos parâmetros Timeout (seconds) (Tempo limite (segundos) e Execution timeout (Tempo limite de execução), o status será alterado para Delivery Timed Out.
InProgress O Systems Manager está tentando enviar o comando para o nó gerenciado ou o comando foi recebido pelo SSM Agent e começou a ser executado na instância. Dependendo do resultado de todos os plugins de comando, o status mudará para Success, Failed Delivery Timed Out ou Execution Timed Out. Exceção: se o agente não estiver em execução ou disponível em um nó, o status do comando permanecerá em In Progress até que o agente esteja disponível novamente ou até que o limite de runtime seja atingido. O status mudará para um estado terminal.
Atrasado O sistema tentou enviar o comando para o nó gerenciado, mas não foi bem-sucedido. O sistema tenta novamente.
Bem-sucedida Este status é retornado sob várias condições. Esse status não significa que o comando foi processado nesse nó. Por exemplo, o comando pode ser recebido pelo SSM Agent no nó gerenciado e retornar um código de saída zero porque o PowerShell ExecutionPolicy impediu a execução do comando. Este é um estado terminal. As condições que resultam em um comando retornando um status Success são:
  • Ao segmentar uma única instância, o comando foi recebido pelo SSM Agent em seu nó gerenciado e retornou um código de saída igual a zero.

  • Ao segmentar várias instâncias, o número de invocações com falha não ultrapassou o limite de erro especificado no comando.

  • Ao segmentar várias instâncias, pelo menos uma invocação foi bem-sucedida, enquanto outras atingiram o tempo limite. O limite de erro especificado ainda se aplica.

  • Ao segmentar uma tag, nenhuma instância é encontrada associada à tag.

  • Ao segmentar várias instâncias, o número de invocações com falha não ultrapassou o limite de erro especificado no comando.

  • Ao segmentar uma tag, pelo menos uma invocação foi bem-sucedida, enquanto outras atingiram o tempo limite. O limite de erro especificado ainda se aplica.

  • Você tem aplicações ou políticas em vigor no nível do sistema operacional que impedem ou substituem a execução de um comando, resultando no retorno de um código de saída zero.

nota

As mesmas condições se aplicam ao segmentar grupos de recursos. Para solucionar erros ou obter mais informações sobre a execução de comandos, envie um comando que manipule erros ou exceções retornando códigos de saída apropriados (códigos de saída diferentes de zero para falhas de comando).

DeliveryTimedOut O comando não foi entregue ao nó gerenciado antes do tempo limite total expirado. Os tempos limite totais não contam para o limite de max-errors do comando pai, mas contribuem para determinar se o status do comando pai é Success, Incomplete ou Delivery Timed Out. Este é um estado terminal.
ExecutionTimedOut A automação do comando foi iniciada no nó gerenciado, mas o comando não foi concluído antes do tempo limite de execução expirar. Os tempos limite de execução contam como uma falha, que enviará uma resposta diferente de zero e o Systems Manager encerrará a tentativa de executar a automação de comando e relatará um status de falha.
Failed (Falha) O comando não foi bem-sucedido em seu nó gerenciado. Para um plugin, isso indica que o código do resultado não foi zero. Para uma invocação de comando, isso indica que o código de resultado para um ou mais plug-ins não foi zero. Falhas de invocação contam para o limite max-errors do comando pai. Este é um estado terminal.
Cancelado O comando foi cancelado antes de ser concluído. Este é um estado terminal.
Não é possível entregar O comando não pode ser entregue ao nó gerenciado. O nó pode não existir ou pode não estar respondendo. Invocações não entregues não contam para o limite de max-errors do comando pai, mas não contribuem para determinar se o status do comando pai é Success ou Incomplete. Por exemplo, se todas as invocações em um comando tiverem o status Undeliverable, o status do comando retornado será Failed. No entanto, se um comando tiver cinco invocações, quatro das quais retornarem o status Undeliverable e uma retornar o status Success, o status do comando pai será Success. Este é um estado terminal.
Terminated (Encerrado) O comando pai excedeu o limite de max-errors e as invocações de comando subsequentes foram canceladas pelo sistema. Este é um estado terminal.
InvalidPlatform O comando foi enviado a um nó gerenciado que não correspondeu às plataformas necessárias especificadas pelo documento escolhido. O Invalid Platform não é considerado para o limite máximo de erros do comando pai, mas contribui para determinar se o status do comando pai é Success (Êxito) ou Failed (Falha). Por exemplo, se todas as invocações em um comando tiverem o status Invalid Platform, o status do comando retornado será Failed. No entanto, se um comando tiver cinco invocações, quatro das quais retornarem o status Invalid Platform e uma retornar o status Success, o status do comando pai será Success. Este é um estado terminal.
AccessDenied O usuário ou a função do AWS Identity and Access Management (IAM) que inicia o comando não tem acesso ao nó gerenciado de destino. O Access Denied não é considerado no limite max-errors do comando pai, mas contribuirá se o status do comando pai for Success ou Failed. Por exemplo, se todas as invocações em um comando tiverem o status Access Denied, o status do comando retornado será Failed. No entanto, se um comando tiver cinco invocações, quatro das quais retornarem o status Access Denied e uma retornar o status Success, o status do comando pai será Success. Este é um estado terminal.
Status detalhado de um comando
Status Detalhes
Pendente O comando ainda não foi recebido por um agente em um nó gerenciado.
InProgress O comando foi enviado para pelo menos um nó gerenciado, mas não chegou a um estado final em todos os nós.
Atrasado O sistema tentou enviar o comando para o nó, mas não foi bem-sucedido. O sistema tenta novamente.
Bem-sucedida O comando foi recebido pelo SSM Agent em todos nós gerenciados especificados ou definidos como destino e retornou um código de saída igual a zero. Todas as invocações de comando atingiram um estado terminal e o valor de max-errors não foi alcançado. Esse status não significa que o comando foi processado com sucesso em todos os nós gerenciados especificados ou de destino. Este é um estado terminal.
nota

Para solucionar erros ou obter mais informações sobre a execução de comandos, envie um comando que manipule erros ou exceções retornando códigos de saída apropriados (códigos de saída diferentes de zero para falhas de comando).

DeliveryTimedOut O comando não foi entregue ao nó gerenciado antes do tempo limite total expirado. O valor de max-errors ou mais invocações de comandos mostram um status de Delivery Timed Out. Este é um estado terminal.
Failed (Falha)

O comando não foi bem-sucedido em seu nó gerenciado. O valor de max-errors ou mais invocações de comandos mostram um status de Failed. Este é um estado terminal.

Incompleto O comando foi tentado em todos os nós gerenciados, e uma ou mais das invocações não tem um valor de Success. No entanto, não houve um número suficiente de invocações com falha para que o status fosse Failed. Este é um estado terminal.
Cancelado O comando foi cancelado antes de ser concluído. Este é um estado terminal.
RateExceeded O número de nós gerenciados visados pelo comando excedeu o limite da conta para invocações pendentes. O sistema cancelou o comando antes de executá-lo em qualquer nó. Este é um estado terminal.
AccessDenied O usuário ou o perfil que inicia o comando não tem acesso ao grupo de recursos de destino. O AccessDenied não é contabilizado em relação ao limite max-errors do comando pai, mas contribuirá se o status do comando pai for Success ou Failed. (Por exemplo, se todas as invocações em um comando tiverem o status AccessDenied, então o status do comando retornado será Failed. No entanto, se um comando tiver cinco invocações, quatro das quais retornarem o status AccessDenied e uma retornou o status Success, então o status do comando pai será Success.) Este é um estado terminal.
Nenhuma instância na tag O valor do par de chaves da etiqueta ou o grupo de recursos visado pelo comando não corresponde a nenhum nó gerenciado. Este é um estado terminal.

Noções básicas sobre valores de tempo limite de comandos

O Systems Manager impõe os seguintes valores de tempo limite ao executar comandos.

Tempo limite total

No console do Systems Manager, especifique o valor do tempo limite de entrega no campo Timeout (seconds) (Tempo limite [segundos]). Depois que um comando é enviado, o Run Command verifica se o comando expirou ou não. Se um comando atingir o limite de expiração do comando (tempo limite total), ele altera o status paraDeliveryTimedOutpara todas as invocações que têm o statusInProgress,PendingouDelayed.

O campo Timeout (seconds) (Tempo limite (segundos)) no console do Systems Manager

Em um nível mais técnico, o Timeout (seconds) (Tempo limite [segundos]) total é uma combinação de dois valores de tempo limite, como mostrado aqui:

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

Por exemplo, o valor padrão de Timeout (seconds) (Tempo limite em segundos) no console do Systems Manager é de 600 segundos. Se você executar um comando usando o comandoAWS-RunShellScriptDocumento do SSM, o valor padrão de“TimeoutSeconds”: “{{executionTimeout}}”é 3600 segundos, como mostrado na seguinte amostra de documento:

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

Isso significa que o comando é executado por 4.200 segundos (70 minutos) antes que o sistema defina o status do comando como DeliveryTimedOut.

Tempo limite de execução

No console do Systems Manager, especifique o valor do tempo limite de execução no campo Execution Timeout (Tempo limite de execução), se disponível. Nem todos os documentos do SSM exigem especificar um tempo limite de execução. O campo Execution Timeout (Tempo limite de execução) é exibido somente quando um parâmetro de entrada correspondente foi definido no documento SSM. Se especificado, o comando deve ser concluído dentro desse período.

nota

O Run Command depende da resposta do terminal SSM Agent para determinar se o comando foi entregue ou não ao agente. O SSM Agent deve enviar um sinal do ExecutionTimedOut para uma invocação ou comando a ser marcado como ExecutionTimedOut.

O campo Execution Timeout (Tempo limite de execução) no console do Systems Manager
Tempo limite de execução padrão

Se um documento do SSM do não exigir especificar explicitamente um valor de tempo limite de execução, o Systems Manager vai impor o tempo limite de execução padrão codificado.

Como o Systems Manager relata os tempos limite

Se o Systems Manager receber uma resposta execution timeout do SSM Agent em um destino, o Systems Manager marcará a invocação do comando como executionTimeout.

SeRun Commandnão recebe uma resposta de terminal de documento deSSM Agent, a invocação do comando é marcada comodeliveryTimeout.

Para determinar o status de tempo limite em um destino, o SSM Agent combina todos os parâmetros e o conteúdo do documento do SSM para o qual será calculado executionTimeout. Quando o SSM Agent determinar que um comando expirou, ele enviará executionTimeout para o serviço.

O padrão paraTempo limite (segundos)é de 3600 segundos. O padrão paraTempo limite de execuçãotambém é 3600 segundos. Portanto, o tempo limite padrão total para um comando é 7200 segundos.

nota

O SSM Agent processa executionTimeout de forma diferente dependendo do tipo de documento do SSM e da versão do documento.