

• 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="aws-runpatchbaselinewithhooks-tutorial"></a>

在許多情況下，受管節點必須在使用最新的軟體更新修補後重新啟動。不過，在沒有保護措施的生產環境中重新啟動節點，可能會導致數個問題，例如叫用警示、記錄不正確的指標資料，以及中斷資料同步。

此教學課程會示範如何透過使用 AWS Systems Manager 文件 (SSM 文件) `AWS-RunPatchBaselineWithHooks` 達成完成了以下項目的複雜、多步驟修補操作，以避免類似問題：

1. 防止新連線至應用程式

1. 安裝作業系統的更新。

1. 更新應用程式的套件相依性

1. 重新啟動系統

1. 執行應用程式特定的運作狀態檢查

在此範例中，以這種方式設定了基礎設施：
+ 目標虛擬機器會透過 Systems Manager 註冊為受管節點。
+ `Iptables` 會用作本機防火牆。
+ 受管節點上託管的應用程式正在連接埠 443 上執行。
+ 受管節點上託管的應用程式是 `nodeJS` 應用程式。
+ 受管節點上託管的應用程式由 pm2 程序管理工具管理。
+ 應用程式已經有指定的運作狀態檢查端點。
+ 應用程式的運作狀態檢查端點不需要最終使用者身分驗證。端點允許執行符合組織建立可用性需求的運作狀態檢查。(在您的環境中，完全可以簡單地確定 `nodeJS` 應用程式正在執行，並能夠監聽請求。在其他情形下，您可能還想要驗證快取層或資料庫層的連線是否已經建立)。

本教學課程中的範例僅供示範之用，並不代表在生產環境中以原樣實作。另外，請記住，具有 `AWS-RunPatchBaselineWithHooks` 文件的 Patch Manager lifecycle hook 功能 (Systems Manager 中的工具)，可以支援許多其他案例。以下是數個範例。
+ 受管節點重新啟動之後，在修補和重新啟動之前，停止指標報告代理程式。
+ 修補之前將受管節點從 CRM 或 PCS 叢集分開，並在節點重新啟動之後重新連接。
+ 作業系統 (OS) 更新套用之後，但在受管節點重新開機之前，在 Windows Server 機器上更新第三方軟體 (例如，Java、Tomcat、Adobe 應用程式等)。

**更新應用程式相依性、修補受管節點，以及執行應用程式特定的運作狀態檢查**

1. 使用下列內容建立預先安裝指令碼的 SSM 文件，並命名為 `NodeJSAppPrePatch`。使用應用程式的名稱取代 *your\$1application*。

   此指令碼會立即封鎖新的傳入請求，並在開始修補操作之前提供五秒鐘，讓已處於作用中狀態的請求完成。對於 `sleep` 選項，指定的秒數要大於完成傳入請求通常所需的秒數。

   ```
   # exit on error
   set -e
   # set up rule to block incoming traffic
   iptables -I INPUT -j DROP -p tcp --syn --destination-port 443 || exit 1
   # wait for current connections to end. Set timeout appropriate to your application's latency
   sleep 5 
   # Stop your application
   pm2 stop your_application
   ```

   如需有關建立 SSM 文件的資訊，請參閱 [建立 SSM 文件內容](documents-creating-content.md)。

1. 為您的安裝後指令碼建立具有以下內容的另一個 SSM 文件，以更新應用程式相依性並將其命名為 `NodeJSAppPostPatch`。使用您應用程式的路徑取代 */your/application/path*。

   ```
   cd /your/application/path
   npm update 
   # you can use npm-check-updates if you want to upgrade major versions
   ```

1. 為您的 `onExit` 指令碼建立另一個 SSM 文件，其中包含下列內容，讓您的應用程式備份並執行運作狀態檢查。命名此 SSM 文件 `NodeJSAppOnExitPatch`。使用應用程式的名稱取代 *your\$1application*。

   ```
   # exit on error
   set -e
   # restart nodeJs application
   pm2 start your_application
   # sleep while your application starts and to allow for a crash
   sleep 10
   # check with pm2 to see if your application is running
   pm2 pid your_application
   # re-enable incoming connections
   iptables -D INPUT -j DROP -p tcp --syn --destination-port 
   # perform health check
   /usr/bin/curl -m 10 -vk -A "" http://localhost:443/health-check || exit 1
   ```

1. 在 State Manager ( AWS Systems Manager中的工具) 中建立關聯，以執行下列步驟來核發操作：

   1. 在 https：//[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 開啟 AWS Systems Manager 主控台。

   1. 在導覽窗格中，選擇 **State Manager**，然後選擇 **Create association (建立關聯)**。

   1. 對於 **Name** (名稱)，請提供名稱以協助識別關聯的目的。

   1. 在 **Document** (文件) 清單中，請選擇 `AWS-RunPatchBaselineWithHooks`。

   1. 針對 **Operation** (操作)，選擇 **Install** (安裝)。

   1. (選用) 對於 **Snapshot Id** (快照 ID)，提供您產生的 GUID，以協助加速操作並確保一致性。GUID 值可以像 `00000000-0000-0000-0000-111122223333` 一樣簡單。

   1. 對於 **Pre Install Hook Doc Name** (安裝前掛鉤文件名稱)，請輸入 `NodeJSAppPrePatch`。

   1. 對於 **Post Install Hook Doc Name** (安裝後掛鉤文件名稱)，請輸入 `NodeJSAppPostPatch`。

   1. 對於 **On ExitHook Doc Name** (結束時掛鉤文件名稱)，請輸入 `NodeJSAppOnExitPatch`。

1. 對於 **Targets** (目標)，透過指定標籤、手動選擇節點、選擇資源群組或選擇所有受管節點來識別您的受管節點。

1. 對於 **Specify schedule** (指定排程)，請指定執行關聯的頻率。對於受管節點修補，每週一次是常見頻率。

1. 在 **Rate control** (速率控制) 區段中，選擇選項來控制關聯在多個受管節點上的執行方式。確保一次僅更新部分受管節點。否則，您的所有或大部分機群都可能立即離線。如需使用速率控制的詳細資訊，請參閱[了解 State Manager 關聯中的目標和速率控制](systems-manager-state-manager-targets-and-rate-controls.md)。

1. (選用) 針對**輸出選項**，若要將命令輸出儲存至檔案，請選取**啟用將輸出寫入 S3** 方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。
**注意**  
授予能力以將資料寫入至 S3 儲存貯體的 S3 許可，會是指派給受管節點之執行個體設定檔的許可，而不是執行此任務之 IAM 使用者的許可。如需詳細資訊，請參閱[設定 Systems Manager 所需的執行個體許可](setup-instance-permissions.md)或[建立混合環境的 IAM 服務角色](hybrid-multicloud-service-role.md)。此外，若指定的 S3 儲存貯體位於不同的 AWS 帳戶內，請驗證與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。

1. 選擇 **Create Association (建立關聯)**。