Amazon LinuxのEOL情報(というより継続実績)を調べてみる

  • 13
    いいね
  • 2
    コメント

AWS上でLinuxを使うなら、Amazon Linuxの方が何かと便利な事があるのかなーと考えて、普段使いのOSを変えてみようと思っては見たものの、UbuntuやDebian、CentOSであれば公開されているようなEOL情報が見つかりません。

実際、どの程度の期間にわたって、利用可能なのかを調べてみたので、結果を記録しておきます。

最初に結論

公式にはEOL情報などのライフサイクルは明示されていないので、今回調べてみた内容からの 推測 です。

  • ここ3年ほどは、1年から1年半程度は更新が維持されている模様
    • yumのリポジトリ情報からの推測
    • メンテナンスが終わっているという明確な情報は見つけられていない
  • とは言え、EOLは明示されておらず、もしかしたら半年位しか持たないかも知れない
    • 運やAWS側の都合次第?
  • これを何かしらのサーバとして運用する場合には、半年から1年に一回は releasever を更新して、アップグレード を行い続けるという意思が必要
    • 構築作業がAnsible等で完全にコード化され、動かすアプリも常に最新の環境でテストを廻して継続的インテグレーションが実現されているなら気にならないのだろうと思う
      • デフォルトは releasever=latest だしね
    • レガシーな環境だと、かなりツライ

最新のオシャレな環境だと問題ないけど、古いアプリを移設して動かす環境としては不向きだなーという印象。使い所は注意が必要か。

普段使いの実験用としては、特に問題は無い。

Amazon Linuxのライフサイクル

http://aws.amazon.com/jp/amazon-linux-ami/

過去のリリースノートを見ると、2011年9月に初めてのリリースがあり、その後は6ヶ月間隔で毎年3月・9月にリリースされている様子が伺えます。

AWSのWebサイトやドキュメントから、ライフサイクルのヒントになる文言を引用します。

Amazon Linux AMIの紹介サイトより
http://aws.amazon.com/jp/amazon-linux-ami/

AWS サポート
AWS サポートに加入すると、基本 Amazon Linux AMI のインストールと使用のサポートを受けることができます。AWS サポートの詳細については、AWS サポートのウェブページをご覧ください。
AMI の旧バージョンと更新パッケージは、新しい Amazon Linux AMI バージョンがリリースされても、継続して Amazon EC2 で起動でき、Amazon Linux AMI yum リポジトリからインストールできます。

ただし、最良の結果を実現するには、最新バージョンの Amazon Linux AMI に移行し使用していただくことをお勧めします。

----
英文

AWS Support
Support for installation and use of the base Amazon Linux AMI is included through subscriptions to AWS Support. For more information on AWS Support please visit the AWS Support web page.
Older versions of the AMI and updated packages will continue to be available for launch in Amazon EC2 and for installation from the Amazon Linux AMI yum repository even as new Amazon Linux AMI versions are released.

ポイントは 「AMI の旧バージョンと更新パッケージは、新しい Amazon Linux AMI バージョンがリリースされても、継続して Amazon EC2 で起動でき、Amazon Linux AMI yum リポジトリからインストールできます。」 辺り。

Amazon Linux AMI User Guideより
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AmazonLinuxAMIBasics.html#product-life-cycle

製品ライフサイクル

Amazon Linux AMI のセキュリティと機能強化は定期的に更新されます。Amazon Linux インスタンスでデータまたはカスタム設定を保存する必要がない場合は、最新の Amazon Linux AMI で新しいインスタンスを再作成できます。Amazon Linux インスタンスでデータまたはカスタム設定を保存する必要がある場合は、Amazon Linux yum リポジトリを介してこれらのインスタンスを維持できます。yum リポジトリには、更新されたすべてのパッケージが含まれます。実行中のインスタンスにこれらの更新を適用するよう選択できます。

新しいバージョンの AMI がリリースされても、古いバージョンの AMI と更新パッケージは引き続き利用できます。AWS サポートを介して古いバージョンの Amazon Linux; サポートをお求めの場合、Amazon では、サポートプロセスの一環として、新しいバージョンに移行するようお客様にお願いすることがあります。

----
英文

Product Life Cycle

The Amazon Linux AMI is updated regularly with security and feature enhancements. If you do not need to preserve data or customizations on your Amazon Linux instances, you can simply relaunch new instances with the latest Amazon Linux AMI. If you need to preserve data or customizations for your Amazon Linux instances, you can maintain those instances through the Amazon Linux yum repositories. The yum repositories contain all the updated packages. You can choose to apply these updates to your running instances.

