简体   繁体   English

AWS Elastic Beanstalk 错误:无法部署应用程序

[英]AWS Elastic Beanstalk error: Failed to deploy application

I spent many hours to solve my problem.我花了很多时间来解决我的问题。 I use CodePipeline : CodeSource , CodeBuild that produces docker container (code from Bitbucket) and stores the image in ECR .我使用CodePipelineCodeSourceCodeBuild生成 docker 容器(来自 Bitbucket 的代码)并将图像存储在ECR中。

In CodeDeploy I want to deploy that image from ECR to Elastic Beanstalk :CodeDeploy 中,我想将该图像从ECR部署到Elastic Beanstalk

Errors in Elastic Beanstalk: Elastic Beanstalk 中的错误:

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 6). Application update failed 15 seconds ago and took 59 seconds.

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.

Failed to deploy application.

Unsuccessful command execution on instance id(s) 'i-04df549361597208a'. Aborting the operation.

Another error from EB: EB的另一个错误:

Incorrect application version "code-pipeline-1586854202535-MyflashcardsBuildOutput-ce0d6cd7-8290-40ad-a95e-9c57162b9ff1" 
(deployment 9). Expected version "Sample Application" (deployment 8).

Error in CodeDeploy: CodeDeploy 中的错误:

Action execution failed
Deployment completed, but with errors: 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. Failed to deploy application. Unsuccessful command execution on instance id(s) 'i-04df539061522208a'. Aborting the operation. [Instance: i-04df549333582208a] Command failed on instance. An unexpected error has occurred [ErrorCode: 0000000001].

Does anyone know what happens here?有谁知道这里发生了什么?

I use Dockerfile:我使用 Dockerfile:

### STAGE 1: Build ###
FROM node:12.7-alpine AS build
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build

### STAGE 2: Run ###
FROM nginx:1.17.1-alpine
EXPOSE 80
COPY --from=build /usr/src/app/dist /usr/share/nginx/html

and buildspec.yml:和 buildspec.yml:

version: 0.2
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - $(aws ecr get-login --region eu-west-1 --no-include-email)
      - REPOSITORY_URI=176901363719.dkr.ecr.eu-west-1.amazonaws.com/myflashcards
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=myflashcards
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image
      - docker build --tag $REPOSITORY_URI:latest .
  post_build:
    commands:
      - echo Build completed on `date`
      - echo Pushing the Docker images...
      - docker push $REPOSITORY_URI:latest
      - echo Writing image definitions file...
      - printf '[{"name":"eagle","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
#      - echo Deleting old artifacts
#      - aws s3 sync dist/ s3://$BUCKET_NAME --delete
artifacts:
  files: imagedefinitions.json

The third step (CodeDeploy) fails:(第三步(CodeDeploy)失败:(

Ran into the same issue.遇到同样的问题。 The first fix worked for me.第一个修复对我有用。 Listing down all possible fixes which can resolve this issue:列出所有可以解决此问题的可能修复:

  1. Reason: some bug with elasticbeanstalk, which is making the multi-stage builder step to fail.原因:elasticbeanstalk 的一些错误,导致多阶段构建器步骤失败。 AWS logs would show you a message like docker pull requires exactly one argument AWS 日志会向您显示一条消息,例如docker pull 需要一个参数

Solution: Use unnamed builder .解决方案:使用未命名的 builder By default, the stages are not named, and you refer to them by their integer number, starting with 0 for the first FROM instruction.默认情况下,这些阶段没有命名,您可以通过它们的 integer 编号来引用它们,第一个 FROM 指令从 0 开始。 Make changes in your docker file as below:在您的 docker 文件中进行如下更改:

### STAGE 1: Build ###
FROM node:12.7-alpine
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build

### STAGE 2: Run ###
FROM nginx:1.17.1-alpine
EXPOSE 80
COPY --from=0 /usr/src/app/dist /usr/share/nginx/html
  1. Reason: Incase using t2.micro as instance type.原因:Incase 使用 t2.micro 作为实例类型。 npm install command sometimes times out on the t2.micro instance. npm 安装命令有时会在 t2.micro 实例上超时。

Solution: Change the instance type that Elastic Beanstalk is using something other than t2.micro(say t2.small)解决方案:更改 Elastic Beanstalk 使用的实例类型不是 t2.micro(比如 t2.small)

  1. If none of the above two fixes work, try changing the COPY line of your Dockerfile as below:如果上述两个修复都不起作用,请尝试更改 Dockerfile 的 COPY 行,如下所示:

    COPY package*.json./复制包*.json./

As AWS sometimes prefer./ over '.'正如 AWS 有时更喜欢 ./ 而不是 '.'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM