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_
) não foram encontradas.parameter-name
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 comoENV_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:
-
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
-
Verifique os padrões dos parâmetros:
parameters: myParameter: type: String allowedPattern: "^[a-zA-Z0-9_-]+$" description: "Test this pattern with sample inputs"
-
Inclua o tratamento de erros:
if [[ ! "$SSM_parameter" =~ ^[a-zA-Z0-9_-]+$ ]]; then echo "Parameter validation failed" exit 1 fi