ElasticBeanstalk WorkerでElasticBeanstalk::ExternalInvocationErrorが発生した場合の確認と対処
丹内です。
掲題のエラーが発生したので、調査と対策を行いました。
環境
64bit Amazon Linux 2015.03 v1.4.1 running Ruby 2.2 (Passenger Standalone) Rails 4.2.1
調査
ログ(/var/log/eb-activity.log
)は以下のとおりです。
[2015-08-19T06:06:53.608Z] INFO [30104] - [CMD-SelfStartup/AddonsAfter/StartSqsd/02-start-sqsd.sh] : Starting activity... [2015-08-19T06:06:54.097Z] INFO [30104] - [CMD-SelfStartup/AddonsAfter/StartSqsd/02-start-sqsd.sh] : Activity execution failed, because: missing required parameter params[:table_name] - (ArgumentError) (ElasticBeanstalk::ExternalInvocationError) caused by: missing required parameter params[:table_name] - (ArgumentError) (Executor::NonZeroExitStatus)
以下の単語が気になります。
- start-sqsd.sh
- missing required parameter params[:table_name]
- ElasticBeanstalk::ExternalInvocationError
この情報から、「EB Workerのsqsd起動時に何かのtable
関係のエラーが発生している」ということが予想できます。
このtable
が何かというのが気になったのですが、都元さんから「例えば内部でSQLiteなど何らかのDBを使っていて、それが壊れているのでは」という噂を聞き、これかなと思いました。
また、調べてみるとEB Workerは内部でDynamoDBを使っているので、そこにアクセスできなくてもエラーが発生するようです。(この場合エラーは今回とは違うものになるようです。)
蛇足ですが、上記リンク先の情報によると、.ebextensions
以下のyamlファイルの改行をCR/LF(Windows)で行っていてもエラーになるそうです。
対策
当該EnvironmentをRebuildしました。
まとめ
EBは内部で複数のサービス・ソフトウェアを活用しているため、何らかのエラーに直面したときにその存在を思い出せれば、解決への道筋を見つけやすいのかなと思いました。