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

时间:2020-04-14 01:07:38

标签: amazon-web-services amazon-elastic-beanstalk aws-code-deploy aws-codepipeline

我花了很多时间解决我的问题。我使用 CodePipeline CodeSource CodeBuild 生成docker容器(来自Bitbucket的代码)并将图像存储在 ECR 中。

CodeDeploy 中,我要将映像从 ECR 部署到 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.

EB的另一个错误:

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

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].

有人知道这里会发生什么吗?

我使用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

和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

第三步(CodeDeploy)失败:(

1 个答案:

答案 0 :(得分:0)

遇到同样的问题。第一次修复对我有用。列出所有可能解决此问题的修补程序:

  1. 原因:elasticbeanstalk出现了一些错误,这使多级构建器步骤失败了。 AWS日志会向您显示一条消息,例如 docker pull需要一个参数

解决方案:使用未命名的构建器。默认情况下,未命名阶段,您可以通过它们的整数来引用它们,对于第一个FROM指令,它们以0开头。在您的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. 原因:如果使用t2.micro作为实例类型。 npm install 命令有时在t2.micro实例上超时。

解决方案:更改Elastic Beanstalk正在使用t2.micro(例如t2.small)以外的实例类型

  1. 如果以上两个修复程序均无效,请尝试如下更改Dockerfile的COPY行:

    COPY包* .json ./

AWS有时更喜欢./而不是'。'