参数处理问题的疑难解答 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

参数处理问题的疑难解答

常见参数处理问题

执行期间环境变量不可用

问题:找不到环境变量 (SSM_parameter-name),命令失败。

可能的原因:

  • SSM Agent 版本不支持环境变量插值

  • interpolationType 未设置为 ENV_VAR

  • 参数名称与预期的环境变量名称不匹配

解决方案:

  • 验证 SSM Agent 版本是否为 3.3.2746.0 或更高

  • 为旧版代理添加回退逻辑:

    if [ -z "${SSM_parameterName+x}" ]; then export SSM_parameterName="{{parameterName}}" fi
参数值包含特殊字符

问题:参数值包含空格、引号或其他特殊字符时会导致命令失败。

解决方案:

  • 引用环境变量时,请使用正确的引号:

    # Correct echo "$SSM_parameter-name" # Incorrect echo $SSM_parameter-name
  • 添加输入验证,使用 allowedPattern 来限制特殊字符

跨平台行为不一致

问题:在 Linux 和 Windows Server 系统中,参数处理方式有所不同。

解决方案:

  • 请使用特定平台的环境变量语法:

    # PowerShell $env:SSM_parameter-name # Bash $SSM_parameter-name
  • 在文档中使用特定平台的前提条件检查

参数值未正确转义

问题:尽管使用了环境变量插值,但仍存在命令注入的漏洞。

解决方案:

  • 在命令中包含参数值时,务必使用正确的转义:

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

参数验证提示

使用这些方法验证参数处理:

  1. 测试环境变量的可用性:

    #!/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. 验证参数模式:

    parameters: myParameter: type: String allowedPattern: "^[a-zA-Z0-9_-]+$" description: "Test this pattern with sample inputs"
  3. 包含错误处理:

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