Amazon Linux 2023の更新方法

# はじめに

プライベートで使っているAmazon Linux 2023の仮想マシンでのOS更新作業を、備忘録として記事にまとめてみました。

# 新しいOSの通知

* Amazon Linux 2023がにログインした際に、より新しいバージョンのOSが存在する時は以下のように通知が表示されます。
* ここで新しいバージョンが一覧表示されますが、これをコピペして更新処理をするのは少々面倒なので、後述する方法で使用可能なバージョンを調べた方が良いと思います。

```text:ログイン時の通知
A newer release of "Amazon Linux" is available.
  Version 2023.5.20240903:
  Version 2023.5.20240916:
  Version 2023.5.20241001:
  Version 2023.6.20241010:
  Version 2023.6.20241028:
  Version 2023.6.20241031:
Run "/usr/bin/dnf check-release-update" for full release and version update info
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
```

# 使用可能なバージョンを調べる

* 使用可能なバージョンを調べる際には、`sudo dnf check-release-update`を実行します。
* 更新が溜まっていると以下のようにずらっと表示されますが、AWSの情報によると「新しいバージョンが公開されても、以前のバージョンはすべて引き続き利用可能」とのことです。
  * そのため、セキュリティ上の問題があるなどのケースを除けば、慌てて更新（アップグレード）する必要はないと思います。
* また、この一覧表示の中に書かれている`dnf upgrade --releasever=...`という部分をコピペして実行すれば、簡単にOSを更新することが可能です。

```shell-session:使用可能なバージョンを調べる
[ec2-user@ip-10-0-1-23 ~]$ sudo dnf check-release-update
WARNING:
  A newer release of "Amazon Linux" is available.

  Available Versions:

  Version 2023.5.20240903:
    Run the following command to upgrade to 2023.5.20240903:

      dnf upgrade --releasever=2023.5.20240903

    Release notes:
     https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20240903.html

  Version 2023.5.20240916:
    Run the following command to upgrade to 2023.5.20240916:

      dnf upgrade --releasever=2023.5.20240916

    Release notes:
     https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20240916.html

  Version 2023.5.20241001:
    Run the following command to upgrade to 2023.5.20241001:

      dnf upgrade --releasever=2023.5.20241001

    Release notes:
     https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20241001.html

  Version 2023.6.20241010:
    Run the following command to upgrade to 2023.6.20241010:

      dnf upgrade --releasever=2023.6.20241010

    Release notes:
     https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241010.html

  Version 2023.6.20241028:
    Run the following command to upgrade to 2023.6.20241028:

      dnf upgrade --releasever=2023.6.20241028

    Release notes:
     https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241028.html

  Version 2023.6.20241031:
    Run the following command to upgrade to 2023.6.20241031:

      dnf upgrade --releasever=2023.6.20241031

    Release notes:
     https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.6.20241031.html
```

# OSの更新

* OSの更新をする際には、`sudo dnf upgrade --releasever={version}`を実行します。
  * `sudo dnf check-release-update`で得られたコマンドに、`sudo`を付けただけです。
* t3a.nanoでOSを更新すると、1時間半ほどで更新処理が完了しました。
  * OSの更新前後で、CPUクレジットの残高がMAX（144）から41.7まで減っていたので、なるべくCPUクレジットが貯まっている状態で実施した方が良いと思われます。
  * 予算的に余裕があるなら、OS更新の時だけインスタンスサイズをスケールアップさせた方がサッと済ませられて良いかもしれません。

```shell-session:OSの更新
[ec2-user@ip-10-0-1-23 ~]$ sudo dnf upgrade --releasever=2023.6.20241031
```

# 注意点

* 以前に「使用可能なバージョン」が大量にあった時（＝しばらく更新していなかった時）に、`sudo dnf upgrade --releasever={version}`で一気に最新バージョンに更新しようとしたところ、丸1日経ってもOSの更新が終わりませんでした...
  * もしかすると、使っていたEC2インスタンスが超低スペック（t3a.nano）だったのが原因かもしれません。
* そのため、OS更新の前にAMIを作るなどバックアップをしっかりしておいた方が良いと思います。

# 参考URL

* [AL2023 の更新](https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/updating.html)
  * [AL2023 のバージョニングされたリポジトリによる確定的なアップグレード](https://docs.aws.amazon.com/ja_jp/linux/al2023/ug/deterministic-upgrades.html)