

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

# 安全部署更新的最佳實務
<a name="updating-best-practice"></a>

 Amazon Linux 2023 (AL2023) 具有多種功能，旨在協助安全地部署作業系統更新，並能夠了解更新之間的變更，並視需要輕鬆還原至較舊的版本。本節探討 AWS 自使用 Amazon Linux 十多年的內部和外部經驗中學到的經驗。

**警告**  
 執行`dnf --releasever=latest update`不是最佳實務，而且可能會導致作業系統更新先在生產環境中進行測試。  
 使用特定的 AL2023 發行版本`latest`，而不是使用 。這可確保您在生產執行個體之間部署與先前測試相同的變更。例如， `dnf --releasever=2023.11.20260427 update` 一律會更新至 2023.11.20260427 版本。  
 如需詳細資訊，請參閱《[AL2023 使用者指南》中的更新](https://docs.aws.amazon.com/linux/al2023/ug/updating.html) [AL2023 ](https://docs.aws.amazon.com/linux/al2023/ug/)一節。

 如果不規劃作業系統更新的部署安全性，應用程式/服務與作業系統更新之間非預期的負面互動的影響可能會明顯更大，甚至包括總中斷。如同任何軟體問題，越早偵測到問題，它對最終使用者的影響就越小。

 重要的是不要陷入相信兩個基本上不真實的陷阱：

1. 作業系統廠商絕不會在更新作業系統時發生錯誤。

1. 您倚賴之作業系統的特定行為或界面符合作業系統廠商會認為倚賴之行為和界面。

   即作業系統廠商和您同意更新發生問題。

 請勿依賴良好的意圖，將系統置於適當位置，以確保部署安全*包含*作業系統的任何更新。

 不建議透過部署到生產環境來測試新的作業系統更新。最佳實務是將作業系統視為部署的另一個部分，並考慮將您認為適合任何其他變更的相同部署安全機制套用至生產環境。

 最佳實務是在部署到生產系統之前測試任何和所有作業系統更新。部署時，建議使用結合良好監控的暫存推展。分階段推展可確保如果發生問題，即使不是立即發生，影響也會限制在機群的子集，並且可以停止進一步部署更新，同時可以進行進一步的調查和緩解。

 對作業系統進行更新的任何負面影響的緩解通常是首要任務，然後解決問題，無論問題在哪裡。在引進作業系統更新與負面影響相關的情況下，還原至先前已知良好版本的作業系統是功能強大的工具。

 Amazon Linux 2023 推出 [透過版本控制的儲存庫進行確定性升級](deterministic-upgrades.md)，這是功能強大的新功能，可確保作業系統版本 （或個別套件） 的任何變更都是可重複的。因此，如果在從某個作業系統版本移至下一個版本時遇到問題，則可以輕鬆地使用機制來粘附到已知工作中的作業系統版本，同時了解如何解決問題。

 使用 AL2023 時，每當我們發行新的套件更新時，都有要鎖定的新版本，以及鎖定到該版本的新 AMIs。[AL2023 版本備註](https://docs.aws.amazon.com/linux/al2023/release-notes/)涵蓋每個版本中的變更，並[AL2023 的 Amazon Linux 安全建議](alas.md)涵蓋套件更新中解決的安全性問題。

 例如，如果您受到 [2023.6.20241028](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241028.html) 版本中存在的問題影響，您可以立即還原為使用先前版本的 AMIs 和容器映像 [2023.6.20241010。](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241010.html)在此情況下，在後續 [2023.6.20241031 ](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241031.html)版本中修正了套件中的錯誤，但任何受影響的[透過版本控制的儲存庫進行確定性升級](deterministic-upgrades.md)人都可以*立即*採取簡單的動作來緩解：只要使用先前的映像即可。

 [透過版本控制的儲存庫進行確定性升級](deterministic-upgrades.md) 也保證任何進行中的作業系統更新部署，無論是就地部署，還是啟動新的 AMIs 或容器映像，都不會受到後續發行的作業系統更新的影響。

 在我們的第一個範例中，機群 A 是一個大型機群，在 [2023.5.20241001](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20241001.html) 版本推出時，透過將更新從 [2023.6.20241010](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241010.html) 部署到 [2023.6.20241028 ](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241028.html)版本進行一半。 [透過版本控制的儲存庫進行確定性升級](deterministic-upgrades.md)表示機群 A 的部署會繼續，而不會對其套用的更新進行任何變更。

 波浪型或階段型部署策略的用途，例如先部署到 1% 的機群，然後 5%、10%、20%、40%，直到達到 100%，才能夠以有限的方式測試變更，然後再推出。這種類型的部署策略通常被視為部署任何生產變更的最佳實務。

 透過以波動為基礎的部署策略和機群 [2023.6.20241010](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241010.html) 的更新處於一次部署到許多主機的階段，由於使用 ，[2023.6.20241028](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241028.html) 發佈的事實*不會影響進行中的部署*[透過版本控制的儲存庫進行確定性升級](deterministic-upgrades.md)。

 如果機群 B 執行的是較舊的版本，例如 [2023.5.20240708](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20240708.html)，並已開始將更新部署至 [2023.6.20241028](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241028.html)，且機群 B 受到該版本的問題影響，則會在部署初期注意到此問題。此時，可以決定是否暫停任何推展，直到該問題的修正可用，或者如果同時開始部署相同的版本機群 A 正在執行，則為 [2023.6.20241010](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241010.html)，以便機群 B 在 [2023.5.20240708](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20240708.html) 和 [2023.6.20241010](https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241010.html) 之間取得所有更新。

 請務必注意，*未*及時進行作業系統更新可能會導致問題。新的更新可能包含可能與您的環境相關的錯誤和安全性修正。如需詳細資訊，請參閱[Amazon Linux 2023 的安全與合規](security.md)及[在 AL2023 中管理套件和作業系統更新](managing-repos-os-updates.md)。

 請務必將部署系統設定為能夠輕鬆進行新的作業系統更新、在部署至生產環境之前進行測試，以及使用波型部署等機制，將任何負面影響降至最低。為了減輕作業系統更新的任何負面影響，請務必了解如何讓您的部署系統指向先前已知良好的作業系統版本，一旦問題解決，就不會再鎖定至較舊的已知良好的版本，而是改用新的已知良好的版本。

## 準備次要更新
<a name="prepare-for-minor-updates"></a>

 準備較小的作業系統更新，例如新的 AL2023 點版本，其用途僅限於不費吹灰之力。請務必閱讀 [AL2023 版本備註](https://docs.aws.amazon.com/linux/al2023/release-notes/)，了解任何即將進行的變更。

 即將結束[的套件支援期間](https://docs.aws.amazon.com/linux/al2023/release-notes/support-info-by-support-statement.html)可能涉及移至較新版本的語言執行時間 （例如使用 [AL2023 中的 PHP](php.md))。最佳實務是在支援期間結束之前，輕鬆移至新的語言執行時間版本，事先為此做好準備。

 對於 等套件[`pcre` 第 1 版](deprecated-al2023.md#deprecated-pcre)，也有機會事先規劃並將任何程式碼遷移至其替換，在這種情況下，其為第 2 `pcre`版。最佳實務是盡快這樣做，以允許任何挫折的時間。

 如果沒有直接取代，例如使用 [Berkeley 資料庫 (`libdb`)](deprecated-al2023.md#deprecated-bdb)，您可能需要根據您的使用案例做出選擇。

## 準備重大更新
<a name="prepare-for-major-updates"></a>

 更新至作業系統的新主要版本幾乎會普遍被視為需要規劃、努力適應變更或棄用的功能，以及在部署之前進行測試。能夠更遞增地準備下一個主要版本的 Amazon Linux 2023 並不罕見，例如在繼續移至下一個主要版本之前，處理任何已棄用或已移除的功能。

 例如，從 AL2 移至 AL2023 時，讀取 [AL2 中的功能已棄用，並在 AL2023 中移除](deprecated-al2.md)區段可能會導致數個安全且小的步驟，這可能會在仍然使用 AL2 準備 AL2023 時發生。例如，任何[Python 2.7 已替換為 Python 3](python2.7-no-more.md)用量 （作業系統使用之外，例如`yum`套件管理員中的 ) 都可以遷移至 Python 3，以準備使用 [AL2023 中的 Python](python.md)。如果使用 [PHP](php.md)，則 AL2 （透過 PHP 8.2 [AL2 Extra](https://docs.aws.amazon.com/linux/al2/ug/al2-extras.html)) 和 AL2023 都隨附 PHP 8.2，因此 PHP 版本遷移和作業系統遷移不必同時發生。

 使用 AL2023 時，也可以立即準備下一個主要版本的 Amazon Linux 2023，同時使用 AL2023。[在 AL2023 中已棄用](deprecated-al2023.md) 本節涵蓋在 AL2023 中已棄用且由於移除而淘汰的功能和套件。

 例如，遷移任何剩餘的[System V init (`sysvinit`)](deprecated-al2023.md#deprecated-sysv-init)使用，例如`init`指令碼到其`systemd`對等項目，將讓您為未來做好準備，並允許您使用完整的`systemd`功能來監控服務、如何及是否重新啟動服務、它需要哪些其他服務，以及是否應套用任何資源或許可限制。

 對於 32 位元支援等功能，棄用可以跨越作業系統的多個主要版本。對於 32 位元，Amazon Linux 1 (AL1) 已棄用 [32 位元 x86 (i686) AMIs](deprecated-al1.md#deprecated-32bit-amis)、Amazon Linux 2 已棄用 [32 位元 x86 (i686) 套件](deprecated-al2.md#deprecated-32bit-rpms)和 Amazon Linux 2023 已棄用 [32 位元 x86 (i686) 執行時間支援](deprecated-al2023.md#deprecated-32bit)。從 轉換[IMDSv1](deprecated-al2023.md#deprecated-imdsv1)也跨越作業系統的多個主要版本。對於這些類型的變更，我們了解某些客戶需要更長的時間來適應這些變更，因此在 Amazon Linux 2023 中不再提供此功能之前，會有大量的關聯。

 已棄用的功能清單會在作業系統的生命週期內更新，建議您隨時掌握其變更。