Demonstração: Usar a AWS CLI com o Run Command - AWS Systems Manager

Demonstração: Usar a AWS CLI com o Run Command

A demonstração de exemplo a seguir mostra como usar a AWS Command Line Interface (AWS CLI) para ver informações sobre comandos e parâmetros de comando, como executar comandos e como visualizar o status desses comandos.

Importante

Apenas administradores confiáveis devem ter permissão para usar os documentos pré-configurados do AWS Systems Manager mostrados neste tópico. Os comandos ou scripts especificados em documentos do Systems Manager são executados com permissões administrativas em seus nós. Se um usuário tiver permissão para executar qualquer um dos documentos do Systems Manager predefinidos (qualquer documento que comece com AWS-), ele também terá acesso de administrador ao nó. Para todos os outros usuários, você deve criar documentos restritivos e compartilhá-los com usuários específicos.

Etapa 1: Conceitos básicos

Você deve ter permissões de administrador sobre o nó gerenciado que deseja configurar ou deve ter recebido a permissão apropriada no AWS Identity and Access Management (IAM). Veja também que o exemplo usa região Leste dos EUA (Ohio) (us-east-2). O Run Command está disponível nas Regiões da AWS listadas em Systems Manager service endpoints no Referência geral da Amazon Web Services. Para ter mais informações, consulte Configurar nós gerenciados para o AWS Systems Manager.

Para executar comandos usando a AWS CLI
  1. Instale e configure a AWS Command Line Interface (AWS CLI), caso ainda não o tenha feito.

    Para obter informações, consulte Instalar ou atualizar a versão mais recente da AWS CLI.

  2. Liste todos os documentos disponíveis.

    Esse comando lista todos os documentos disponíveis para sua conta com base em permissões do IAM.

    aws ssm list-documents
  3. Verifique se um nó está pronto para receber comandos.

    A saída do comando a seguir mostra se os nós gerenciados estão online.

    Linux & macOS
    aws ssm describe-instance-information \ --output text --query "InstanceInformationList[*]"
    Windows
    aws ssm describe-instance-information ^ --output text --query "InstanceInformationList[*]"
  4. Execute o comando a seguir para ver detalhes sobre um nó gerenciado específico.

    nota

    Para executar os comandos nessa demonstração, substitua os IDs de instância e comando. Para os dispositivos gerenciados principais do AWS IoT Greengrass, use o mi-ID_number para o ID da instância. O ID do comando é retornado como uma resposta ao send-command. IDs de instância estão disponíveis em Fleet Manager, um recurso do AWS Systems Manager.

    Linux & macOS
    aws ssm describe-instance-information \ --instance-information-filter-list key=InstanceIds,valueSet=instance-ID
    Windows
    aws ssm describe-instance-information ^ --instance-information-filter-list key=InstanceIds,valueSet=instance-ID

Etapa 2: Executar scripts de shell para exibir detalhes de recursos

Por meio do Run Command e do documento AWS-RunShellScript, você pode executar qualquer comando ou script em um nó gerenciado, como se estivesse conectado localmente.

Veja a descrição e os parâmetros disponíveis

Use o seguinte comando para visualizar uma descrição do documento JSON do Systems Manager.

Linux & macOS
aws ssm describe-document \ --name "AWS-RunShellScript" \ --query "[Document.Name,Document.Description]"
Windows
aws ssm describe-document ^ --name "AWS-RunShellScript" ^ --query "[Document.Name,Document.Description]"

Use o comando a seguir para visualizar os parâmetros e detalhes disponíveis sobre esses parâmetros.

Linux & macOS
aws ssm describe-document \ --name "AWS-RunShellScript" \ --query "Document.Parameters[*]"
Windows
aws ssm describe-document ^ --name "AWS-RunShellScript" ^ --query "Document.Parameters[*]"

Etapa 3: Enviar comandos simples usando o documento AWS-RunShellScript

Execute o comando a seguir para obter informações de IP para um nó do Linux.

Se você estiver segmentando um nó gerenciado do Windows Server, altere o document-name para AWS-RunPowerShellScript e altere o command de ifconfig para ipconfig.

Linux & macOS
aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "IP config" \ --parameters commands=ifconfig \ --output text
Windows
aws ssm send-command ^ --instance-ids "instance-ID" ^ --document-name "AWS-RunShellScript" ^ --comment "IP config" ^ --parameters commands=ifconfig ^ --output text
Obter informações de comando com dados de resposta

O comando a seguir usa o ID de Comando que foi retornado do comando anterior para obter os detalhes e os dados de resposta da execução do comando. O sistema retorna os dados da resposta se o comando for concluído. Se a execução do comando mostrar "Pending" ou "InProgress", execute esse comando novamente para ver os dados de resposta.

