

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 버전 관리 리포지토리를 통한 결정적 업그레이드
<a name="deterministic-upgrades-usage"></a>

**Topics**
+ [결정적 업그레이드 시스템 사용](#using-a-deterministic-upgraded-system)
+ [결정적 업그레이드 시스템의 선택적 업데이트](#deterministic-upgrade-selective-update)
+ [결정적 업그레이드와 함께 연속 재정의 사용](#deterministic-upgrade-override-persist)

## 결정적 업그레이드 시스템 사용
<a name="using-a-deterministic-upgraded-system"></a>

**참고**  
 패키지 관리자의 기본 동작이 AL2에서 변경되었습니다.

 결정적 업그레이드는 광범위한 배포 전에 프로덕션 환경의 모든 변경 사항을 완전히 테스트할 수 있는 강력한 방법입니다. 각각의 새 AL2023 AMI는 특정 버전의 AL2023으로 잠깁니다. 이를 통해 특정 AMI를 시작할 때 설치된 OS 패키지 버전의 결정적 동작을 확인할 수 있습니다. 현재 위치 업데이트는 특정 릴리스 버전일 수 있으므로 플릿 전반에 걸쳐 결정적 동작을 보장합니다. 새 AMI 또는 현재 위치 업데이트 버전으로 이동할 때 CI/CD 파이프라인에서 각 버전을 테스트하여 프로덕션 환경에 배포하기 전에 잠재적 문제를 포착할 수 있습니다.

 [AWS Systems Manager 패치 관리자](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager.html) 같은 도구를 사용하여 플릿 전체에서 적용 업데이트를 오케스트레이션할 수 있습니다. 새 AL2023 AMI가 릴리스될 때 파생 AMIs 빌드하기 위해 [EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/)는 자동으로 AMI 빌드, 패치 및 테스트하거나 새 기본 AMI를 사용할 수 있는 시기를 알거나 자체 AMI 빌드 파이프라인을 트리거하기 위해 [새 업데이트 알림 받기](receive-update-notification.md)의 조치를 취할 수 있습니다.

 특정 권고로 업데이트를 제한하는 방법에 대한 자세한 내용은 [현재 위치에서 보안 업데이트 적용](security-inplace-update.md) 섹션을 참조하세요.

 현재 위치 패치의 경우 `dnf` 패키지 관리자를 사용할 수 있습니다. `dnf upgrade` 명령을 실행하면 시스템은 `releasever` 변수가 지정하는 저장소에서 업그레이드를 확인합니다. 유효한 `releasever`는 *최신* 버전이거나 *2023.10.20260325*과 같은 날짜 스탬프 버전입니다.

두 가지 방법 중 하나를 사용하여 `releasever` 값을 변경할 수 있습니다. 이러한 방법은 내림차순으로 시스템 우선 순위를 나열합니다. 즉, 방법 1은 방법 2와 3보다 우선하고 방법 2는 방법 3보다 우선합니다.

1. 명령줄 플래그를 사용했다면 그 값은 `--releasever=latest`입니다.

1. 오버라이드 변수 파일이 설정된 경우 지정된 값은 `/etc/dnf/vars/releasever`입니다.

1. 현재 설치된 `system-release` 패키지 버전입니다.

즉, 패키지 버전은 *2023.0.20230210*입니다.

```
$ rpm -q system-release
system-release-2023.0.20230210-0.amzn2023.noarch
```

새로 설치한 시스템에는 재정의 변수가 없습니다. 시스템이 설치된 `system-release` 버전을 제어하기 때문에 업그레이드가 불가능합니다. 

```
$ cat /etc/dnf/vars/releasever
cat: /etc/dnf/vars/releasever: No such file or directory
```

```
$ sudo dnf upgrade
Last metadata expiration check: 0:00:02 ago on Wed 15 Feb 2023 06:14:12 PM UTC.
Dependencies resolved.
Nothing to do.
Complete!
```

`releasever` 플래그로 원하는 버전을 지정하면 특정 버전의 패키지를 가져올 수 있습니다.

```
$ rpm -q system-release
system-release-2023.0.20230222-0.amzn2023.noarch
```

```
$ sudo dnf upgrade --releasever=2023.0.20230329
Amazon Linux 2023 repository                     26 MB/s |  12 MB     00:00
Dependencies resolved.
================================================================================
 Package                 Arch    Version                      Repository   Size
================================================================================
Installing:
 kernel                   aarch64 6.1.21-1.45.amzn2023        amazonlinux  26 M
Upgrading:
 amazon-linux-repo-s3     noarch  2023.0.20230329-0.amzn2023  amazonlinux  18 k
 ca-certificates          noarch  2023.2.60-1.0.amzn2023.0.1  amazonlinux 828 k
 cloud-init               noarch  22.2.2-1.amzn2023.1.7       amazonlinux 1.1 M

         ... [ list edited for clarity ]

 system-release           noarch  2023.0.20230329-0.amzn2023  amazonlinux  29 k

         ... [ list edited for clarity ]
          
 vim-data                 noarch  2:9.0.1403-1.amzn2023.0.1   amazonlinux  25 k
 vim-minimal              aarch64 2:9.0.1403-1.amzn2023.0.1   amazonlinux 753 k

Transaction Summary
================================================================================
Install    1 Package
Upgrade   42 Packages

Total download size: 56 M
```

`--releasever` 옵션은 `system-release`와 `/etc/dnf/vars/releasever` 모두 재정의하므로 이 업그레이드의 결과는 다음과 같습니다.

1. 설치된 모든 패키지의 구 버전과 최신 버전 간의 변경 사항을 업그레이드합니다.

1. 업그레이드하면 시스템은 `system-release` 최신 버전의 리포지토리를 제어합니다.

 항상 업데이트할 `releasever`(예: AL2023 릴리스)를 지정하면 플릿 전체에 결정적인 변경 사항이 적용됩니다. 버전 *A*를 시작하고 *B*로 업데이트한 다음 *C*로 업데이트했습니다.

## 결정적 업그레이드 시스템의 선택적 업데이트
<a name="deterministic-upgrade-selective-update"></a>

**참고**  
 특정 업데이트를 선택하는 대신 새 릴리스의 모든 업데이트를 설치하는 것이 좋습니다. OS에 업데이트의 일부만 적용하는 것은 전체 업데이트를 수행하는 표준 관행에 대한 예외여야 합니다.

정식 릴리스 버전을 사용하는 시스템에 최신 릴리스에서 선택한 패키지를 설치하는 것이 좋습니다.

`dnf check-update`로 업그레이드할 패키지를 식별할 수 있습니다.

```
$ sudo dnf check-update --releasever=latest --security
Amazon Linux 2023 repository                     13 MB/s |  10 MB     00:00
Last metadata expiration check: 0:00:02 ago on Wed 15 Feb 2023 02:52:21 AM UTC.

bind-libs.aarch64                  32:9.16.27-1.amzn2023.0.1         amazonlinux
bind-license.noarch                32:9.16.27-1.amzn2023.0.1         amazonlinux
bind-utils.aarch64                 32:9.16.27-1.amzn2023.0.1         amazonlinux
cryptsetup.aarch64                 2.4.3-2.amzn2023.0.1              amazonlinux
cryptsetup-libs.aarch64            2.4.3-2.amzn2023.0.1              amazonlinux
curl-minimal.aarch64               7.85.0-1.amzn2023.0.1             amazonlinux
glibc.aarch64                      2.34-40.amzn2023.0.2              amazonlinux
glibc-all-langpacks.aarch64        2.34-40.amzn2023.0.2              amazonlinux
glibc-common.aarch64               2.34-40.amzn2023.0.2              amazonlinux
glibc-locale-source.aarch64        2.34-40.amzn2023.0.2              amazonlinux
gmp.aarch64                        1:6.2.1-2.amzn2023.0.1            amazonlinux
gnupg2-minimal.aarch64             2.3.7-1.amzn2023.0.2              amazonlinux
gzip.aarch64                       1.10-5.amzn2023.0.1               amazonlinux
kernel.aarch64                     6.1.12-17.42.amzn2023             amazonlinux
kernel-tools.aarch64               6.1.12-17.42.amzn2023             amazonlinux
libarchive.aarch64                 3.5.3-2.amzn2023.0.1              amazonlinux
libcurl-minimal.aarch64            7.85.0-1.amzn2023.0.1             amazonlinux
libsepol.aarch64                   3.4-3.amzn2023.0.2                amazonlinux
libsolv.aarch64                    0.7.22-1.amzn2023.0.1             amazonlinux
libxml2.aarch64                    2.9.14-1.amzn2023.0.1             amazonlinux
logrotate.aarch64                  3.20.1-2.amzn2023.0.2             amazonlinux
lua-libs.aarch64                   5.4.4-3.amzn2023.0.1              amazonlinux
lz4-libs.aarch64                   1.9.4-1.amzn2023.0.1              amazonlinux
openssl.aarch64                    1:3.0.5-1.amzn2023.0.3            amazonlinux
openssl-libs.aarch64               1:3.0.5-1.amzn2023.0.3            amazonlinux
pcre2.aarch64                      10.40-1.amzn2023.0.1              amazonlinux
pcre2-syntax.noarch                10.40-1.amzn2023.0.1              amazonlinux
rsync.aarch64                      3.2.6-1.amzn2023.0.2              amazonlinux
vim-common.aarch64                 2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-data.noarch                    2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-enhanced.aarch64               2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-filesystem.noarch              2:9.0.475-1.amzn2023.0.1          amazonlinux
vim-minimal.aarch64                2:9.0.475-1.amzn2023.0.1          amazonlinux
xz.aarch64                         5.2.5-9.amzn2023.0.1              amazonlinux
xz-libs.aarch64                    5.2.5-9.amzn2023.0.1              amazonlinux
zlib.aarch64                       1.2.11-32.amzn2023.0.3            amazonlinux
```

업그레이드하고 싶은 패키지를 설치합니다. `sudo dnf upgrade --releasever=latest` 및 패키지 이름을 사용하면 `system-release` 패키지가 변경되지 않습니다.

```
$ sudo dnf upgrade --releasever=latest openssl openssl-libs
Last metadata expiration check: 0:01:28 ago on Wed 15 Feb 2023 02:52:21 AM UTC.
Dependencies resolved.
================================================================================
 Package          Arch        Version                     Repository       Size
================================================================================
Upgrading:
 openssl          aarch64     1:3.0.5-1.amzn2023.0.3      amazonlinux     1.1 M
 openssl-libs     aarch64     1:3.0.5-1.amzn2023.0.3      amazonlinux     2.1 M

Transaction Summary
================================================================================
Upgrade  2 Packages

Total download size: 3.2 M
```

**참고**  
`sudo dnf upgrade --releasever=latest`를 사용하면 `system-release`를 포함한 모든 패키지가 업데이트됩니다. 그러면 연속 재정의를 설정하지 않는 한 최신 `system-release` 버전으로 유지됩니다.

## 결정적 업그레이드와 함께 연속 재정의 사용
<a name="deterministic-upgrade-override-persist"></a>

**참고**  
 결정적 업데이트를 통해 OS 변경 사항을 CI/CD 파이프라인에 통합할 수 있습니다. 결정적 업데이트를 비활성화하면 배포 전에 테스트할 수 없습니다.

`--releasever=latest`를 추가하는 대신 연속 재정의 기능으로 변수 값을 *최신*으로 설정하여 시스템 *잠금 해제*를 할 수 있습니다. 항상 `latest`를 사용하면 AL2023의 동작이 AL2 업데이트 모델로 되돌아갑니다. 패키지 관리자에 대한 직접 호출은 *항상* 최신 릴리스를 보고, 특정 버전의 OS에 잠기지 않습니다.

**주의**  
 결정적 업데이트의 지속적인 재정의를 사용하여 패키지 관리자를 잠금 해제하면 애플리케이션과 프로덕션 OS 업데이트 간의 잠재적 비호환성을 발견할 위험이 있습니다.  
 비호환성은 *드물지만* OS 업데이트를 통해 새 코드 변경 사항을 환경에 통합하는 경우 통합 테스트를 통해 프로덕션 환경에 부정적인 영향을 미치는 코드 변경 사항을 배포하지 못할 수 있습니다.

```
$ echo latest | sudo tee /etc/dnf/vars/releasever
latest
```

```
$ sudo dnf upgrade
Last metadata expiration check: 0:03:36 ago on Wed 15 Feb 2023 02:52:21 AM UTC.
Dependencies resolved.
================================================================================
 Package                 Arch    Version                      Repository   Size
================================================================================
Installing:
 kernel                  aarch64 6.1.73-45.135.amzn2023       amazonlinux  24 M
Upgrading:
 acl                     aarch64 2.3.1-2.amzn2023.0.1         amazonlinux  72 k
 alternatives            aarch64 1.15-2.amzn2023.0.1          amazonlinux  36 k
 amazon-ec2-net-utils    noarch  2.3.0-1.amzn2023.0.1         amazonlinux  16 k
 at                      aarch64 3.1.23-6.amzn2023.0.1        amazonlinux  60 k
 attr                    aarch64 2.5.1-3.amzn2023.0.1         amazonlinux  59 k
 audit                   aarch64 3.0.6-1.amzn2023.0.1         amazonlinux 249 k
 audit-libs              aarch64 3.0.6-1.amzn2023.0.1         amazonlinux 116 k
 aws-c-auth-libs         aarch64 0.6.5-6.amzn2023.0.2         amazonlinux  79 k
 aws-c-cal-libs          aarch64 0.5.12-7.amzn2023.0.2        amazonlinux  34 k
 aws-c-common-libs       aarch64 0.6.14-6.amzn2023.0.2        amazonlinux 119 k
 aws-c-compression-libs  aarch64 0.2.14-5.amzn2023.0.2        amazonlinux  22 k
 aws-c-event-stream-libs aarch64 0.2.7-5.amzn2023.0.2         amazonlinux  47 k
 aws-c-http-libs         aarch64 0.6.8-6.amzn2023.0.2         amazonlinux 147 k
 aws-c-io-libs           aarch64 0.10.12-5.amzn2023.0.6       amazonlinux 109 k
 aws-c-mqtt-libs         aarch64 0.7.8-7.amzn2023.0.2         amazonlinux  61 k
 aws-c-s3-libs           aarch64 0.1.27-5.amzn2023.0.3        amazonlinux  54 k
 aws-c-sdkutils-libs     aarch64 0.1.1-5.amzn2023.0.2         amazonlinux  26 k
 aws-checksums-libs      aarch64 0.1.12-5.amzn2023.0.2        amazonlinux  50 k
 awscli-2                noarch  2.7.8-1.amzn2023.0.4         amazonlinux 7.3 M
 basesystem              noarch  11-11.amzn2023.0.1           amazonlinux 7.8 k
 bash                    aarch64 5.1.8-2.amzn2023.0.1         amazonlinux 1.6 M
 bash-completion         noarch  1:2.11-2.amzn2023.0.1        amazonlinux 292 k
 bc                      aarch64 1.07.1-14.amzn2023.0.1       amazonlinux 120 k
 bind-libs               aarch64 32:9.16.27-1.amzn2023.0.1    amazonlinux 1.2 M
 bind-license            noarch  32:9.16.27-1.amzn2023.0.1    amazonlinux  14 k
 bind-utils              aarch64 32:9.16.27-1.amzn2023.0.1    amazonlinux 206 k
 binutils                aarch64 2.38-20.amzn2023.0.3         amazonlinux 4.6 M
 boost-filesystem        aarch64 1.75.0-4.amzn2023.0.1        amazonlinux  55 k
 boost-system            aarch64 1.75.0-4.amzn2023.0.1        amazonlinux  14 k
 boost-thread            aarch64 1.75.0-4.amzn2023.0.1        amazonlinux  54 k
 bzip2                   aarch64 1.0.8-6.amzn2023.0.1         amazonlinux  53 k
 bzip2-libs              aarch64 1.0.8-6.amzn2023.0.1         amazonlinux  44 k
 c-ares                  aarch64 1.17.2-1.amzn2023.0.1        amazonlinux 107 k
 ca-certificates         noarch  2021.2.50-1.0.amzn2023.0.3   amazonlinux 343 k
 checkpolicy             aarch64 3.4-3.amzn2023.0.1           amazonlinux 345 k
 chkconfig               aarch64 1.15-2.amzn2023.0.1          amazonlinux 162 k
 chrony                  aarch64 4.2-7.amzn2023.0.4           amazonlinux 314 k
 cloud-init              noarch  22.2.2-1.amzn2023.1.7        amazonlinux 1.1 M
 cloud-utils-growpart    aarch64 0.31-8.amzn2023.0.2          amazonlinux  31 k
 coreutils               aarch64 8.32-30.amzn2023.0.2         amazonlinux 1.1 M
 coreutils-common        aarch64 8.32-30.amzn2023.0.2         amazonlinux 2.0 M
 cpio                    aarch64 2.13-10.amzn2023.0.1         amazonlinux 269 k
 cracklib                aarch64 2.9.6-27.amzn2023.0.1        amazonlinux  83 k
 cracklib-dicts          aarch64 2.9.6-27.amzn2023.0.1        amazonlinux 3.6 M
 crontabs                noarch  1.11-24.20190603git.amzn2023.0.1
                                                              amazonlinux  19 k
 crypto-policies         noarch  20230128-1.gitdfb10ea.amzn2023.0.1
                                                              amazonlinux  61 k
 crypto-policies-scripts noarch  20230128-1.gitdfb10ea.amzn2023.0.1
                                                              amazonlinux  81 k
...
Installing dependencies:
 amazon-linux-repo-cdn   noarch  2023.0.20230210-0.amzn2023   amazonlinux  16 k
 xxhash-libs             aarch64 0.8.0-3.amzn2023.0.1         amazonlinux  32 k
Installing weak dependencies:
 amazon-chrony-config    noarch  4.2-7.amzn2023.0.4           amazonlinux  14 k
 gawk-all-langpacks      aarch64 5.1.0-3.amzn2023.0.1         amazonlinux 207 k

Transaction Summary
================================================================================
Install    5 Packages
Upgrade  413 Packages

Total download size: 199 M
```

**참고**  
재정의 변수 `/etc/dnf/vars/releasever`를 사용한 경우 다음 명령으로 재정의 값을 삭제하고 기본 잠금 동작을 복원할 수 있습니다.  

```
$ sudo rm /etc/dnf/vars/releasever
```

 특정 버전 대신 `latest`를 사용하기 위해 영구 재정의를 사용하는 것은 AL2의 기본 동작과 비슷합니다. AL2를 기반으로 AMI를 빌드하여 이 동작을 비활성화하고 AL2023에서 기본적으로 가져오는 것과 같은 특정 패키지 버전에 잠그는 서비스가 있습니다.

 결정적 업데이트를 비활성화하는 대신 인스턴스를 새 AMI에서 시작된 인스턴스로 교체하는 것이 좋습니다. 인스턴스 교체가 옵션이 아닌 경우 [AWS Systems Manager 패치 관리자](https://docs.aws.amazon.com/systems-manager/latest/userguide/patch-manager.html)와 같은 도구를 사용하여 플릿 전체에서 업데이트 적용을 오케스트레이션하는 것이 좋습니다. [EC2 Image Builder](https://docs.aws.amazon.com/imagebuilder/latest/userguide/)는 AL2023 기본 이미지에서 파생된 자체 AMI를 자동으로 빌드, 패치 및 테스트할 수도 있습니다. 자체 AMI 빌드 파이프라인을 트리거하기 위해 [새 업데이트 알림 받기](receive-update-notification.md)의 조치를 취할 수도 있습니다.

 사전 프로덕션 환경에서 `latest`를 사용한 다음 `latest`를 사용하여 프로덕션에 배포해도 OS 업데이트와 애플리케이션 간의 문제로부터 보호되지 *않습니다*. 새로운 AL2023 릴리스는 언제든지 사용할 수 있으므로 프로덕션 환경에서의 `latest` 사용 모두가 위험을 수반합니다.