🙆‍♀️

Amazon Linux 2をAmazon Linux 2023に移行したくて...夏

2023/07/09に公開

※本記事は、2023年7月時点の情報を元にしています。実際に移行を検討される際は、その時点でのAWS等の最新ドキュメントを参照下さい。

最近、

「Amazon Linux 2をAmazon Linux 2023に移行した事例はありますか?」
「Amazon Linux 2023を実際に使ってみてハマった事象があったら教えて下さい」

という問い合わせを目にする機会が増えました。

約1年前に、[Amazon Linux 2(以下、AL2)のEOL(End Of Life)は2025年6月30日に延期されました(https://aws.amazon.com/amazon-linux-2/faqs/?nc1=h_ls)。

AL2のEOLまであと2年ということで、ウォーターフォール型の足の長いプロジェクトであったり、
既存環境でAL2ベースのEC2を大量に運用しているユーザーさんの中では、
もうEOLを見据えたAmazon Linux 2023(以下、AL2023)の採用または移行の検討が始まっているものと推察します。

ワタクシ、正直申しますとEC2は最近、Cloud9のバックエンドとしてぐらいしか利用していないもので・・、
AL2022の頃から状況も変わっているだろうと思いまして、ググッってわかる範囲で最新状況を調べてみた次第です。
その際のログを共有いたします。

長いので最初に要点だけ書いておくと

  • AL2からAL2023は別ディストリビューションへの移行なので、特にパッケージの移行が大変そうです。
  • AL2のEOL対応単体で考えるのではなく、社内のAWSアカウントの状況を棚卸しし、全社でガバナンスを効かせる活動の一環として計画・対応するのがよさそうです。

前提知識

のんピさんがすでにAL2とAL2023を詳細に比較したブログを公開されていましたので、
「いつもありがとうございますありがとうございます」と合掌しながら読みました。
AL2023について完全に理解した気分になれました。マジでおすすめです。

Amazon Linux 2023がGAされました | DevelopersIO

Amazon Linux 2023とAmazon Linux2のデフォルトで起動しているサービスやインストールされているパッケージを比較してみた | DevelopersIO

移行する時に考慮しようと思ったところ

AL2から、AL2023に環境を移行するとして、気になった調べた点を列挙します。

移行方式

AL2までは、AWSがCentOSをベースに継続的に改修してきたものです。

一方AL2023からは、ドキュメントによれば、「大部分のコンポーネントはFedora由来、一部CentOS、その他は独自に開発」したもの、と読めます。

The Generally Available (GA) version of AL2023 isn't directly comparable to any specific Fedora release. The AL2023 GA version includes components from Fedora 34, 35, and 36. Some of the components are the same as the components in Fedora and some are modified. Other components more closely resemble the components in CentOS 9 Streams or were developed independently.

なので、両者は異なるディストリビューションと考えた方がよさそうです。

それもあってか?、2023年7月時点では、

  • AL2からAL2023への移行プログラム(AL2上でプログラムを実行すると、いい感じにAL2023にアップグレードしてくれるプログラム)
  • 移行支援プログラム(AL2023に移行するにあたり、必要な移行作業をレポートしてくれるプログラム)

のようなものは、存在しないようです。

既存のAL2環境のOSレイヤーのセットアップをAnsible等でIaC化していたり、EC2 Image Builder
(※AL2023サポート済み)のビルドコンポーネントを利用してパイプライン化している場合、
移行作業をある程度省力化できる可能性はあります。

既存環境を手動で作っていた場合は・・AL2023のインスタンスを起動した上で、環境作り直しですね。

いずれにせよ、AL2で利用していたパッケージがAL2023でも利用できるか、の確認は必須となります。

ワンチャン、AWS Application Migration ServiceでAL2→AL2023の移行サポートされないかしら、と期待しましたが、AL2023サポートされてませんでした・・(今後に期待)。

Supported operating systems - Application Migration Service

AL2で利用中のパッケージが、AL2023でも使えるか問題

公式ドキュメントにも明記されていますし、多くのブログ記事等でもAL2023の代表的な変更点として挙げられていますが、AL2023では、EPEL(Extra Packages for Enterprise Linux)の利用はサポートされません。

The project has primarily produced RHEL and CentOS packages. Amazon Linux 2 features a high level of compatibility with CentOS 7. As a result, many EPEL7 packages work on Amazon Linux 2. However, AL2023 doesn't support EPEL or EPEL-like repositories.

これは結構根深い問題です。

AL2023のリポジトリに、EPEL経由で利用していたパッケージがない

AL2環境の初期構築やメンテナンスにAnsibleやEC2 Image Builderを使っていたとして、
かなりamazon-linux-extras install <パッケージ名>している箇所があるでしょうから、
改修が必要です。

というか・・そもそもAL2では、amazon-linux-extrasを利用してAnsibleをインストールされていた方が多いと思います。
AL2023のRPMパッケージには、2023年7月時点ではansibleは含まれないので、dnf使ってもインストールできません。
困っている方も多いようで、Amazon Linux 2023のGithubのリポジトリに、ansibleのPackage Requestがissueとして上がっていたりします。
dnfの管理外にはなりますが、pipを使ってAnsibleを導入する、という回避策はありそうです。

このような感じで、CorrettoはあるけどOpenJDKはない、等、現在AL2で利用しているパッケージが、AL2023でサポートされているかどうか、事前調査が必要です。

最新のAL2023サポートパッケージは以下の公式ドキュメントを参照。
All Amazon Linux 2023 packages

Package Requestの起票やステータスの確認はGithubのIssuesを参照。
Issues · amazonlinux/amazon-linux-2023

AL2で利用していたバージョンのパッケージが、AL2023のリポジトリにない

EPELの場合、amazon-linux-extrasコマンドで、インストールしたいパッケージのバージョンを、ある程度選択することができました。
パッケージによっては、異なるメジャーリリースの中から、要件にあったパッケージの選択もできました。(phpとか、postgresqlとか)

[ssm-user@al2 bin]$ sudo amazon-linux-extras
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  6  postgresql10             available    [ =10  =stable ]
  9  R3.4                     available    [ =3.4.3  =stable ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0
          =stable ]
 18  libreoffice              available    \
        [ =5.0.6.2_15  =5.3.6.1  =stable ]
 19  gimp                     available    [ =2.8.22 ]
 20  docker=latest            enabled      \
        [ =17.12.1  =18.03.1  =18.06.1  =18.09.9  =stable ]
 21  mate-desktop1.x          available    \
        [ =1.19.0  =1.20.0  =stable ]
 22  GraphicsMagick1.3        available    \
        [ =1.3.29  =1.3.32  =1.3.34  =stable ]
 23  tomcat8.5                available    \
        [ =8.5.31  =8.5.32  =8.5.38  =8.5.40  =8.5.42  =8.5.50
          =stable ]
 24  epel=latest              enabled      [ =7.11  =stable ]
 25  testing                  available    [ =1.0  =stable ]
 26  ecs                      available    [ =stable ]
 27  corretto8                available    \
        [ =1.8.0_192  =1.8.0_202  =1.8.0_212  =1.8.0_222  =1.8.0_232
          =1.8.0_242  =stable ]
 29  golang1.11               available    \
        [ =1.11.3  =1.11.11  =1.11.13  =stable ]
 30  squid4                   available    [ =4  =stable ]
 32  lustre2.10               available    \
        [ =2.10.5  =2.10.8  =stable ]
 33  java-openjdk11           available    [ =11  =stable ]
 34  lynis                    available    [ =stable ]
 36  BCC                      available    [ =0.x  =stable ]
 37  mono                     available    [ =5.x  =stable ]
 38  nginx1                   available    [ =stable ]
 40  mock                     available    [ =stable ]
 41  postgresql11             available    [ =11  =stable ]
 43  livepatch                available    [ =stable ]
 44  python3.8                available    [ =stable ]
 45  haproxy2                 available    [ =stable ]
 46  collectd                 available    [ =stable ]
 47  aws-nitro-enclaves-cli   available    [ =stable ]
 48  R4                       available    [ =stable ]
  _  kernel-5.4               available    [ =stable ]
 50  selinux-ng               available    [ =stable ]
 51  php8.0                   available    [ =stable ]
 52  tomcat9                  available    [ =stable ]
 53  unbound1.13              available    [ =stable ]
 54  mariadb10.5              available    [ =stable ]
 55  kernel-5.10=latest       enabled      [ =stable ]
 56  redis6                   available    [ =stable ]
 57  ruby3.0                  available    [ =stable ]
 58  postgresql12             available    [ =stable ]
 59  postgresql13             available    [ =stable ]
 60  mock2                    available    [ =stable ]
 61  dnsmasq2.85              available    [ =stable ]
 62  kernel-5.15              available    [ =stable ]
 63  postgresql14             available    [ =stable ]
 64  firefox                  available    [ =stable ]
 65  lustre                   available    [ =stable ]
 66  php8.1                   available    [ =stable ]
 67  awscli1                  available    [ =stable ]
 68  php8.2                   available    [ =stable ]
 69  dnsmasq                  available    [ =stable ]
 70  unbound1.17              available    [ =stable ]
 71  golang1.19               available    [ =stable ]
 72  collectd-python3         available    [ =stable ]
[ssm-user@al2 bin]$ sudo amazon-linux-extras
  0  ansible2                 available    \
        [ =2.4.2  =2.4.6  =2.8  =stable ]
  2  httpd_modules            available    [ =1.0  =stable ]
  3  memcached1.5             available    \
        [ =1.5.1  =1.5.16  =1.5.17 ]
  6  postgresql10             available    [ =10  =stable ]
  9  R3.4                     available    [ =3.4.3  =stable ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0  =1.38.0
          =stable ]
 18  libreoffice              available    \
        [ =5.0.6.2_15  =5.3.6.1  =stable ]

AL2023の場合、ベースラインとなるパッケージのリストとバージョンがあり、メジャーリリースとマイナーリリースのタイミングで、新しいAMIに含まれるかたちで、新しいバージョンのパッケージが提供されます。
なので、AMI毎に利用できるパッケージのバージョンは基本固定
https://aws.amazon.com/linux/amazon-linux-2023/faqs/?nc1=h_ls

困るのは、要件や環境によっては、古いバージョンのパッケージを敢えて利用したい(せざるを得ない)ケースもあるかと思います。
そういった場合は、

  • AL2023のリリースに追随してパッケージをバージョンアップし、リグレッションテストを行う
  • 信頼できるリポジトリから入手したRPMを使ってインストールし、リグレッションテストを行う

等の選択を迫られることになりそうです。

3rd Partyのパッケージを提供するベンダーが、まだAL2023をサポートしていない

会社のセキュリティポリシーとして、EC2を利用する場合は、なんらかのウィルス対策ソフト等のインストールを定めているケースがあるかと思います。

ざっと調べた限り、
Trand Micro Cloud OneのAgent (20LTS) は、AL2023をサポートしているようです。

Microsoft Defender for Endpoint on Linuxは、まだのようです。

こういうケースがAL2環境で利用されている様々な3rd Partyパッケージで発生するものと思われます。

よって、現在AL2で利用している3rd Party製のパッケージが、AL2023でもサポートされるかは、確認した方がよいでしょう。

まとめ

実際に移行するとなると他にも検討すべき要素は多々あるかと思いますが、なにはともあれ現状のAL2環境がどうなっているか把握することが第一歩になるかと思います。

AL2環境でSystems Managerが有効化されていれば、SSMインベントリを有効化して、EC2で利用されているパッケージ情報の収集や、可視化を実現できますので、ぜひ活用しましょう。
使い方を学ぶ場合は、Systems Manager & QuickSightハンズオンがおすすめです。

Systems Managerは便利ですが、会社によっては野良AWSアカウントが乱立しており、社内でどれだけのAL2が動いているかそもそもよくわからん、というケースもあるでしょう。

よって、AL2023への移行を検討するだけでなく、会社全体で利用しているAWSアカウントの棚卸しや、情報の一元化、AWSが提供するガバナンス&コンプライアンス系のサービスを活用した統制強化といった活動とセットで取り組むべきと考えます(その方が予算も工数も確保しやすいでしょう)。

Discussion