本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:使用主控台更新應用程式相依性、修補受管節點,以及執行應用程式特定的運作狀態檢查
在許多情況下,受管節點必須在使用最新的軟體更新修補後重新啟動。不過,在沒有保護措施的生產環境中重新啟動節點,可能會導致數個問題,例如叫用警示、記錄不正確的指標資料,以及中斷資料同步。
此教學課程會示範如何透過使用 AWS Systems Manager
文件 (SSM 文件) AWS-RunPatchBaselineWithHooks 達成完成了以下項目的複雜、多步驟修補操作,以避免類似問題:
-
防止新連線至應用程式
-
安裝作業系統的更新。
-
更新應用程式的套件相依性
-
重新啟動系統
-
執行應用程式特定的運作狀態檢查
在此範例中,以這種方式設定了基礎設施:
-
目標虛擬機器會透過 Systems Manager 註冊為受管節點。
-
Iptables會用作本機防火牆。 -
受管節點上託管的應用程式正在連接埠 443 上執行。
-
受管節點上託管的應用程式是
nodeJS應用程式。 -
受管節點上託管的應用程式由 pm2 程序管理工具管理。
-
應用程式已經有指定的運作狀態檢查端點。
-
應用程式的運作狀態檢查端點不需要最終使用者身分驗證。端點允許執行符合組織建立可用性需求的運作狀態檢查。(在您的環境中,完全可以簡單地確定
nodeJS應用程式正在執行,並能夠監聽請求。在其他情形下,您可能還想要驗證快取層或資料庫層的連線是否已經建立)。
本教學課程中的範例僅供示範之用,並不代表在生產環境中以原樣實作。另外,請記住,具有 AWS-RunPatchBaselineWithHooks 文件的 Patch Manager lifecycle hook 功能 (Systems Manager 中的工具),可以支援許多其他案例。以下是數個範例。
-
受管節點重新啟動之後,在修補和重新啟動之前,停止指標報告代理程式。
-
修補之前將受管節點從 CRM 或 PCS 叢集分開,並在節點重新啟動之後重新連接。
-
作業系統 (OS) 更新套用之後,但在受管節點重新開機之前,在 Windows Server 機器上更新第三方軟體 (例如,Java、Tomcat、Adobe 應用程式等)。
更新應用程式相依性、修補受管節點,以及執行應用程式特定的運作狀態檢查
-
使用下列內容建立預先安裝指令碼的 SSM 文件,並命名為
NodeJSAppPrePatch。使用應用程式的名稱取代your_application。此指令碼會立即封鎖新的傳入請求,並在開始修補操作之前提供五秒鐘,讓已處於作用中狀態的請求完成。對於
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 stopyour_application如需有關建立 SSM 文件的資訊,請參閱 建立 SSM 文件內容。
-
為您的安裝後指令碼建立具有以下內容的另一個 SSM 文件,以更新應用程式相依性並將其命名為
NodeJSAppPostPatch。使用您應用程式的路徑取代/your/application/path。cd/your/application/pathnpm update # you can use npm-check-updates if you want to upgrade major versions -
為您的
onExit指令碼建立另一個 SSM 文件,其中包含下列內容,讓您的應用程式備份並執行運作狀態檢查。命名此 SSM 文件NodeJSAppOnExitPatch。使用應用程式的名稱取代your_application。# exit on error set -e # restart nodeJs application pm2 startyour_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 pidyour_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 -
在 State Manager ( AWS Systems Manager中的工具) 中建立關聯,以執行下列步驟來核發操作:
在 https://https://console.aws.amazon.com/systems-manager/
開啟 AWS Systems Manager 主控台。 -
在導覽窗格中,選擇 State Manager,然後選擇 Create association (建立關聯)。
-
對於 Name (名稱),請提供名稱以協助識別關聯的目的。
-
在 Document (文件) 清單中,請選擇
AWS-RunPatchBaselineWithHooks。 -
針對 Operation (操作),選擇 Install (安裝)。
-
(選用) 對於 Snapshot Id (快照 ID),提供您產生的 GUID,以協助加速操作並確保一致性。GUID 值可以像
00000000-0000-0000-0000-111122223333一樣簡單。 -
對於 Pre Install Hook Doc Name (安裝前掛鉤文件名稱),請輸入
NodeJSAppPrePatch。 -
對於 Post Install Hook Doc Name (安裝後掛鉤文件名稱),請輸入
NodeJSAppPostPatch。 -
對於 On ExitHook Doc Name (結束時掛鉤文件名稱),請輸入
NodeJSAppOnExitPatch。
-
對於 Targets (目標),透過指定標籤、手動選擇節點、選擇資源群組或選擇所有受管節點來識別您的受管節點。
-
對於 Specify schedule (指定排程),請指定執行關聯的頻率。對於受管節點修補,每週一次是常見頻率。
-
在 Rate control (速率控制) 區段中,選擇選項來控制關聯在多個受管節點上的執行方式。確保一次僅更新部分受管節點。否則,您的所有或大部分機群都可能立即離線。如需使用速率控制的詳細資訊,請參閱了解 State Manager 關聯中的目標和速率控制。
(選用) 針對輸出選項,若要將命令輸出儲存至檔案,請選取啟用將輸出寫入 S3 方塊。在方塊中輸入儲存貯體和字首 (資料夾) 名稱。
注意
授予能力以將資料寫入至 S3 儲存貯體的 S3 許可,會是指派給受管節點之執行個體設定檔的許可,而不是執行此任務之 IAM 使用者的許可。如需詳細資訊,請參閱設定 Systems Manager 所需的執行個體許可或建立混合環境的 IAM 服務角色。此外,若指定的 S3 儲存貯體位於不同的 AWS 帳戶內,請驗證與受管節點相關聯的執行個體設定檔或 IAM 服務角色是否具有寫入該儲存貯體的必要許可。
-
選擇 Create Association (建立關聯)。