このエントリーをはてなブックマークに追加

Packer で AMI を作るときにタイムアウトした

Packer で AMI を作るとき、Provisors で時間がかかってくるようになると、次のようなエラーメッセージが表示されて終了することがあります。
今のところ、Ansible + Serverspec を実行しているため、かなり時間がかかってきたようです。。。


...
2016/05/11 07:52:03 packer: 2016/05/11 07:52:03 Allowing 300s to complete (change with AWS_TIMEOUT_SECONDS)
2016/05/11 07:52:24 ui: ==> amazon-ebs: Creating the AMI: foo-2016-05-10T22-45-36Z
2016/05/11 07:52:25 ui: amazon-ebs: AMI: ami-xxx
2016/05/11 07:52:25 ui: ==> amazon-ebs: Waiting for AMI to become ready...
2016/05/11 07:52:25 packer: 2016/05/11 07:52:25 Waiting for state to become: available
2016/05/11 07:52:25 packer: 2016/05/11 07:52:25 Allowing 300s to complete (change with AWS_TIMEOUT_SECONDS)
2016/05/11 07:54:39 ui: ==> amazon-ebs: Modifying attributes on AMI (ami-xxx)...
2016/05/11 07:54:39 ui: amazon-ebs: Modifying: description
...

こんなときは、メッセージのとおり AWS_TIMEOUT_SECONDS 環境変数を設定してから実行するとよくなりました。
また、標準出力に表示されるログがかなり長くなってきたので、ログファイルに出力するようにしました。

今のところ、次のような環境変数を設定しています。
$packer_name というのは AMI 名、$packer_role は AMI のロール名になります。
今のところ、$packer_name の $packer_role ごとに AMI を作っています。


$ export PACKER_LOG=1
$ export PACKER_LOG_PATH="packer-$packer_name-$packer_role-$(date +%Y%m%d%H%M%S).log"
$ export AWS_TIMEOUT_SECONDS=600

Packer でビルドしているとき、途中で終了しても気づけないことがあるので、ログファイルはちゃんとみた方がよいと思います。
CI などで Packer をビルドしているときは、CI のログを見るのが良いかなと思います。