web-dev-qa-db-ja.com

Dockerが正しくないバージョンのAWS Elastic Beanstalk

トラビスを使用してGithubからAWS Elastic BeanstalkにDockerイメージをデプロイしています。その部分は問題なく実行され、実際のデプロイメントは0で終了し、S3バケットに.Zipファイルがあります。

問題は、AWSを使用するのが初めてなので、コードがGithubからデプロイされたため、サンプルアプリケーションを使用してアプリを作成し、デプロイ後、次のメッセージでヘルスステータスが劣化(赤い感嘆符)として表示されるということです。

ERROR
During an aborted deployment, some instances may have deployed the new application version. To ensure all instances are running the same version, re-deploy the appropriate application version.

原因に行く場合、私はこれを見つけます:

  • アプリケーションの展開が2020-05-01T16:01:58Zで終了ステータス1で失敗し、エラー:エンジンの実行でエラーが発生しました。
  • 不適切なアプリケーションバージョン "travis-e55e05342a8cc16f3f28f8e184735667a9531ffa-1588311901"(デプロイメント4)。予期されたバージョン「サンプルアプリケーション」(デプロイメント1)。

サンプルアプリケーションを削除して、アップロードしたアプリケーションを再デプロイしたところ、特定のエラーが発生しました。最後のメッセージでわかるように、私はこれをすでに3回展開しており、同じ結果を得ています。

最後にS3バケットからZipファイルをダウンロードし、基本的にsrcおよびpublicフォルダーと、package.json.gitignore、すべてのdockerファイルなどのルートフォルダー内のすべてのファイルを見つけました。 。


編集

これをテストするために、githubに2つの別々のリポジトリを作成しました。最初のリポジトリはDockerコンテナ内の静的ページで、非常に単純です。 EBで環境を作成し、すべてをサンプルアプリで開始します。次に、変更をgithubにプッシュし、travisがそれを実行して、アプリをAWSにデプロイします。これは問題なく機能し、アプリの環境はエラーなしで更新されます。これはレポです: https://github.com/rhernandog/docler-static-page-aws

2番目のリポジトリは単純な反応アプリです。同じ手順で、サンプルアプリを使用してEBで環境を作成します。コードをgithubにプッシュすると、travisがそれを実行してAWSにデプロイします。これは失敗し、同じエラーが発生し続けます:

Environment health has transitioned from Info to Degraded. Command failed on all
instances. Incorrect application version found on all instances. Expected version
"Sample Application" (deployment 1). Application update failed 1 second ago and
took 2 minutes.

これは、反応アプリのリポジトリです: https://github.com/rhernandog/react-docker-awseb

Dockerに関しては、すべて私のローカルマシンで正常に動作します。


編集2

@stefansundinの提案に基づいて、アプリをEBに再デプロイしてログを確認しました。詳細については完全なログを調べたところ、次のことがわかりました:/ var/log/cfn-hup.log

2020-05-14 17:07:42,605 [WARNING] Action for aws-eb-command-handler exited with 1, returning FAILURE

エラーが見つかった唯一の場所は、エンジンログファイル(/ var/log/eb-engine.log)でした

2020/05/14 17:07:42.514601 [INFO] Executing instruction: Docker Specific Build Application
2020/05/14 17:07:42.514605 [INFO] start build docker app
2020/05/14 17:07:42.514615 [INFO] fetch image name
2020/05/14 17:07:42.514639 [INFO] authenticate with ECR if the image is in an ECR repo
2020/05/14 17:07:42.514644 [INFO] pull docker image if update is not false in dockerrun.aws.json
2020/05/14 17:07:42.514657 [INFO] Running command /bin/sh -c docker pull node:12-Alpine AS builder
2020/05/14 17:07:42.558923 [ERROR] "docker pull" requires exactly 1 argument.

つまり、基本的にこれはdockerfile:FROM node:12-Alpine AS builderに不満があります。ファイル全体をリポジトリで確認できます。 https://github.com/rhernandog/react-docker-awseb/blob/master/Dockerfile

重要なのは、これがローカルマシンで発生しないのはなぜですか。また、ビルドコマンドから実際にファイルを取得してnginxフォルダーにコピーするにはどうすればよいですか?

それが実際にログファイルで見つかった唯一のエラーです。

2
Rodrigo

AWS Docs 言う

この問題を解決するには、別の展開を開始します。機能していることがわかっている以前のバージョンを再デプロイするか、デプロイメント中にヘルスチェックを無視するように環境を構成し、新しいバージョンを再デプロイして強制的にデプロイメントを完了することができます。

また、間違ったアプリケーションバージョンを実行しているインスタンスを特定して終了することもできます。 Elastic Beanstalkは、正しいバージョンのインスタンスを起動して、終了したインスタンスを置き換えます。 EB CLI healthコマンドを使用して、間違ったアプリケーションバージョンを実行しているインスタンスを特定します。

アプリケーションを実行するインスタンスを削除して、フレッシュインストールを開始できますか?

また、CodePipelineを使用してコードをElastic Beanstalkにデプロイできます。コードをTravisでビルドし、デプロイステージを使用してデプロイする場合は、S3フォルダーをソースステージに使用してビルドプロセスをスキップし、新しいアプリをElasticにインストールできます。豆の木。新しいアプリを環境にインストールしているときに、設定に誤りがある可能性があります。

質問を間違えた場合は、インスタンスを終了して新しいインスタンスを開始してください。

0
Mert Kıray

Elastic BeanstalkでDockerを使用していません。 Elastic BeanstalkのデプロイでRubyが失敗した場合、ログから最後の100行を要求すると、通常は問題が見つかります。[ログ]-> [ログのリクエスト]に移動すると、 ->「最後の100行」。

それが失敗した場合、インスタンスにSSHでログインし、/var/log。多分 docker psおよびdocker logsが役立つ場合があります。

0
stefansundin

プラットフォームブランチで新しいウェブサーバー環境を作成するときに、「64ビットAmazon Linuxで実行されているDocker」を選択します。

0
mukiza works