ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS CLI를 통하여 Code Deploy 실행
    인프라 2024. 1. 12. 22:52

    상황

     기존 배포 프로세스는, 크게 AWS Code piepeline을 통한 CI/CD로 구축되어 있었다. 즉, Github 등 원격 저장소와 연결하여 소스코드가 푸시되면 자동으로 배포되도록 구성되어 있다. 잠시 워크플로우를 살펴보자.

    1. Github 등 원격 저장소에 푸쉬하면 연결되어 있는 브랜치에 의하여 Code piepline에서 트리거로 작동한다.

    2. 소스 코드를 Code Build에서 빌드하고 아티팩트를 S3에 저장한다.

    3. Code Deploy에서 빌드에 성공한 S3에 저장되어 있는 아티팩트를 기반으로 배포를 준비한다.

    4. EC2에 배포한다.

    그러나, 로컬에서 빌드에 성공하여 테스트를 한 이후에도 AWS Code Build에서 빌드를 해야하는 번거로움이 있다. 이 때, 시간이 꽤나 걸리게 되는데 긴급 배포가 필요할 때는 여간 거슬리는 일이 아니다.

     

    AWS CLI를 통하여 배포 시작

     이번에는 AWS CLI를 통하여 즉시 Code Deploy를 실행하는 방법에 대하여 알아보자. 실행 순서에 맞게 script를 작성하고 실행시키면 된다.

    1. Application 빌드 소스와 Appspec.yml을 S3에 올려 저장한다.

    DEPLOYMENT_FILE_NAME=ko_$(date +%s);
    LOCAL_PROJECT_DIR=$(pwd);

    echo "[START] Make package directory";
    mkdir -p ${LOCAL_PROJECT_DIR}/package;
    mkdir -p ${LOCAL_PROJECT_DIR}/package/dist;

    echo "[START] Make package directory";
    echo "copy dist";
    cp -R ${LOCAL_PROJECT_DIR}/dist/* ${LOCAL_PROJECT_DIR}/package/dist/;

    echo "copy appspec-temp2.yml"
    cp -R ${LOCAL_PROJECT_DIR}/appspec.yml ${LOCAL_PROJECT_DIR}/package/appspec.yml;

    2. AWS Code Deploy 서비스에 배포를 요청한다.

    aws configure set aws_access_key_id _________ --profile ${DEPLOYMENT_FILE_NAME};
    aws configure set aws_secret_access_key _________ --profile ${DEPLOYMENT_FILE_NAME};
    aws configure set region ap-northeast-2 _________ --profile ${DEPLOYMENT_FILE_NAME};

    echo "Deployment with AWS CodeDeploy";
    echo " {
        DEPLOYMENT_FILE_NAME: ${DEPLOYMENT_FILE_NAME},
        CI_PROJECT_NAME: project-name,
        PACKAGE_DIR_NAME: package
    } ";

    echo "Uploading zip to s3://codedeploy-test/${DEPLOYMENT_FILE_NAME}.zip";
    aws deploy push \
         --profile ${DEPLOYMENT_FILE_NAME} \
         --application-name application-name \
         --description 'started by jeveloper' \
         --ignore-hidden-files \
         --s3-location s3://codedeploy-test/${DEPLOYMENT_FILE_NAME}.zip \
         --source ${LOCAL_PROJECT_DIR}/package

     

    3. CodeDeploy 서비스는 EC2 Agent에 배포를 요청한다.

    4. Agent는 S3에서 소스 코드를 받고 배포 설정을 기반으로 배포를 수행한다.

    DEPLOYMENT_ID= $(
         aws deploy create-deployment \
         --profile ${DEPLOYMENT_FILE_NAME} \
         --application-name application-name \
         --deployment-group-name deployment-group-name \
         --deployment-config-name CodeDeployDefault.OneAtATime \
         --s3-location bucket=bucket-name,bundleType=zip,key=keyname.zip \
         --output text
    );

    echo $DEPLOYMENT_ID

     

    실행 하기

    1. aws cli 설치
    2. 반영 branch로 이동 (script, appspec.yml) 확인
    3. prd build ⇒ dist 파일 생성 확인
    $ npm run build:prd

      4. shell script 실행 (webpack config와 동등한 경로)

    $ ./file-name.sh
Designed by Tistory.