本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon Linux 2023 (AL2023) 具有多项功能,旨在帮助安全地将更新部署到操作系统,并能够知道两次更新之间发生了哪些变化,并在必要时轻松恢复到旧版本。本节探讨了 AWS 从十多年内部和外部使用 Amazon Linux 中吸取的经验教训。
警告
运行dnf --releasever=latest update
不是最佳实践,很可能会导致操作系统更新首先在生产环境中进行测试。
与其使用latest
,不如使用特定的 AL2 023 发行版。这样可以确保您在生产实例中部署的更改与之前测试的相同。例如,dnf --releasever=2023.7.20250331 update
将始终更新到 2023.7.20250331 版本。
有关更多信息,请参阅《 AL2023 用户指南》中的 “更新 AL2 023” 部分。
如果不对操作系统更新的部署安全性进行规划,则应用程序/服务与操作系统更新之间意外负面交互的影响可能会大得多,包括完全中断。与任何软件问题一样,越早发现问题,对最终用户的影响就越小。
重要的是不要陷入相信两件根本不正确的事情的陷阱:
操作系统供应商在更新操作系统时绝不会犯错误。
您所依赖的操作系统的具体行为或接口与操作系统供应商认为值得依赖的行为和接口相匹配。
也就是说,操作系统供应商和您都同意更新存在问题。
不要依赖良好的意图,应将系统部署到位,以确保部署安全包括对操作系统的任何更新。
不建议通过部署到生产环境来测试新的操作系统更新。最佳做法是将操作系统视为部署的另一部分,并考虑应用您认为适用于生产环境的任何其他更改的相同部署安全机制。
在部署到生产系统之前,最好先测试所有操作系统更新。部署时,建议将分阶段部署与良好的监控相结合。分阶段部署可以确保在出现问题(即使不是立即出现的)时,影响也仅限于队列的子集,并且可以停止更新的进一步部署,同时可以进行进一步的调查和缓解措施。
减轻更新操作系统带来的任何负面影响通常是第一要务,其次是解决问题,无论问题在哪里。如果引入操作系统更新与负面影响相关,那么恢复到先前已知良好的操作系统版本的能力是一个强大的工具。
Amazon Linux 2023 推出通过版本控制的存储库进行确定性升级了一项强大的新功能,可确保操作系统版本(或单个软件包)的任何更改都是可重复的。因此,如果在从一个操作系统版本转移到下一个操作系统版本时遇到问题,则在研究如何解决问题的同时,有一些易于使用的机制可以坚持使用已知有效的操作系统版本。
在 AL2 023 中,每当我们发布新的软件包更新时,都会有一个新版本需要锁定,而新 AMIs 版本则锁定到该版本。AL2023 发行说明涵盖了每个版本中的更改,并2023 年的亚马逊 Linux 安全公 AL2告涵盖了软件包更新中解决的安全问题。
例如,如果您受到 2023.6. 20241028 版本中存在的问题的影响,则可以立即恢复使用先前版本 2023.6.20241010 的 AMIs 和容器镜像。在这种情况下,软件包中存在一个错误,该错误已在随后的 2023.6.20241031 版本中修复,但是通过版本控制的存储库进行确定性升级对于任何受影响的人,都可以立即采取简单的措施来缓解:只需使用之前的图像即可。
通过版本控制的存储库进行确定性升级还可确保任何正在进行的操作系统更新部署,无论是就地部署还是通过启动新的映像 AMIs 或容器映像,都不会受到随后发布的操作系统更新的影响。
在我们的第一个例子中,舰队 A 是一个庞大的舰队,在 2023.6.20241028 版本发布时,从 2023.5.20241001 部署到 2023.6.20241010 版本的更新已经完成了一半。 通过版本控制的存储库进行确定性升级意味着舰队 A 的部署仍在继续,所应用的更新没有任何变化。
基于波浪或分阶段的部署策略(例如首先部署到舰队的1%,然后部署到5%、10%、20%、40%,直到达到100%)的目的是能够在扩大范围之前以有限的方式测试变更。这种部署策略通常被认为是部署任何生产变更的最佳实践。
由于采用了基于波浪的部署策略,而且 2023.6.20241010 的舰队 A 更新处于同时部署到许多主机的阶段,因此 2023.6.20241028 的发布对正在进行的部署没有影响,这要归功于使用。 通过版本控制的存储库进行确定性升级
如果舰队 B 运行的是旧版本,比如 2023.5.20240708,并已开始将更新部署到 2023.6.20241028,而舰队 B 受到该版本中问题的影响,则在部署初期就会注意到这一点。届时,可以决定是否在该问题得到修复之前暂停任何部署,或者在此期间是否开始部署队列A正在运行的相同版本,即2023.6.20241010,以便舰队B获得2023.5. 20240708和2023.6.20241010 之间的所有更新。
请务必注意,不及时更新操作系统可能会导致问题。新的更新可能包含可能与您的环境相关的错误和安全补丁。有关更多信息,请参阅Amazon Linux 2023 中的安全性与合规性和在 AL2 023 中管理软件包和操作系统更新。
重要的是要配置您的部署系统,使其能够轻松获取新的操作系统更新,在部署到生产环境之前对其进行测试,并使用基于波浪的部署等机制来最大限度地减少任何负面影响。为了能够减轻操作系统更新的任何负面影响,重要的是要知道如何使部署系统指向先前已知良好的操作系统版本,问题得到解决后,不再锁定到已知良好的旧版本,而是移至已知良好的新版本。
为次要更新做准备
为操作系统的较小更新(例如 AL2 023的新单点版本)做准备工作将仅限于零努力。请务必阅读 AL2023 发行说明,了解即将发生的任何变化。
即将结束的软件包的支持期可能涉及迁移到较新版本的语言运行时(例如 withPHP 在 AL2 023)。最佳做法是提前做好准备,在支持期结束之前轻松迁移到新的语言运行时版本。
对于诸如此类的软件包pcre 版本 1,还有机会提前计划并将您的任何代码迁移到其替代品(在本例中为pcre
版本 2)。最好的做法是尽快这样做,以便有时间应对任何挫折。
如果没有直接替换,例如使用伯克利数据库 (libdb),则可能需要根据自己的用例做出选择。
为重大更新做准备
人们几乎普遍认为,更新到新的主要操作系统版本需要规划、努力适应已更改或已弃用的功能,还需要在部署之前进行测试。能够更逐步地为 Amazon Linux 2023 的下一个主要版本做好准备的情况并不少见,例如在继续迁移到下一个主要版本之前,解决对已弃用或已删除功能的任何使用问题。
例如,从023移动 AL2 到 AL2 023时,阅读该在 023 年中弃用 AL2 并移除的 AL2功能部分可能会导致许多安全而小的步骤,这些步骤可能会在使用时发生, AL2 以便为 AL2 023做准备。例如,任何Python 2.7 已被 Python 3 所取代用法(操作系统使用之外,例如在yum
程序包管理器中)都可以迁移到 Python 3,为使用做准备Python 在 AL2 023。如果使用 PHP, AL2 (通过 PHP 8.2 E AL2 x tra)和 AL2 023 都提供 PHP 8.2,因此 PHP 版本迁移和操作系统迁移不必同时进行。
在使用 AL2 023 的同时,也可以为今天的亚马逊 Linux 2023 的下一个主要版本做准备,同时使用 AL2 023。本2023 年 AL2已被弃用节介绍了 AL2 023 年已弃用且即将移除的功能和软件包。
例如,将任何剩余的System V init (sysvinit)用途(例如init
脚本)迁移到其systemd
等效项将使您为未来做好准备,并允许您使用全套systemd
功能来监视服务、如何以及是否重启服务、它需要哪些其他服务,以及是否应应用任何资源或权限限制。
对于 32 位支持等功能,弃用可能跨越操作系统的多个主要版本。对于 32 位,亚马逊 Linux 1 (AL1) 已弃用,32 位 x86 (i686) AMIs亚马逊 Linux 2 已弃用,亚马逊 Linux 32 位 x86 (i686) 软件包 2023 已弃用。32 位 x86 (i686) 运行时支持从该操作系统的过渡IMDSv1还跨越了操作系统的多个主要版本。对于这些类型的更改,据了解,有些客户需要更长的时间来适应这些更改,因此,在 Amazon Linux 2023 中不再提供该功能之前,还有很大的回旋余地。
已弃用功能的列表会在操作系统的生命周期内更新,建议及时了解其更改。