업데이트를 안전하게 배포하기 위한 모범 사례 - Amazon Linux 2023

업데이트를 안전하게 배포하기 위한 모범 사례

Amazon Linux 2023(AL2023)에는 운영 체제에 업데이트를 안전하게 배포하고 업데이트 간 변경 사항을 파악하고 필요한 경우 이전 버전으로 쉽게 되돌릴 수 있도록 설계된 여러 기능이 있습니다. 이 섹션에서는 AWS가 10년이 넘는 내부 및 외부 Amazon Linux 사용을 통해 얻은 교훈을 살펴봅니다.

주의

dnf --releasever=latest update 실행은 모범 사례가 아니며 프로덕션 환경에서 OS 업데이트를 처음 테스트하게 될 가능성이 높습니다.

latest 사용 대신 특정 AL2023 릴리스 버전을 사용합니다. 이렇게 하면 이전에 테스트한 것과 동일한 변경 사항을 프로덕션 인스턴스에 배포할 수 있습니다. 예를 들어 dnf --releasever=2023.9.20250929 update는 항상 2023.9.20250929 릴리스로 업데이트됩니다.

자세한 내용은 AL2023 사용 설명서AL2023 업데이트 섹션을 참조하세요.

OS 업데이트의 배포 안전을 계획하지 않으면 애플리케이션/서비스와 OS 업데이트 간의 예상치 못한 부정적 상호 작용으로 인한 영향이 상당히 커질 수 있으며, 최악의 경우 전체 중단에 이를 수도 있습니다. 모든 소프트웨어 문제와 마찬가지로 문제가 조기에 감지될수록 최종 사용자에게 미칠 수 있는 영향이 줄어듭니다.

기본적으로 사실이 아닌 다음 두 가지를 믿는 함정에 빠지지 않는 것이 중요합니다.

  1. OS 공급업체는 OS 업데이트에서 절대 실수를 하지 않습니다.

  2. 사용자가 의존하는 OS의 특정 동작이나 인터페이스가 OS 공급업체가 의존 가능한 것으로 간주하는 동작 및 인터페이스와 일치합니다.

    즉, OS 공급업체와 사용자 모두 업데이트에 문제가 있다는 데 동의할 것입니다.

좋은 의도에 의존하지 말고 배포 안전성에 모든 OS 업데이트가 포함되도록 시스템을 마련합니다.

프로덕션 환경에 배포하여 새 OS 업데이트를 테스트하는 것은 권장되지 않습니다. OS를 배포의 다른 부분으로 간주하고 프로덕션 환경의 다른 변경 사항에 적합하다고 생각되는 것과 동일한 배포 안전 메커니즘을 적용하는 것이 좋습니다.

프로덕션 시스템에 배포하기 전에 모든 OS 업데이트를 테스트하는 것이 가장 좋습니다. 배포할 때 적절한 모니터링과 결합된 단계적 롤아웃이 권장됩니다. 단계적 롤아웃을 사용하면 문제가 발생할 경우(즉시 발생하지 않더라도) 플릿의 일부로 영향이 제한되고 추가 조사 및 완화가 진행되는 동안 업데이트의 추가 배포를 중지할 수 있습니다.

OS 업데이트로 인한 부정적인 영향을 완화하는 것이 가장 우선시되는 경우가 많으며, 그 다음으로 문제가 어디에 있든 해결합니다. OS 업데이트 도입으로 부정적인 영향이 발생하는 경우 이전의 정상 작동하는 것으로 확인된 OS 버전으로 되돌릴 수 있는 기능은 강력한 도구입니다.

Amazon Linux 2023에는 OS(또는 개별 패키지) 버전에 대한 모든 변경을 재현 가능하게 보장하는 강력한 새 기능인 버전 관리 리포지토리를 통한 결정적 업그레이드가 도입되었습니다. 따라서 한 OS 버전에서 다음 버전으로 이동할 때 문제가 발생하면 문제 해결 방법을 찾는 동안 정상 작동하는 것으로 알려진 OS 버전을 유지하는 간단한 메커니즘을 이용할 수 있습니다.

