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

Amazon Systems Manager Change Manager 不再向新客户开放。现有客户可以继续正常使用该服务。有关更多信息,请参阅 Amazon Systems Manager Change Manager 可用性变更

参数处理问题的疑难解答

常见参数处理问题

执行期间环境变量不可用

问题:找不到环境变量 (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