ElasticBeanstalk WorkerでElasticBeanstalk::ExternalInvocationErrorが発生した場合の確認と対処

2015.08.20

丹内です。
掲題のエラーが発生したので、調査と対策を行いました。

環境

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は内部で複数のサービス・ソフトウェアを活用しているため、何らかのエラーに直面したときにその存在を思い出せれば、解決への道筋を見つけやすいのかなと思いました。