プラットフォームグループの木山です。
弊社ではAmazon EC2を利用しており、インスタンスのOSとしてAmazon Linuxを採用しています。
今回はAmazon Linux 2のEOLに伴い、Amazon Linux 2023へのアップデートを行ったので、その内容と知見を共有します。
Amazon Linux 2023の概要
Amazon Linuxとは、AWS(アマゾンウェブサービス)によってサポートされるディストリビューションで、2年ごとにメジャーバージョンがリリースされます。
また、AWSのサービスとの統合を可能にするパッケージや設定も含まれています。
今回のAmazon Linux 2023はバージョン番号にあるように2023年の3月にリリースされたバージョンになります。
Amazon Linux 2と2023の主な変更点
AL2とAL2023の比較に詳細な変更点がありますが、その中でも気になったものや移行を行う中で注意した点を以下に挙げます。
| Amazon Linux 2 | Amazon Linux 2023 | |
|---|---|---|
| サポート期間 | 2026/6/30 | 2029/6/30 |
| ベースOS | CentOS | RPMベース(Fedora34,35,36 ) |
| パッケージ管理ツール | yum | dnf |
| ジョブ管理 | cron | systemd ※cronはデフォルトで無効 |
| EPEL | 対応 | 非対応 |
| ログ管理システム | rsyslog | systemd ※デフォルトで無効 |
| AWS CLI | V1 | V2 |
| デフォルトのsshd ホスト鍵 | ssh-rsa有効 | ssh-rsa無効 |
| セキュリティ | SELinux 無効 | SELinux permissiveモードで有効 |
移行手順
Amazon Linux 2023 では、ベースとなるディストリビューションやパッケージ管理ツールが変更されているため、直接的にアップグレードするコマンドは提供されていません。 バージョン間での互換性はありますが、イメージとしては別環境への移行を想像するのが良いと思います。
公式のQ&Aサイトや公式ドキュメントの移行方法の「一般的な移行方法」にも以下のような記載がありました。
- 新しくAmazon Linux 2023のインスタンスを作成する
- 新しい環境にアプリケーションのデプロイを行う
- アプリケーションのテストを行い、新環境での動作確認を行う
- テストが成功したらトラフィックを新環境にリダイレクトする
今回も上記のような流れで構築を行いました。
準備
サーバーの移行前後で同じ機能を提供する必要があるため、上記で記載した各バージョンの相違点を理解することが重要です。
また、移行前の環境で使用していたパッケージが古い場合や、過去に使用していたが現在は利用しないユーザーやパッケージが無いかを確認し、アップデートを検討することも必要です。
今回移行を行う際には移行に関する方針は決まっていましたが、ゼロから進める場合には社内の利用者へのヒアリングやシステムの安全性とパフォーマンスを向上させるために最新のパッケージへの移行を検討する必要があると感じました。
移行手順の詳細
移行すべきパッケージ、ユーザーが明確になったらあとはそれに従い構築を行います。
公式が以下の様に明言している様にAmazon Linux 2023で対応しているパッケージについてはコマンドを置き換えるだけでインストール可能でした。
DNF is similar to YUM in its usage. Many DNF commands and command options are the same as YUM commands. In a Command Line Interface (CLI) command, in most cases dnf replaces yum.
しかし移行後の環境でサポートされていないパッケージがある場合はdnfは利用できません。
Postgresqlを例に挙げると、2025/1現在でサポートされているバージョンは以下の通りです。
| Postgresql version | リリース日 | サポート終了日 |
|---|---|---|
| 17 | 2024/9/26 | 2029/11/8 |
| 16 | 2023/9/14 | 2028/11/9 |
| 15 | 2022/10/13 | 2027/11/11 |
| 14 | 2021/9/30 | 2026/11/12 |
| 13 | 2020/9/24 | 2025/11/13 |
Amazon Linux 2023のv2023.6.20241212リリース時点では15,16のサポートしかありません。
$ dnf list | grep postgresql collectd-postgresql.x86_64 5.12.0-16.amzn2023.0.4 amazonlinux postgresql-odbc.x86_64 13.02.0000-1.amzn2023.0.1 amazonlinux postgresql-odbc-tests.x86_64 13.02.0000-1.amzn2023.0.1 amazonlinux postgresql15.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-contrib.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-docs.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-llvmjit.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-plperl.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-plpython3.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-pltcl.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-private-devel.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-private-libs.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-server.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-server-devel.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-static.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-test.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-test-rpm-macros.noarch 15.9-1.amzn2023.0.1 amazonlinux postgresql15-upgrade.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql15-upgrade-devel.x86_64 15.9-1.amzn2023.0.1 amazonlinux postgresql16.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-contrib.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-docs.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-llvmjit.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-plperl.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-plpython3.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-pltcl.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-private-devel.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-private-libs.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-server.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-server-devel.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-static.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-test.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-test-rpm-macros.noarch 16.5-1.amzn2023.0.1 amazonlinux postgresql16-upgrade.x86_64 16.5-1.amzn2023.0.1 amazonlinux postgresql16-upgrade-devel.x86_64 16.5-1.amzn2023.0.1 amazonlinux
そのため、今回はリポジトリからバイナリファイルをサーバーに落としてきて手動で展開する方法を取りました。 参考:ソースコードからインストール
移行後の確認
今回EOL対応を行ったサーバーは別グループが利用するため、移行後のテストではコマンドが利用できること、作成したユーザーや設定ファイルが想定通りに構築されていることを確認しました。その後、社内の利用者に対してアナウンスを行い、不備が無いかを確認することで完了しました。
注意点
今回の移行では行いませんでしたが、Amazon Linux 2023はGithubのISSUEを作成することでパッケージの追加、変更をリクエストすることが出来ます。 amazon-linux-2023 ISSUE
上記で例に出したPostgresql16も2024/10/10のリリースで追加されたため、最新のバージョン情報を追うことが重要になってきます。
しかし、以下の様にAmazon Linux 2023のパッケージアップデートはdnf updateでは実行できず、明示的にリポジトリバージョンを指定する必要があります。
$ sudo dnf update Last metadata expiration check: 8:58:21 ago on Mon Jan 20 01:28:38 2025. ===================================================================================================== WARNING: A newer release of "Amazon Linux" is available. Available Versions: Version 2023.5.20240805: Run the following command to upgrade to 2023.5.20240805: dnf upgrade --releasever=2023.5.20240805 Release notes: https://docs.aws.amazon.com/linux/al2023/release-notes/relnotes-2023.5.20240805.html
手動で構築する場合はメッセージを読んで適宜コマンドを実行したらいいのですが、IaCツールでインスタンスを管理している場合はベースAMIを変更するか、user-dataに適切なリポジトリバージョンを記載しておきましょう。
まとめ
今回はAmazon Linuxの概要とEOL対応を紹介しました。
普段利用しているOSとは更新方法が異なりましたが、ドキュメントや記事が多くあったので情報には困りませんでした。
自分の知りたい情報だけを都度調べるのではなく、時間を取ってドキュメントを読む時間を作ることの重要性を確認出来ました。
一次情報であるAWSドキュメントは一部日本語に対応していないものもあるため、今後はそこも注意して情報収集を行っていこうと思います。
木山 瑞基(キヤマ ミズキ)沖縄出身で東京の寒さと乾燥に直面し、震えています。