ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Github Action으로 ecr 업로드 하기
    Infra/CI&CD 2024. 5. 16. 23:39

    ECR이란?

    AWS에서 제공하는 관리형 컨테이너 이미지 레지스트리 서비스
    AWS IAM을 사용하여 리소스 기반 권한을 가진 프라이빗 리포지토리 지원
    지정된 사용자 혹은 EC2 인스턴스가 컨테이너 리포지토리 및 이미지에 엑세스 가능하다.

     

    • Docker hub와 같이 이미지를 저장할 수 있는 저장소와 같은 개념이다.
    • GithubAction과 같이 사용하면, 워크플로우의 결과로 docker Image를 생성하고, ECR에 간단하게 업로드 할 수 있다.

    ECR 생성

     

    • 아마존에서 Elastic Container Registry검색해서 시작하자

    • Repository를 하나 만들어보자! 
    • 다음으로 IAM으로 넘어가서 User와 Policy를 생성하자

    • 정책 생성을 눌러서 새로운 정책을 생성하자 
      • 여기서 정책은 ECR에 접근하고, 이미지를 업로드, 다운로드 할 수 있는 권한들을 의미한다.
    • 이름은 원하는 이름으로 적고, 다음으로 JSON을 선택하고 다음과 같이 작성한다. 
    {
       "Version": "2012-10-17",
       "Statement": [
         {
     		"Effect": "Allow",
    	    "Action": [
     				"ecr:GetAuthorizationToken",
     				"ecr:BatchCheckLayerAvailability",
     				"ecr:GetDownloadUrlForLayer",
     				"ecr:BatchGetImage",
     				"ecr:InitiateLayerUpload",
     				"ecr:UploadLayerPart",
     				"ecr:CompleteLayerUpload",
     				"ecr:PutImage"
     				 ],
     			"Resource": "*"
    		 }
     	]
    }
    • ecr과 관련된 policy이다. Resource에는 repository를 지정할 수 있다. 
    • 정책을 생성했다면, User를 생성하던, 특정 User에 해당 정책을 연결해주자 

    • 위에 만든 정책을 연결하는 부분이다. 기타로 선택해서 연결하자 
    • 다음은 워크플로우에 github secrets으로 등록할 secret값을 생성하자

    • User에 보안 자격 증명 탭에서 쫌 내려가면 찾을 수 있다! 
    • 생성한 secret값은 해당 값을 사용할 git hub repository에서 설정두자

    • value는 아까 받아 온 secret값이지만, 이름은 알아서 잘 지정! 

    워크플로우 작성 

     

    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    name: CI on ECR
    
    jobs:
      deploy:
        name: Deploy
        runs-on: ubuntu-22.04
    ############################################################################
        steps:
        - name: Checkout
          uses: actions/checkout@v3
          #AWS에 접근 인증 받는 부분  
        - name: Configure AWS credentials
          uses: aws-actions/configure-aws-credentials@v2
          with:
            # IAM에서 받아온 값 
            aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
            aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
            #region에 조심하자 ! 
            aws-region: ap-northeast-2
    ################################################################################        
        - name: Login to Amazon ECR
          id: login-ecr
          uses: aws-actions/amazon-ecr-login@v2
        - name: Build, tag, and push the image to Amazon ECR
          run: |
            # Get current UTC time as image tag  - > 이미지 태그 생성용 변수
            IMAGE_TAG=$(date -u +"%Y%m%dT%H%M%SZ")
            echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV
    
            # Build a Docker container and push it to ECR  
            # secrets값으로 지정한 repo에 이미지 업로드
            # 스탭중에 login-ecr에서 나온 output.registry -> 도커 이미지 명 레지스트리주소/프로젝트명/이미지명:이미지태그
            docker build -t ${{ steps.login-ecr.outputs.registry }}/${{ secrets.REPO_NAME }}:$IMAGE_TAG .
            echo "Pushing image to ECR..."
            docker push ${{ steps.login-ecr.outputs.registry }}/${{ secrets.REPO_NAME }}:$IMAGE_TAG
            echo "::set-output name=image::${{ steps.login-ecr.outputs.registry }}/${{ secrets.REPO_NAME }}:$IMAGE_TAG"
          env:
            AWS_DEFAULT_REGION: ap-northeast-2
            AWS_REGION: ap-northeast-2
    • 결과로 만들어진 도커 이미지는 보통 
      • docker.io/jangwon/myImage:2.1.0-alpine와 같은 이미지를 가지는데,
      • 레지스트리주소(저장소)/프로젝트명(폴더)/이미지명:태그이다.

     


    참고자료

     

    원티드 프리온보딩 백엔드 챌린지 4월

    https://www.wanted.co.kr/

     

    원티드 - 일하는 사람들의 모든 가능성

    이력서, 채용 공고, 연봉 정보는 물론 프리랜서 프로젝트까지! 신입 취업 및 경력직 이직, 커리어 성장에 필요한 모든 것을 만나보세요.

    www.wanted.co.kr

     

    'Infra > CI&CD' 카테고리의 다른 글

    Jenkins CI/CD 구축 (With Docker + Github + Docker Hub)  (4) 2024.08.14
    Github Action 기본 사용법  (0) 2024.05.16
Designed by Tistory.