Older versions of the AMI and update packages will continue to be available for use, even as new versions are released. In some cases, if you're seeking support for an older version of Amazon Linux; through AWS Support, we might ask you to move to newer versions as part of the support process.

上述引用とだいたい一緒だが、こちらもポイントは 「新しいバージョンの AMI がリリースされても、古いバージョンの AMI と更新パッケージは引き続き利用できます。AWS サポートを介して古いバージョンの Amazon Linux; サポートをお求めの場合、Amazon では、サポートプロセスの一環として、新しいバージョンに移行するようお客様にお願いすることがあります。」 辺り。

事前予想

半年に1回のリリースなので、FedoraやUbubtu(LTS及び非LTS合わせて)と同じようなイメージ。

「AMI の旧バージョンと更新パッケージは、新しい Amazon Linux AMI バージョンがリリースされても、継続して Amazon EC2 で起動でき、Amazon Linux AMI yum リポジトリからインストールできます。」 という事なので、2011.09もまだ継続して利用出来るのか? ホントに? まもなく5年経つけど? (2016/06現在)

「AWS サポートを介して古いバージョンの Amazon Linux; サポートをお求めの場合、Amazon では、サポートプロセスの一環として、新しいバージョンに移行するようお客様にお願いすることがあります。」 という事なので、さすがに2011.09がずっっと使い続けられるっていうのも出来すぎた話だし、良くて2〜3年程度とかかな? 3年持てば御の字な気もする。

とか思っていた時期が私にもありました。

実績を調べてみた

リポジトリの情報を見たら何かわかるんでは無いかと思って、ファイルを漁ってみると次のようなファイルが見つかった。

