Trabalhar com parâmetros usando oRun CommandComandos da - AWS Systems Manager

Trabalhar com parâmetros usando oRun CommandComandos da

Você pode trabalhar com parâmetros no Run Command, um recurso do AWS Systems Manager. Para ter mais informações, consulte AWS Systems Manager Run Command.

Executar um parâmetro String (console)

O procedimento a seguir explica o processo de criação de um parâmetro no String e, subsequentemente, a execução de um comando que usa esse parâmetro.

Para criar um parâmetro String usando o Parameter Store
  1. Abra o console AWS Systems Manager em https://console.aws.amazon.com/systems-manager/.

  2. No painel de navegação, escolha Run Command.

  3. Selecione Run command.

  4. Na lista Command document (Documento de comandos), escolha AWS-RunPowerShellScript (Windows) ou AWS-RunShellScript (Linux).

  5. Em Command parameters (Parâmetros de comando), insira echo {{ssm:parameter-name}}. Por exemplo: echo {{ssm:/Test/helloWorld}}.

  6. Na seção Targets (Destinos), escolha os nós gerenciados nos quais você quer executar essa operação, especificando as etiquetas, selecionando as instâncias ou dispositivos de borda manualmente ou especificando um grupo de recursos.

    dica

    Se um nó gerenciado que você espera ver não estiver listado, consulte Solução de problemas de disponibilidade do nó gerenciado para obter dicas de solução de problemas.

  7. Para Other parameters (Outros parâmetros):

    • Em Comment (Comentário), digite as informações sobre esse comando.

    • Em Timeout (seconds) (Tempo limite [segundos]), especifique o número de segundos para o sistema aguardar até a falha de execução do comando total.

  8. Para Rate control (Controle de taxa):

    • Em Concurrency (Concorrência), especifique um número ou uma porcentagem de nós gerenciados nos quais executar o comando ao mesmo tempo.

      nota

      Se você selecionou destinos especificando tags aplicadas a instâncias a nós gerenciados ou especificando grupos de recursos da AWS, e não tiver certeza de quantas instâncias são direcionadas, restrinja o número de instâncias que poderão executar o documento ao mesmo tempo, especificando uma porcentagem.

    • Em Error threshold (Limite de erro), especifique quando parar de executar o comando em outros nós depois de falhar em alguns ou em uma porcentagem de nós. Por exemplo, se você especificar três erros, o Systems Manager deixará de enviar o comando quando o 4° erro for recebido. Os nós gerenciados que continuam processando o comando também podem enviar erros.

  9. (Opcional) Em Output options (Opções de saída), para salvar a saída do comando em um arquivo, selecione a caixa Write command output to an S3 bucket (Gravar saída do comando em um bucket do S3). Digite os nomes de bucket e prefixo (pastas) nas caixas de texto.

    nota

    As permissões do S3 que concedem a possibilidade de gravar os dados em um bucket do S3 são as do perfil de instância (para instâncias do EC2) ou perfil de serviço do IAM (máquinas ativadas para ambientes híbridos) atribuído à instância, e não as do usuário do IAM que realiza essa tarefa. Para obter mais informações, consulte Configurar permissões de instância obrigatórias para o Systems Manager ou Criar um perfil de serviço do IAM para um ambiente híbrido. Além disso, se o bucket do S3 especificado estiver em uma conta da Conta da AWS diferente, verifique se o perfil da instância ou a função de serviço do IAM associado ao nó gerenciado tenha as permissões necessárias para gravar nesse bucket.

  10. Na seção SNS notifications (Notificações do SNS), se quiser enviar notificações sobre o status da execução do comando, marque a caixa de seleção Enable SNS notifications (Habilitar notificações do SNS).

    Para obter mais informações sobre a configuração de notificações do Amazon SNS para o Run Command, consulte Monitorar alterações de status do Systems Manager usando as notificações do Amazon SNS.

  11. Escolha Executar.

  12. Na página Command ID (ID do comando), na área Targets and outputs (Destinos e saídas), selecione o botão ao lado do ID de um nó em que você executou o comando e escolha View output (Exibir saída). Verifique se a saída do comando é o valor fornecido para o parâmetro, como This is my first parameter.

Executar um parâmetro (AWS CLI)

Exemplo 1: comando simples

O comando de exemplo a seguir inclui um parâmetro do Systems Manager chamado DNS-IP. O valor desse parâmetro é simplesmente o endereço IP de um nó. Esse exemplo usa um comando da AWS Command Line Interface (AWS CLI) para fazer ecoar o valor do parâmetro.

Linux & macOS
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters "commands='echo {{ssm:DNS-IP}}'" \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands='echo {{ssm:DNS-IP}}'" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2

O comando retorna informações como as seguintes.

