CodeBuild에서 ECR 빌드 오류에서 얻은 네 가지 발견

5886 단어 도커ECRCodeBuildAWS


소개



ECR을 빌드하고 싶었습니다.
자신이 다음 빠지지 않도록 정리해 둔다.

TL;DR


  • 1. aws/codebuild/standard:2.0를 사용할 때는 runtime-versions를 지정해야합니다.
  • 2. 빌드를 실행하는 역할에 ECR을 조작하는 정책을 추가해야합니다.
  • 3.Docker의 특권 부여 체크를 넣을 필요가 있다
  • 4. ECR의 "푸시 명령 표시"를 살펴보고 환경 변수를 설정한다.

    4가지 오류 세부사항 및 대응 방법



    1. aws/codebuild/standard:2.0을 사용할 때는 runtime-versions를 지정해야 합니다.


    YAML_FILE_ERROR: This build image requires selecting at least one runtime version.
    
  • 이번은 Docker를 이용하고 있었기 때문에 이하의 설정을 buildspec.yml 에 추기할 필요가 있었다.

  • buildspec.yml
    phases:
      install:
        runtime-versions:
          docker: 18
    

    2. 빌드를 실행하는 역할에 ECR을 조작하는 정책을 추가해야 함


    COMMAND_EXECUTION_ERROR: Error while executing command: $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION). Reason: exit status 255
    
  • 기본적으로 ECR 정책은 설정되어 있지 않습니다.
  • 직접 설정을 추가해야 함
  • IAM에서 역할에 AmazonEC2ContainerRegistryPowerUser (ECR 작업 허용) 정책을 연결

  • 3.Docker의 특권 부여 체크를 넣을 필요가 있다


    [Container] 2019/09/07 17:00:26 Running command docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG . 
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 
    
  • Docker 데몬이 시작되지 않는 오류가 발생합니다.
  • CodeBuild는 실행 자체가 Docker (Ubuntu 등 선택)이지만, 그 중에서 Docker를 사용하기 때문에 검사가 필요합니다.


  • Docker in Docker와 같은 실행 Docker (Ubuntu) 위에 ECR을 빌드하기위한 Docker가 작동하는 이미지



  • 4. ECR의 "푸시 명령 표시"를 살펴보고 환경 변수를 설정합니다.


    [Container] 2019/09/07 17:32:13 Phase context status code: COMMAND_EXECUTION_ERROR Message: Error while executing command: docker push
    $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG. Reason: exit status 1 
    
  • 계정 ID의 환경 변수에 계속 IAM 사용자명을 넣는 실수를 하고 있었다.
  • ECR의 "푸시 명령 표시"에 푸시에 필요한 환경 변수 설정 샘플이 있으므로 확인하십시오.
  • 숨겨진 부분을 잘 보면 계정 ID라고 깨달을 수 있었다


  • 덧붙여서 build에 붙었다 buildspec.yml 는 이쪽.
  • 원시적이지만 echo 로 로그를 내보내는 것도 실수 발견으로 이어졌다.

  • buildspec.yml
    version: 0.2
    
    phases:
      install:
        runtime-versions:
          docker: 18
      pre_build:
        commands:
          - echo Logging in to Amazon ECR...
          - $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
      build:
        commands:
          - echo Build started on `date`
          - echo Building the Docker image...
          - echo $IMAGE_REPO_NAME
          - docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
          - echo docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
          - docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
      post_build:
        commands:
          - echo Build completed on `date`
          - echo Pushing the Docker image...
          - docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
          - printf '[{"name":"<container-definition>","imageUri":"%s"}]' $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG > artifacts.json
    
    artifacts:
      files: artifacts.json
    

    사이고에게


  • ECR의 build&push를 할 때의 빠짐 포인트는 이해만 하면 다시 한번 빠지지 않는 내용이었습니다.
  • 수동보다 편한 것을 실감할 수 있었으므로 파이프 라인등과 조합해 점점 최적화해 가고 싶습니다.

  • 여기 블로그 에도 AWS 관련 몇 가지 기사를 작성하기 시작했습니다.
  • 좋은 웹페이지 즐겨찾기