先月、Amazon Linux AMI 2014.09がリリースされましたね。
仕事の案件でVPCを新規に構築しているのですが、せっかくなので最新のAMIを使おうと決めていました。今回は事情により、Instance Stored-backed(S3ベース)のEC2インスタンスを使う必要があったため、amzn-ami-hvm-2014.09.0.x86_64-s3 (ami-f70827f6)
からEC2インスタンスを起動することにしました。
Chefで必要なコンポーネントをインストールして、Instance Store-Backed Linux AMI の作成を参考にAMIを作成し、いざEC2インスタンスを起動してみると、
Instance Status Checksが失敗しています。
原因を探ろうと思ったのですが、SSHログインもできず、正常起動しないのでManagementConsoleからSystemLogも見れません。。。
色々試してみた結果、EC2インスタンスが起動する・しないパターンがわかってきました。
AMI | 仮想化方式 | 結果(○・・・起動成功、×・・・起動失敗) |
---|---|---|
amzn-ami-hvm-2014.09.0.x86_64-s3 (ami-f70827f6) | HVM | × |
amzn-ami-pv-2014.09.0.x86_64-s3 (ami-bb0827ba) | PV | × |
amzn-ami-hvm-2014.03.2.x86_64-s3 (ami-a3c18fa2) | HVM | ○ |
amzn-ami-pv-2014.03.2.x86_64-s3 (ami-9bdc929a) | PV | ○ |
分かったこと
- Amazon Linux 2014.09 のAMIからはEC2インスタンスが正常に起動できる
- 仮想化方式(HVM, PV)は関係ない
- Amazon Linux 2014.03 からAMIを作成するとEC2インスタンスの起動に成功する
- Amazon Linux 2014.03 でも
yum update
してカーネル等をバージョンアップすると起動に失敗する - VPC,Non-VPC(EC2-Classic)は関係ない
- AMI作成ツールから何もエラーは出力されない(すべてほぼ同じ出力結果)
以上のことから、Amazon公式のAMIは正常で、AMI作成時に何かしらの失敗をしているのではないかという推測がでました。
すると、AmazonからAMI作成ツール(CLI)の最新(1.5.4)のChengeLogで以下のような記述がありました。
Version 1.5.4
Ensure that the filesystem features of newly created AMIs more closely match the features of the root filesystem that they were created from. This fixes a bug with the tools that prevented a rebundled 2014.09 Amazon Linux AMI from booting.
まさにドンピシャな内容でした。つまりは、CLIツールのバグだったわけです。
というわけで、以下のように対応してみました。
yum update
で諸々アップデートします。
$ sudo yum update
読み込んだプラグイン:priorities, update-motd, upgrade-helper
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ aws-amitools-ec2.noarch 0:1.5.3-0.0.amzn1 を 更新
---> パッケージ aws-amitools-ec2.noarch 0:1.5.4-1.1.amzn1 を アップデート
---> パッケージ aws-cli.noarch 0:1.4.3-1.1.amzn1 を 更新
---> パッケージ aws-cli.noarch 0:1.4.4-1.0.amzn1 を アップデート
---> パッケージ curl.x86_64 0:7.38.0-1.46.amzn1 を 更新
---> パッケージ curl.x86_64 0:7.38.0-1.48.amzn1 を アップデート
---> パッケージ libcurl.x86_64 0:7.38.0-1.46.amzn1 を 更新
---> パッケージ libcurl.x86_64 0:7.38.0-1.48.amzn1 を アップデート
--> 依存性解決を終了しました。
依存性を解決しました
===============================================================================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
===============================================================================================================================================================================================
更新します:
aws-amitools-ec2 noarch 1.5.4-1.1.amzn1 amzn-updates 104 k
aws-cli noarch 1.4.4-1.0.amzn1 amzn-updates 489 k
curl x86_64 7.38.0-1.48.amzn1 amzn-updates 277 k
libcurl x86_64 7.38.0-1.48.amzn1 amzn-updates 249 k
トランザクションの要約
===============================================================================================================================================================================================
更新 4 パッケージ
総ダウンロード容量: 1.1 M
Is this ok [y/d/N]: y
Downloading packages:
(1/4): aws-amitools-ec2-1.5.4-1.1.amzn1.noarch.rpm | 104 kB 00:00
(2/4): aws-cli-1.4.4-1.0.amzn1.noarch.rpm | 489 kB 00:00
(3/4): curl-7.38.0-1.48.amzn1.x86_64.rpm | 277 kB 00:00
(4/4): libcurl-7.38.0-1.48.amzn1.x86_64.rpm | 249 kB 00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 2.7 MB/s | 1.1 MB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
更新します : libcurl-7.38.0-1.48.amzn1.x86_64 1/8
更新します : curl-7.38.0-1.48.amzn1.x86_64 2/8
更新します : aws-amitools-ec2-1.5.4-1.1.amzn1.noarch 3/8
更新します : aws-cli-1.4.4-1.0.amzn1.noarch 4/8
整理中 : aws-amitools-ec2-1.5.3-0.0.amzn1.noarch 5/8
整理中 : aws-cli-1.4.3-1.1.amzn1.noarch 6/8
整理中 : curl-7.38.0-1.46.amzn1.x86_64 7/8
整理中 : libcurl-7.38.0-1.46.amzn1.x86_64 8/8
検証中 : aws-amitools-ec2-1.5.4-1.1.amzn1.noarch 1/8
検証中 : libcurl-7.38.0-1.48.amzn1.x86_64 2/8
検証中 : aws-cli-1.4.4-1.0.amzn1.noarch 3/8
検証中 : curl-7.38.0-1.48.amzn1.x86_64 4/8
検証中 : libcurl-7.38.0-1.46.amzn1.x86_64 5/8
検証中 : aws-amitools-ec2-1.5.3-0.0.amzn1.noarch 6/8
検証中 : aws-cli-1.4.3-1.1.amzn1.noarch 7/8
検証中 : curl-7.38.0-1.46.amzn1.x86_64 8/8
更新:
aws-amitools-ec2.noarch 0:1.5.4-1.1.amzn1 aws-cli.noarch 0:1.4.4-1.0.amzn1 curl.x86_64 0:7.38.0-1.48.amzn1 libcurl.x86_64 0:7.38.0-1.48.amzn1
完了しました!
AMIを作成して、EC2インスタンスを起動すると正常に起動しました!
最後に
AMIツールのバグだったわけですが、先月からずっと調査していて悩んでいたので、EC2インスタンスの大量リブートの件もそうですが、何かしらのアナウンスはして欲しいなと思いました。