본문 바로가기
AWS/CICD

AWS EC2 Gitlab CI Codedeploy

by aws-evan 2025. 1. 24.
반응형

 

 

구성도

 

CICD 구성하기

  • EC2
  • S3
  • CodeDeploy 생성하기
  • CodeDeploy Agent 설치
  • IAM User 생성 및 AccessKey 발급(CICD용)
  • IAM 권한(EC2용)
  • 코드 업로드
  • appspec.yml
  • gitlab CI 생성
  • 배포 확인

 

1. EC2 생성

https://monta010.tistory.com/187

 

AWS EC2 생성

AWS EC2 생성하기https://monta010.tistory.com/43 AWS Elastic Compute Cloud(EC2)AWS EC2 AWS에 가장 많이 사용하는 클라우드 컴퓨팅 서비스 원하는 용량대로 Linux, Windows 서버 설치 가능 클릭 몇번으로 컴퓨터 구성

monta010.tistory.com

 

 

2. S3 생성

https://monta010.tistory.com/210

 

S3 생성하기

AWS S3 Amazon Simple Storage Service(AWS S3)는 AWS의 객체 스토리지 서비스로, 데이터를 저장하고 관리할 수 있는 강력한 플랫폼입니다.무제한의 스토리지 용량과 높은 내구성을 제공하며, 데이터를 안전

monta010.tistory.com

 

3. CodeDeploy 생성하기

  • dev-backend-codedeploy

  • codedeploy 생성완료

  • codedeploy 배포 그룹 생성

  • codedeploy 배포 유형
    • 현재 위치 : 단일 서버
    • 블루/그린 : ASG + ALB + EC2를 통한 무중단 배포

 

  • codedeploy수동 설치하여 별도 설치 안함
    • 추후에 자동으로 처리 하고 싶을 경우 "System Manager 권한 추가하여 진행
  • 배포 구성 
    • 배포 구성은 상황에 맞도록 설정

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/deployment-configurations.html

 

에서 배포 구성으로 작업하기 CodeDeploy - AWS CodeDeploy

여러 Auto Scaling 그룹의 인스턴스에 배포하는 경우, CodeDeploy 해당 인스턴스가 속한 Auto Scaling 그룹에 관계없이 한 번에 최대 절반의 인스턴스까지 배포합니다. 예를 들어 Auto Scaling 그룹이 두 개(ASG

docs.aws.amazon.com

 

 

  • codedeploy 배포 그룹 생성 완료

 

4. CodeDeploy Agent 설치

https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/codedeploy-agent-operations-install-linux.html

 

Amazon Linux용 CodeDeploy 에이전트 설치 또는 RHEL - AWS CodeDeploy

이전 명령에서 는 Amazon Linux 또는 RHEL Amazon EC2 인스턴스의 기본 사용자 이름을 /home/ec2-user 나타냅니다. 사용자 지정 를 사용하여 인스턴스를 생성한 경우 AMI 소유자AMI가 다른 기본 사용자 이름을

docs.aws.amazon.com

  • 필요 패키지 설치
sudo yum update
sudo yum install ruby
sudo yum install wget
  • 홈 디렉토리 이동
cd /home/ec2-user
  • CodeDeploy 에이전트 설치
wget https://aws-codedeploy-us-east-2.s3.us-east-2.amazonaws.com/latest/install
  • install 실행권한 및 설치
chmod +x ./install
sudo ./install auto
  • 서비스 상태 확인
systemctl status codedeploy-agent

 

5. IAM User 생성 및 AccessKey 발급(CICD용)

  • RoleName : 원하는 이름
  • 권한 -> 실제로 적용시에는 상세한 ARN으로 처리
    • AmazonEC2ContainerRegistryFullAccess
    • AWSSystemsManagerForSAPFullAccess
    • AmazonEC2RoleforAWSCodeDeploy

 

  • AccessKey 발급
    • IAM -> 사용자 -> 사용자 클릭 -> 보안 자격 증명 -> 액세스키 만들기

 

6. IAM 권한(EC2용)

  • Gitlab CI를 통한 권한
    • ECR 접근
    • S3 접근
    • CodeDeploy 실행 
  • 권한
    • AmazonEC2ContainerRegistryFullAccess
    • AmazonS3FullAccess
    • AWSCodeDeployFullAccess

 

7. 코드 업로드

  • java backend 배포

 

 

8. appsec.yml

  • codedeploy가 deploy.sh를 통한 서비스 실행
version: 0.0
os: linux
files:
  - source: deploy.sh
    destination: /home/ec2-user/app
permissions:
  - object: /home/ec2-user/app
    pattern: "**"
    owner: ec2-user
    group: ec2-user
    mode: 755
hooks:
  ApplicationStart:
    - location: deploy.sh
      timeout: 300
      runas: ec2-user

 

9. gitlab CI 생성

variables:
  AWS_REGION: ap-northeast-2
  ECR_REPOSITORY: dev-backend
  APP_NAME: dev-backend-codedeploy
  DEPLOY_GROUP: dev-backend-codedeploy
  DEPLOY_BUCKET: dev-backend-s3
  AWS_ACCESS_KEY_ID: "AWS_ACCESS_KEY_ID"
  AWS_SECRET_ACCESS_KEY: "AWS_SECRET_ACCESS_KEY"
  AWS_ACCOUNT: "AWS_ACCOUNT"

stages:
  - configure
  - build
  - deploy

configure:
  stage: configure
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  only:
    - main
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json
    - echo "{\"credHelpers\":{\"${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com\":\"ecr-login\"}}" > /kaniko/.docker/config.json

build:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  variables:
    AWS_SDK_LOAD_CONFIG: "true"
  only:
    - main
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"credsStore\":\"ecr-login\"}" > /kaniko/.docker/config.json
    - /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY}:latest"
    # --destination "${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY}:${CI_COMMIT_SHA}"

deploy:
  stage: deploy
  image:
    name: amazon/aws-cli:latest
    entrypoint: [""]
  only:
    - main
  before_script:
    - yum install -y zip
  script:
    # Upload deployment scripts to S3
    - zip -r ${APP_NAME}.zip scripts/
    - aws s3 cp ${APP_NAME}.zip s3://${DEPLOY_BUCKET}/
    # Create CodeDeploy deployment
    - |
      aws deploy create-deployment \
        --application-name "${APP_NAME}" \
        --deployment-group-name "${DEPLOY_GROUP}" \
        --s3-location "bucket=${DEPLOY_BUCKET},key=${APP_NAME}.zip,bundleType=zip" \
        --region "${AWS_REGION}"

 

9. 배포 확인

 

 

 

 

반응형

댓글