[ec2-user@ip-172-31-6-159 ~]$ ls -l  /var/cache/yum/x86_64/latest/*
/var/cache/yum/x86_64/latest/amzn-main:
total 27544
-rw-r--r-- 1 root root        0 Jun  3 13:40 cachecookie
-rw-r--r-- 1 root root    36185 Mar 16 21:59 comps.xml
-rw-r--r-- 1 root root  5207027 Mar 16 21:59 filelists.sqlite.bz2
drwxr-xr-x 2 root root     4096 Jun  3 13:23 gen
-rw-r--r-- 1 root root      783 Jun  3 13:40 mirrorlist.txt
-rw-r--r-- 1 root root 19315048 Mar 16 21:59 other.sqlite.bz2
drwxr-xr-x 2 root root     4096 Jun  3 13:23 packages
-rw-r--r-- 1 root root  3624733 Mar 16 21:59 primary.sqlite.bz2
-rw-r--r-- 1 root root     2142 Mar 16 21:59 repomd.xml

/var/cache/yum/x86_64/latest/amzn-updates:
total 6360
-rw-r--r-- 1 root root       0 Jun  3 13:40 cachecookie
-rw-r--r-- 1 root root   36185 May 18 01:36 comps.xml
-rw-r--r-- 1 root root 1239551 May 18 01:36 filelists.sqlite.bz2
drwxr-xr-x 2 root root    4096 Jun  3 13:23 gen
-rw-r--r-- 1 root root     813 Jun  3 13:40 mirrorlist.txt
-rw-r--r-- 1 root root 4401146 May 18 01:36 other.sqlite.bz2
drwxr-xr-x 2 root root    4096 Jun  3 13:23 packages
-rw-r--r-- 1 root root  487455 May 18 01:36 primary.sqlite.bz2
-rw-r--r-- 1 root root    2390 May 18 01:36 repomd.xml
-rw-r--r-- 1 root root  320732 May 18 01:36 updateinfo.xml.gz

それぞれ中身を見てみると、updateinfo.xml.gz や primary.sqlite.bz2 にパッケージの更新時期に関する情報が含まれている事がわかった。(yumリポジトリの仕様は特に調べていませんが、明らかにそれとわかる情報が記録されています)

これを元に、次のようなスクリプトで amzn-main 及び amzn-updates リポジトリの最終更新日と、前述の二つの最終更新日の差から更新の継続期間を算出してみた。

primary.sqlite.bz2 に含まれる、各パッケージのtime_build(構築日時だと思う)の最大値をリポジトリの最終更新日と見なしています。

check_amznlinux_last_update.sh
#!/bin/bash

vers="2011.09 2012.03 2012.09 2013.03 2013.09 2014.03 2014.09 2015.03 2015.09 2016.03 2016.09 2017.03"
repos="amzn-main amzn-updates"

for v in $vers; do
  sudo sed -i -r -e "s|^(releasever)=.*|\1=$v|" /etc/yum.conf
  sudo yum check-updatee > /dev/null 2>&1
  echo $v
  ts_a=
  ts_b=
  for r in $repos; do
    bzcat /var/cache/yum/x86_64/$v/$r/primary.sqlite.bz2  > $r.sqlite
    ts=`echo "select max(time_build) from packages;" | sqlite3 $r.sqlite`
    if [ -z "$ts_a" ]; then
      ts_a=$ts
    elif [ -z "$ts_b" ]; then
       ts_b=$ts
    fi
    printf "%015s last update: " $r
    date -d "@$ts"
  done
  printf "   duration days of updates: %s days\n" $(echo $(($ts_b-$ts_a))/$((60*60*24)) | bc)
done

結果は次の通り。

2011.09
      amzn-main last update: 2011年  9月 21日 水曜日 07:22:04 UTC
   amzn-updates last update: 2012年  4月  6日 金曜日 08:15:41 UTC
   duration days of updates: 198 days
2012.03
      amzn-main last update: 2012年  3月 27日 火曜日 01:26:55 UTC
   amzn-updates last update: 2012年 10月 22日 月曜日 21:07:07 UTC
   duration days of updates: 209 days
2012.09
      amzn-main last update: 2012年 10月 10日 水曜日 23:57:06 UTC
   amzn-updates last update: 2013年  4月  4日 木曜日 17:50:34 UTC
   duration days of updates: 175 days
2013.03
      amzn-main last update: 2013年  3月 27日 水曜日 02:39:42 UTC
   amzn-updates last update: 2014年 10月 15日 水曜日 06:02:45 UTC
   duration days of updates: 567 days
2013.09
      amzn-main last update: 2013年  9月 25日 水曜日 00:38:10 UTC
   amzn-updates last update: 2015年  1月 27日 火曜日 19:09:21 UTC
   duration days of updates: 489 days
2014.03
      amzn-main last update: 2014年  3月 26日 水曜日 02:53:37 UTC
   amzn-updates last update: 2015年  1月 27日 火曜日 19:15:43 UTC
   duration days of updates: 307 days
2014.09
      amzn-main last update: 2014年  9月 19日 金曜日 19:18:18 UTC
   amzn-updates last update: 2016年  2月 19日 金曜日 02:40:53 UTC
   duration days of updates: 517 days
2015.03
      amzn-main last update: 2015年  3月 19日 木曜日 17:26:48 UTC
   amzn-updates last update: 2016年  2月 19日 金曜日 00:21:41 UTC
   duration days of updates: 336 days
2015.09
      amzn-main last update: 2015年  9月 16日 水曜日 00:48:04 UTC
   amzn-updates last update: 2016年  7月  6日 水曜日 19:25:32 UTC
   duration days of updates: 294 days
2016.03
      amzn-main last update: 2016年  3月 16日 水曜日 19:57:39 UTC
   amzn-updates last update: 2016年 12月  6日 火曜日 20:58:06 UTC
   duration days of updates: 265 days
2016.09
      amzn-main last update: 2016年  9月 23日 金曜日 01:09:53 UTC
   amzn-updates last update: 2017年  3月 29日 水曜日 19:46:45 UTC
   duration days of updates: 187 days
2017.03
      amzn-main last update: 2017年  4月  1日 土曜日 01:37:24 UTC
   amzn-updates last update: 2017年  5月 18日 木曜日 23:44:38 UTC
   duration days of updates: 47 days

amzn-main は、リリース日が最終更新日でその後は更新されてないと思われるような日付となっており、amzn-updatesにはセキュリティアップデート等のための更新によって半年〜1年半程度経過するまではメンテナンスが継続していた様子がうかがえる。

これを見ると、「新しいバージョンの AMI がリリースされても、古いバージョンの AMI と更新パッケージは引き続き利用できます。」というのは、たしかに間違ってはいないのだろうが、ちょっと言葉が足りておらず誤解を招くような文章に思える。

「更新パッケージは引き続き利用できます。」は「更新パッケージは メンテナンスが終了してセキュリティアップデートもされていないが 引き続き利用できます。」が実情に合った説明では無いだろうか。

まぁ、ディストリビューションを維持し続けるって大変な工数がかかるでしょうしね。しようが無いですね。

でも、メンテナンスしてないなら、それを情報として開示はして欲しいなと思いました。

Amazon Linuxが同一バージョンで5年、少なくとも3年くらい持つならば、使いやすいのになー。


2017/05/30: 2016.09 と 2017.03 を対象に追加して実績更新