AL2023에서는 새 패키지 업데이트를 릴리스할 때마다 고정할 수 있는 새 버전과 해당 버전에 고정된 새 AMI가 제공됩니다. AL2023 릴리스 노트는 각 릴리스의 변경 사항을 다루고 AL2023용 Amazon Linux 보안 권고 섹션은 패키지 업데이트에서 해결된 보안 문제를 다룹니다.

예를 들어 2023.6.20241028 릴리스에 있는 문제의 영향을 받은 경우 이전 릴리스인 2023.6.20241010의 AMI 및 컨테이너 이미지 사용으로 즉시 되돌릴 수 있습니다. 이 경우 후속 2023.6.20241031 릴리스에서 수정된 패키지 버그가 있었지만 버전 관리 리포지토리를 통한 결정적 업그레이드를 사용하면 영향을 받는 사람은 누구나 즉시 간단한 완화 조치를 취할 수 있습니다. 즉, 이전 이미지를 사용하기만 하면 됩니다.

버전 관리 리포지토리를 통한 결정적 업그레이드는 또한 현재 위치에서든 새 AMI 또는 컨테이너 이미지 실행을 통해서든 진행 중인 OS 업데이트 배포가 이후에 릴리스되는 OS 업데이트의 영향을 받지 않도록 보장합니다.

첫 번째 예제에서 플릿 A는 2023.5.20241001에서 2023.6.20241010 릴리스로 업데이트를 배포하는 도중에 2023.6.20241028 릴리스가 출시되는 대규모 플릿입니다. 버전 관리 리포지토리를 통한 결정적 업그레이드는 플릿 A의 배포가 적용 중인 업데이트를 변경하지 않고 계속 진행됨을 의미합니다.

플릿의 1%에 처음 배포한 다음 100%에 도달할 때까지 5%, 10%, 20%, 40%와 같은 웨이브 기반 또는 단계 기반 배포 전략의 목적은 더 넓게 배포하기 전에 제한된 방식으로 변경 사항을 테스트할 수 있도록 하는 것입니다. 이러한 유형의 배포 전략은 일반적으로 프로덕션 변경 사항을 배포하는 모범 사례로 간주됩니다.

웨이브 기반 배포 전략과 플릿 A의 2023.6.20241010 업데이트가 한 번에 많은 호스트에 배포되는 단계에 있을 때 2023.6.20241028이 릴리스되었다는 사실은 버전 관리 리포지토리를 통한 결정적 업그레이드 사용 덕분에 진행 중인 배포에 영향을 미치지 않습니다.

플릿 B가 2023.5.20240708 같은 이전 버전을 실행 중이고 2023.6.20241028로 업데이트를 배포하기 시작했으며 플릿 B가 해당 버전의 문제에 영향을 받았다면 배포 초기에 이를 발견할 수 있을 것입니다. 이때 해당 문제에 대한 수정 사항을 사용할 수 있을 때까지 롤아웃을 일시 중지할지, 아니면 그 사이에 플릿 A가 실행 중인 동일한 버전인 2023.6.20241010의 배포를 시작하여 플릿 B가 2023.5.202407082023.6.20241010 사이의 모든 업데이트를 받을 수 있도록 할지 결정할 수 있습니다.

OS 업데이트를 즉시 수행하지 않으면 문제가 발생할 수 있다는 점에 유의해야 합니다. 새 업데이트에는 환경과 관련이 있을 수 있는 버그 및 보안 수정이 포함될 수 있습니다. 자세한 내용은 Amazon Linux 2023 보안 및 규정 준수 AL2023에서 패키지 및 운영 체제 업데이트 관리(을)를 참조하세요.

새 OS 업데이트를 쉽게 가져오고, 프로덕션에 배포하기 전에 테스트하고, 웨이브 기반 배포와 같은 메커니즘을 사용하여 부정적인 영향을 최소화할 수 있도록 배포 시스템을 구성하는 것이 중요합니다. OS 업데이트의 부정적인 영향을 완화하려면 배포 시스템이 이전의 정상 작동하는 것으로 알려진 OS 버전을 가리키도록 하는 방법을 알고 있어야 하며, 문제가 해결되면 더 이상 이전의 정상 버전에 고정되지 않고 새로운 정상 버전으로 이동해야 합니다.

마이너 업데이트 준비