{
    "Command": {
        "CommandId": "c70a4671-8098-42da-b885-89716EXAMPLE",
        "DocumentName": "AWS-RunShellScript",
        "DocumentVersion": "1",
        "Comment": "",
        "ExpiresAfter": "2023-12-26T15:19:17.771000-05:00",
        "Parameters": {
            "commands": [
                "echo {{ssm:DNS-IP}}"
            ]
        },
        "InstanceIds": [],
        "Targets": [
            {
                "Key": "instanceids",
                "Values": [
                    "i-02573cafcfEXAMPLE"
                ]
            }
        ],
        "RequestedDateTime": "2023-12-26T14:09:17.771000-05:00",
        "Status": "Pending",
        "StatusDetails": "Pending",
        "OutputS3Region": "us-east-2",
        "OutputS3BucketName": "",
        "OutputS3KeyPrefix": "",
        "MaxConcurrency": "50",
        "MaxErrors": "0",
        "TargetCount": 0,
        "CompletedCount": 0,
        "ErrorCount": 0,
        "DeliveryTimedOutCount": 0,
        "ServiceRole": "",
        "NotificationConfig": {
            "NotificationArn": "",
            "NotificationEvents": [],
            "NotificationType": ""
        },
        "CloudWatchOutputConfig": {
            "CloudWatchLogGroupName": "",
            "CloudWatchOutputEnabled": false
        },
        "TimeoutSeconds": 600,
        "AlarmConfiguration": {
            "IgnorePollAlarmFailure": false,
            "Alarms": []
        },
        "TriggeredAlarms": []
    }
}

Depois que a execução de um comando for concluída, você poderá ver mais informações sobre ele usando os seguintes comandos:

Exemplo 2: descriptografar um valor de parâmetro SecureString

O próximo comando de exemplo usa um parâmetro SecureString chamado SecurePassword. O comando usado no campo parameters recupera e descriptografa o valor do parâmetro SecureString e redefine a senha do administrador local sem a necessidade de transmitir a senha em texto simples.

Linux
aws ssm send-command \ --document-name "AWS-RunShellScript" \ --document-version "1" \ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" \ --parameters '{"commands":["secure=$(aws ssm get-parameters --names SecurePassword --with-decryption --query Parameters[0].Value --output text --region us-east-2)","echo $secure | passwd myuser --stdin"]}' \ --timeout-seconds 600 \ --max-concurrency "50" \ --max-errors "0" \ --region us-east-2
Windows
aws ssm send-command ^ --document-name "AWS-RunPowerShellScript" ^ --document-version "1" ^ --targets "Key=instanceids,Values=i-02573cafcfEXAMPLE" ^ --parameters "commands=['$secure = (Get-SSMParameterValue -Names SecurePassword -WithDecryption $True).Parameters[0].Value','net user administrator $secure']" ^ --timeout-seconds 600 ^ --max-concurrency "50" ^ --max-errors "0" ^ --region us-east-2

Exemplo 3: referenciar um parâmetro em um documento do SSM

Você também pode fazer referência a parâmetros do Systems Manager na seção Parameters de um documento do SSM, conforme mostrado no exemplo a seguir.

{ "schemaVersion":"2.0", "description":"Sample version 2.0 document v2", "parameters":{ "commands" : { "type": "StringList", "default": ["{{ssm:parameter-name}}"] } }, "mainSteps":[ { "action":"aws:runShellScript", "name":"runShellScript", "inputs":{ "runCommand": "{{commands}}" } } ] }

Não confunda a sintaxe semelhante de parâmetros locais usada na seção runtimeConfig de documentos do SSM com parâmetros do Parameter Store. Um parâmetro local não é o mesmo que um parâmetro do Systems Manager. Você pode distinguir parâmetros locais de parâmetros do Systems Manager pela ausência do prefixo ssm:.

"runtimeConfig":{ "aws:runShellScript":{ "properties":[ { "id":"0.aws:runShellScript", "runCommand":"{{ commands }}", "workingDirectory":"{{ workingDirectory }}", "timeoutSeconds":"{{ executionTimeout }}"
nota

No momento, os documentos do SSM não são compatíveis com referências a parâmetros de SecureString. Isso significa que, para usar parâmetros de SecureString com, por exemplo, o Run Command, você precisa recuperar o valor do parâmetro antes de transmiti-lo para Run Command, como mostram os exemplos a seguir:

Linux & macOS
value=$(aws ssm get-parameters --names parameter-name --with-decryption)
aws ssm send-command \ --name AWS-JoinDomain \ --parameters password=$value \ --instance-id instance-id
Windows
aws ssm send-command ^ --name AWS-JoinDomain ^ --parameters password=$value ^ --instance-id instance-id
Powershell
$secure = (Get-SSMParameterValue -Names parameter-name -WithDecryption $True).Parameters[0].Value | ConvertTo-SecureString -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential -argumentlist user-name,$secure