CodeBuild로 Autogluon Image를 ECR로 배포하기 & Lambda Update

Beginner IT (IT Beginner)·2023년 2월 16일
0

aws

목록 보기
4/4

앞서 만들었던,
1. AWS Lambda에 넣을 Autogluon 이미지 모델 배포하기
2. boto3를 활용하여 AWS ECR에서 Lambda로 배포하기

선행 작업으로 AutoGluon으로 만들었던 코드를 CodeCommit에 넣어주시면 되겠습니다.

이 두가지 글을 활용해서 Autogluon과 ECR을 Lambda로 배포하는 것을 진행을 하였다면, 이제 이 프로세스를 이용하여 CodeBuild에 배포하는 프로세스를 만들어 보도록 하겠습니다.

간단하게 프로세스는 다음과 같죠.

1. CodeBuild로 ECR 배포하기

프로세스는 다음과 같습니다.

  • 빌드 생성

    • 프로젝트 이름

    • 단일 빌드

    • Source(CodeCommit에서 만든 소스) - 브런치, 리포지토리 설정

    • 이미지 정의 (aws/codebuild/amazonlinux2-x86_64-standard:4.0
      )

    • Buildspec

      version: 0.2
      
      phases:
        pre_build:
          commands:
            - echo Logging in to Amazon ECR...
            - aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin {}.dkr.ecr.ap-northeast-2.amazonaws.com
        build:
          commands:
            - echo Build started on `date`
            - echo Building the Docker image...
            - docker build -t {} .
            - docker tag {}:latest {}.dkr.ecr.ap-northeast-2.amazonaws.com/{}:latest
        post_build:
          commands:
            - echo Build completed on `date`
            - echo Pushing the Docker image...
            - docker push {}.dkr.ecr.ap-northeast-2.amazonaws.com/{}:latest
            - IMAGES_TO_DELETE=$( aws ecr list-images --region ap-northeast-2 --repository-name {} --filter "tagStatus=UNTAGGED" --query 'imageIds[*]' --output json )
            - aws ecr batch-delete-image --region ap-northeast-2 --repository-name {} --image-ids "$IMAGES_TO_DELETE" || true

      이미지를 만들고, 생성하고, ecr 푸시, untagged 정리 이렇게 구성되어있습니다.

      그이후 빌드를 하게되면 완성입니다.

      그다음 IAM으로 권한을 설정 해주면 되겠습니다.

각각 설명을 해야하지만,
AmazonEC2ContainerRegistryFullAccess / AmazonEC2ContainerRegistryPowerUser은 ECR로 배포하기 위한 것

AWSCodeDeployFullAccess는 나중에 CodePipeline에 배포하기 위한 용도라고 보시면 되겠습니다.

이상으로 모든 설정이 끝났으니 설정하시면 되고,

$IMAGES_TO_DELETE 같이 이런 변수를 외부로 설정하고 싶다면,

환경 편집에서 환경 변수를 넣어주시면 되겠습니다.

2. CodeBuild로 ECR이미지 Lambda에 등록하기

기존 1에서 만들었던 부분은 동일하구요. Buildspec만 수정합니다. (1 과정을 한 이후기 때문에 소스도 등록하지 않습니다.)

  • Buildspec 정의
version: 0.2

phases:
  pre_build:
    commands:
      # AWS CLI 구성
      - aws configure set region ap-northeast-2
      - $(aws ecr get-login --no-include-email)
  build:
    commands:
      - aws lambda update-function-code --function-name {} --image-uri {}.dkr.ecr.ap-northeast-2.amazonaws.com/{}:latest --publish
      - >
        while true;         do         STATUS=$(aws lambda get-function --function-name {} --query Configuration.LastUpdateStatus);         if [[ "$STATUS" == "\"Successful\"" ]]; then       echo "Lambda 함수 업데이트가 완료되었습니다.";         break;         elif [[ "$STATUS" == "\"Failed\"" ]];         then         echo "Lambda 함수 업데이트가 실패하였습니다.";         break;         else         echo "Lambda 함수 업데이트 중입니다. 현재  상태: $STATUS";         sleep 5;         fi;         done

설명을 하자면 Lambda에 진행했던 image를 새 image로 업데이트를 한 후 상태 체크를 하는 스크립트를 삽입하여 완료가 되면 종료하도록 되어있다고 생각하시면 되겠습니다.

이상으로 아키텍처에 나와있는 부분을 완성하였습니다.

감사합니다.

profile
잘부탁드립니다. ㅎㅎ

0개의 댓글