下記記事参考になったのだが、
http://dev.classmethod.jp/cloud/aws/rolling-update-when-codedeploy-using-elb-health-check/
ValidateService で行うと該当の instance の ELB への登録に進まず、デッドロックしてタイムアウトする。
同じことを AfterAllowTraffic で行えば意図通りの動作になったように思われる。
と言うより、
BeforeAllowTraffic ~ AllowTraffic ~ AfterAllowTraffic の間で ELB に繋いだ instance が InService になるのを待つ処理をしているようだ。Deployの詳細画面でインスタンスアクティビティを見ると AllowTraffic にかかる時間が InService の判定時間に一致している。
従って、lifecycle event hook で InService を待つ必要は無い、と言うことになる。