AWS CodeBuild로 ECR로 이미지 업로드

김현진·2021년 7월 24일
0

AWS ECR(Elastic Container Repository)로 도커 이미지 업로드

1. 준비사항

  • 깃헙에 프로젝트가 하나 올라가있어야함(DockerFile도 같이 올라가야함)
  • sample: 샘플
  • ECR 레포지토리가 생성이 되어 있어야한다.

2. Create IAM role & Policy

  • AWS Concsole에 로그인
  • 상단 검색창에 IAM 검색
  • 사이드바에서 정책 클릭 후 정책생성 클릭
  • JSON 탭으로 이동
  • 해당 내용 입력
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CloudWatchLogsPolicy",
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "S3GetObjectPolicy",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "S3PutObjectPolicy",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "ECRPullPolicy",
      "Effect": "Allow",
      "Action": [
        "ecr:BatchCheckLayerAvailability",
        "ecr:GetDownloadUrlForLayer",
        "ecr:BatchGetImage"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "ECRAuthPolicy",
      "Effect": "Allow",
      "Action": [
        "ecr:GetAuthorizationToken"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid": "S3BucketIdentity",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketAcl",
        "s3:GetBucketLocation"
      ],
      "Resource": 
        "*"
    }
  ]
}
  • 정책이름 기입 후 정책생성 버튼 클릭(이미지파일 참조)


  • 정책 생성 후 IAM 역할생성 (사이드바에서 역할페이지로 이동 후 역할만들기 버튼 클릭)

  • CodeBuild 버튼 클릭 후 다음버튼 클릭(이미지 파일 참조)

  • 검색창에 codeBuild 검색을 해서 아까 만든 정책을 클릭 후 다음으로 넘어간다 태그 페이지는 그냥 넘어가도 된다.(이미지 파일 참조)

  • 역할이름을 정한 후 역할생성을 한다.(이미지 파일 참조)

  • 아까 정책추가 할때 한개의 정책을 누락하여 하나 추가를 한다.(아니면 아까 정책생성때 해당 정책을 추가해도 된다 이미지 파일을 하나 더 찍기 귀찮아서 정책을 추가하였음)(AmazonEC2ContainerRegistryPowerUser)
    (정책생성 버튼 클릭 후 AmazonEC2ContainerRegistryPowerUser 추가하면 된다. 해당 권한이 없으면 ECR에 이미지 올릴때 codeBuild에서 에러가 발생한다.)

3. Create CodeBuild Project

  • AWS 상단 검색 창에 CodeBuild를 검색 후 코드빌드 프로젝트 생성을 클릭한다.
    (설정할게 많아 이미지를 여러개 찍어서 업로드를 하겠습니다)

  • 프로젝트 이름을 설정한다(이미지 참조)

  • 저는 깃헙에 master에 푸쉬가 되면 ECR로 docker image를 업로드 할꺼기 때문에 github으로 선택했음(이미지 파일 참조)

  • 자세한 내용은 이미지 파일 참조

-자세한 내용은 이미지 파일참조 하되 기존 깃헙저장소에 buildspec.yml파일 없다면 업로드를 해야된다.
(해당프로젝트 루트에 위치를 해야 인식을 하니 참조!)
(하단 예제에서 ECR레포지토리 이름은 각자의 레포지토리 이름을 입력을 해야한다.)

version: 0.2

phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws --version
      - echo $AWS_DEFAULT_REGION
      - $(aws ecr get-login --region $AWS_DEFAULT_REGION --no-include-email)
      - REPOSITORY_URI=872144589073.dkr.ecr.us-east-1.amazonaws.com/ecs_test
      - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7)
      - IMAGE_TAG=${COMMIT_HASH:=latest}
  build:
    commands:
      - echo Build started on `date`
      - echo Building the Docker image...
      - docker build -t $REPOSITORY_URI:latest .
      - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG
  post_build:
    commands:
      - echo Build completed on `date`
      - docker push $REPOSITORY_URI:latest
      - docker push $REPOSITORY_URI:$IMAGE_TAG
  • 생성버튼 클릭(자세한내용은 이미지 파일참조)

생성 후 빌드시작을 하여 테스트하기

profile
기록의 중요성

0개의 댓글