

• 2026 年 4 月 30 日之後將不再提供 AWS Systems Manager CloudWatch Dashboard。客戶可以繼續使用 Amazon CloudWatch 主控台來檢視、建立和管理其 Amazon CloudWatch 儀表板，就像現在一樣。如需詳細資訊，請參閱 [Amazon CloudWatch Dashboard 文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 對參數處理問題進行疑難排解
<a name="parameter-troubleshooting"></a>

## 常見的參數處理問題
<a name="common-parameter-issues"></a>

**執行期間無法使用的環境變數**  
**問題：**由於找不到環境變數 (`SSM_parameter-name`)，命令失敗。  
**可能原因：**  
+ SSM Agent 版本不支援環境變數插補
+ `interpolationType` 未設定為 `ENV_VAR`
+ 參數名稱不符合預期的環境變數名稱
**解決方案**：  
+ 驗證 SSM Agent 版本是否為 3.3.2746.0 或更新版本
+ 新增舊版 Agent 的備用邏輯：

  ```
  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"
  ```

## 參數驗證技巧
<a name="parameter-validation"></a>

使用以下技巧來驗證參數處理：

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
   ```

1. 驗證參數模式：

   ```
   parameters:
     myParameter:
       type: String
       allowedPattern: "^[a-zA-Z0-9_-]+$"
       description: "Test this pattern with sample inputs"
   ```

1. 包含錯誤處理：

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