Computer Science/CI&CD

[CI/CD] AWS S3, IAM, EC2, CodeDeploy란

Bay Im 2024. 1. 11. 17:06
AWS S3
  • AWS S3
    • AWS S3는 파일 저장 서버 역할을 한다.
      • 예를 들어 github action에서 build한 결과를 저장해 놓는다.
    • AWS에서 기본적으로 접근 미허용이기 때문에 IAM에서 접근 권한을 획득해야 한다.
  • AWS IAM
    • AWS의 권한 제어 관리 서비스
    • AWS S3 접근 권한 제어 방법 
      • AWS IAM- 사용자 추가- 액세스 유형(프로그래밍 방식 액세스)- 권한 설정(기존 정책 직접 연결)- AmazonS3FullAccess와 AWSCodeDeployFullAccess 활성화
      • ACEESSKEY, SECRETKEY 발급 시 다른 곳에 적어두기
  • AWS S3 Bucket 설정
    • AWS S3- 버킷 만들기- 3단계 권한 설정에서 모든 퍼블릭 액세스 차단만 체크
  • Github 설정
    • Github 레포지토리의 Settings- Secret에서 KEY값 등록하기
    • workflow에 S3로 파일을 옮기는 job 추가 하기 
# 전송할 파일을 담을 디렉토리 생성
      - name: Make Directory for deliver
        run: mkdir deploy

      # Jar 파일 Copy
      - name: Copy Jar
        run: cp ./build/libs/*.jar ./deploy/

      # 압축파일 형태로 전달
      - name: Make zip file
        run: zip -r -qq -j ./springboot-intro-build.zip ./deploy

      # S3 Bucket으로 copy
      - name: Deliver to AWS S3
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          aws s3 cp \
          --region ap-northeast-2 \
          --acl private \ 
	  ./springboot-intro-build.zip s3://springboot-intro-build/

 

 

AWS EC2
  • AWS EC2
    • 배포 시스템인 CodeDeploy를 통해 AWS EC2 인스턴스에 배포를 가능하게 작업을 설정한다.
    • 둘 사이의 접근을 위해서 IAM에서 역할 만들기를 해야한다. 
      • AWS IAM- 역할 만들기- AWS 서비스 개체 선택- EC2 사용 사례 선택- 역할 만들기(AmazonEC2RoleforAWSCodeDepoly)
      • 역할 등록 후 EC2에서 해당 역할을 사용하도록 저장 (인스턴스 설정- IAM 역할 연결/바꾸기)
      • 역할 수정 후 인스턴스 재부팅
    • CodeDeploy
      • AWS EC2로 애플리케이션 배포를 자동화하는 배포 서비스
    • CodeDeploy 설치
      • AWS EC2에서 aws s3 cp s3://aws-codedeploy-ap-northeast-2/latest/install . --region ap-northeast-2 명령어로 CodeDeploy 설치
      • 두 명령어로 실행 권한 주기
        • chmod +x ./install
        • sudo ./install auto
      • 명령어로 설치 확인
        • sudo service codedeploy-agent status
    • CodeDeploy 설정 
      • AWS 서비스- 사용 사례 선택에 CodeDeploy
      • 개발자 도구- CodeDeploy- 애플리케이션- 애플리케이션 생성- 컴퓨틸 플랫폼에 EC2/온프레미스 선택- 애플리케이션 생성
      • 환경 구성- Amazon EC2 인스턴스 체크
      • 배포 설정- CodeDeployDefault.AllAtOnce 클릭
      • 로드 밸런서- 로드 밸런싱 활성화
      • appspec.yml 파일 생성
      • version: 0.0
        os: linux
        files:
          - source: /
            destination: /home/ec2-user/app/deploy
      • 디렉토리 생성 (mkdir /home/ec2-user/app/deploy)
    • github 설정
      • github action에 deploy job 생성 
# Deploy
      - name: Deploy
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          aws deploy create-deployment \
          --application-name springboot-intro \
          --deployment-group-name springboot-intro-deploy-group \
          --file-exists-behavior OVERWRITE \
          --s3-location bucket=springboot-intro-build,bundleType=zip,key=springboot-intro-build.zip \
          --region ap-northeast-2
728x90