AL2023의 새 포인트 릴리스와 같은 OS에 대한 소규모 업데이트를 준비하는 것은 노력이 전혀 필요하지 않도록 하기 위한 것입니다. 예정된 변경 사항은 AL2023 릴리스 노트를 참조하세요.

종료되는 패키지의 지원 기간에는 언어 런타임의 최신 버전으로 이동하는 작업이 포함될 수 있습니다(예: AL2023에서 PHP 사용 사용). 지원 기간이 끝나기 전에 충분히 여유를 두고 새로운 언어 런타임 버전으로 이동하여 미리 준비하는 것이 좋습니다.

pcre 버전 1 같은 패키지의 경우 미리 계획을 세우고 코드를 대체품으로 마이그레이션할 수도 있습니다. 이 경우 대체품은 pcre 버전 2입니다. 예상치 못한 차질에 대비할 시간을 확보하기 위해 가능한 한 빨리 이렇게 하는 것이 가장 좋습니다.

Berkeley DB(libdb) 같이 직접적인 대체품이 없는 경우 사용 사례에 따라 선택해야 할 수 있습니다.

메이저 업데이트 준비

운영 체제의 새 메이저 버전으로 업데이트하는 것은 거의 보편적으로 계획, 변경되거나 더 이상 사용되지 않는 기능에 적응하기 위한 작업, 배포 전 테스트가 필요한 것으로 간주됩니다. 다음 메이저 버전으로 이동하기 전에 더 이상 사용되지 않거나 제거된 기능의 사용을 해결하는 등 Amazon Linux 2023의 다음 메이저 버전을 점진적으로 준비하는 것은 드문 일이 아닙니다.

예를 들어 AL2에서 AL2023으로 이동할 때 AL2에서는 기능이 더 이상 사용되지 않고 AL2023에서는 제거됨 섹션을 읽으면 AL2를 계속 사용하면서 AL2023을 준비할 수 있는 여러 안전하고 작은 단계를 수행할 수 있습니다. 예를 들어 모든 Python 2.7은 Python 3으로 대체되었습니다. 사용(yum 패키지 관리자에서와 같은 OS 사용은 제외)을 AL2023에 설치된 Python 사용을 준비하기 위해 Python 3으로 마이그레이션할 수 있습니다. PHP를 사용하는 경우 (PHP 8.2 AL2 Extra를 통해) AL2와 AL2023 모두 PHP 8.2를 제공하므로 PHP 버전 마이그레이션과 OS 마이그레이션을 동시에 수행할 필요가 없습니다.

AL2023을 사용하는 동안 현재 Amazon Linux 2023의 다음 메이저 버전에 대비할 수도 있습니다. AL2023에서 사용 중단 섹션에서는 AL2023에서 더 이상 사용되지 않으며 제거될 예정인 기능 및 패키지를 다룹니다.

예를 들어 init 스크립트와 같은 나머지 System V init (sysvinit) 사용을 해당 systemd 항목으로 마이그레이션하면 미래에 대비할 수 있을 뿐만 아니라 전체 systemd 기능 세트를 사용하여 서비스 모니터링, 재시작 방법 및 여부, 필요한 다른 서비스, 적용해야 하는 리소스 또는 권한 제약 조건 등을 관리할 수 있습니다.

32비트 지원과 같은 기능의 경우 지원 중단이 여러 주요 OS 버전에 걸쳐 진행될 수 있습니다. 32비트의 경우 Amazon Linux 1(AL1)은 32비트 x86(i686) AMI를 더 이상 사용하지 않고, Amazon Linux 2는 32비트 x86(i686) 패키지를 더 이상 사용하지 않으며, Amazon Linux 2023은 32비트 x86(i686) 런타임 지원을 더 이상 사용하지 않습니다. IMDSv1에서의 전환도 여러 주요 OS 버전에 걸쳐 진행됩니다. 이러한 유형의 변경 사항의 경우 일부 고객이 적응하는 데 더 오래 걸린다는 점을 고려하여, Amazon Linux 2023에서 해당 기능을 더 이상 사용할 수 없게 되기 전까지 충분한 여유 시간이 제공됩니다.

더 이상 사용되지 않는 기능 목록은 OS 수명 동안 업데이트되며 변경 사항을 최신 상태로 유지하는 것이 좋습니다.