本日も乙

ただの自己満足な備忘録。

Amazon Linux 2014.09(Instance Stored-backed)からAMIを作成するとEC2インスタンスのStatusChecksが失敗する件について

先月、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-run-failed

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インスタンスの大量リブートの件もそうですが、何かしらのアナウンスはして欲しいなと思いました。