Linux & macOS
aws ssm list-command-invocations \ --command-id $sh-command-id \ --details
Windows
aws ssm list-command-invocations ^ --command-id $sh-command-id ^ --details

Identificar usuário

O comando a seguir exibe o usuário padrão que executa os comandos.

Linux & macOS
sh_command_id=$(aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "Demo run shell script on Linux managed node" \ --parameters commands=whoami \ --output text \ --query "Command.CommandId")
Obter status do comando

O comando a seguir usa o ID de Comando para obter o status da execução do comando em nós gerenciados. Este exemplo usa o ID de comando que foi retornado no comando anterior.

Linux & macOS
aws ssm list-commands \ --command-id "command-ID"
Windows
aws ssm list-commands ^ --command-id "command-ID"
Obter detalhes do comando

O comando a seguir usa o ID do comando anterior para obter o status da execução do comando por nó gerenciado.

Linux & macOS
aws ssm list-command-invocations \ --command-id "command-ID" \ --details
Windows
aws ssm list-command-invocations ^ --command-id "command-ID" ^ --details
Obter informações de comando com dados de resposta para um nó gerenciado específico

O comando a seguir retorna a saída da solicitação aws ssm send-command original para um nó específico.

Linux & macOS
aws ssm list-command-invocations \ --instance-id instance-ID \ --command-id "command-ID" \ --details
Windows
aws ssm list-command-invocations ^ --instance-id instance-ID ^ --command-id "command-ID" ^ --details

Exibir versão do Python

O comando a seguir retorna a versão do Python em execução em um nó.

Linux & macOS
sh_command_id=$(aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "Demo run shell script on Linux Instances" \ --parameters commands='python -V' \ --output text --query "Command.CommandId") \ sh -c 'aws ssm list-command-invocations \ --command-id "$sh_command_id" \ --details \ --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'

Etapa 4: Executar um script Python simples usando o Run Command

O comando a seguir executa um script simples Python “Hello World” usando o Run Command.

Linux & macOS
sh_command_id=$(aws ssm send-command \ --instance-ids "instance-ID" \ --document-name "AWS-RunShellScript" \ --comment "Demo run shell script on Linux Instances" \ --parameters '{"commands":["#!/usr/bin/python","print \"Hello World from python\""]}' \ --output text \ --query "Command.CommandId") \ sh -c 'aws ssm list-command-invocations \ --command-id "$sh_command_id" \ --details \ --query "CommandInvocations[].CommandPlugins[].{Status:Status,Output:Output}"'

Etapa 5: Rodar um script Bash usandoRun Command

Os exemplos nesta seção demonstram como executar o seguinte script bash usandoRun Command.

Para obter exemplos de uso do Run Command para executar scripts armazenados em locais remotos, consulte Executar scripts no Amazon S3 e Executar scripts do GitHub.

#!/bin/bash yum -y update yum install -y ruby cd /home/ec2-user curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install chmod +x ./install ./install auto

Este script instala o agente do AWS CodeDeploy no Amazon Linux e no Red Hat Enterprise Linux (RHEL), como descrito em Criar uma instância do Amazon EC2 para CodeDeploy no Guia do usuário do AWS CodeDeploy.

O script instala o agente CodeDeploy de um bucket do S3 gerenciado pela AWS na região Leste dos EUA (Ohio) (us-east-2), aws-codedeploy-us-east-2.

Execute um script bash em umAWS CLIComando da

O exemplo a seguir demonstra como incluir o script bash em um comando da CLI usando o comando--parametersopção.

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --targets '[{"Key":"InstanceIds","Values":["instance-id"]}]' \ --parameters '{"commands":["#!/bin/bash","yum -y update","yum install -y ruby","cd /home/ec2-user","curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install","chmod +x ./install","./install auto"]}'

Executar um script bash em um arquivo JSON

No exemplo a seguir, o conteúdo do script bash é armazenado em um arquivo JSON e o arquivo é incluído no comando usando o--cli-input-jsonopção.

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --targets "Key=InstanceIds,Values=instance-id" \ --cli-input-json file://installCodeDeployAgent.json
Windows
aws ssm send-command ^ --document-name "AWS-RunShellScript" ^ --targets "Key=InstanceIds,Values=instance-id" ^ --cli-input-json file://installCodeDeployAgent.json

O conteúdo do arquivo installCodeDeployAgent.json mencionado é mostrado no exemplo a seguir.

{ "Parameters": { "commands": [ "#!/bin/bash", "yum -y update", "yum install -y ruby", "cd /home/ec2-user", "curl -O https://aws-codedeploy-us-east-2.s3.amazonaws.com/latest/install", "chmod +x ./install", "./install auto" ] } }