Solução de problemas de tratamento de parâmetros - AWS Systems Manager

AWS Systems Manager Change Manager não está mais aberto a novos clientes. Os clientes atuais podem continuar usando o serviço normalmente. Para obter mais informações, consulte mudança de disponibilidade do AWS Systems Manager Change Manager.

Solução de problemas de tratamento de parâmetros

Problemas comuns de tratamento de parâmetros

Variáveis de ambiente não disponíveis durante a execução

Problema: os comandos falham porque as variáveis de ambiente (SSM_parameter-name) não foram encontradas.

Causas possíveis:

  • A versão do SSM Agent não é compatível com a interpolação de variáveis de ambiente

  • interpolationType não está definido como ENV_VAR

  • O nome do parâmetro não corresponde ao nome da variável de ambiente esperada

Solução:

  • Verifique se a versão do SSM Agent é 3.3.2746.0 ou posterior

  • Adicione uma lógica de fallback para as versões mais antigas do agente:

    if [ -z "${SSM_parameterName+x}" ]; then export SSM_parameterName="{{parameterName}}" fi
Valores de parâmetros com caracteres especiais

Problema: os comandos falham quando os valores dos parâmetros contêm espaços, aspas ou outros caracteres especiais.

Solução:

  • Use as aspas adequadas ao referenciar variáveis de ambiente:

    # Correct echo "$SSM_parameter-name" # Incorrect echo $SSM_parameter-name
  • Adicione validação de entrada usando allowedPattern para restringir caracteres especiais

Comportamento inconsistente entre plataformas

Problema: o tratamento de parâmetros funciona de forma diferente nos sistemas Linux e Windows Server.

Solução:

  • Use a sintaxe da variável de ambiente específica da plataforma:

    # PowerShell $env:SSM_parameter-name # Bash $SSM_parameter-name
  • Use verificações de pré-condições específicas da plataforma em seu documento

Valores dos parâmetros não foram devidamente escapados

Problema: vulnerabilidades de injeção de comando, apesar de usar a interpolação de variáveis de ambiente.

Solução:

  • Sempre use o escape adequado ao incluir valores de parâmetros nos comandos:

    # Correct mysql_command="mysql -u \"$SSM_username\" -p\"$SSM_password\"" # Incorrect mysql_command="mysql -u $SSM_username -p$SSM_password"

Dicas de validação de parâmetros

Use estas técnicas para validar o tratamento de parâmetros:

  1. Verifique a disponibilidade de variáveis de ambiente:

    #!/bin/bash # Print all SSM_ environment variables env | grep ^SSM_ # Test specific parameter if [ -n "$SSM_parameter" ]; then echo "Parameter is available" else echo "Parameter is not available" fi
  2. Verifique os padrões dos parâmetros:

    parameters: myParameter: type: String allowedPattern: "^[a-zA-Z0-9_-]+$" description: "Test this pattern with sample inputs"
  3. Inclua o tratamento de erros:

    if [[ ! "$SSM_parameter" =~ ^[a-zA-Z0-9_-]+$ ]]; then echo "Parameter validation failed" exit 1 fi