AWS는 보통 회사당 하나의 계정을 갖고 사용하는데, 회사 내 AWS를 사용하는 모든 사람에게 같은 권한을 줄 수 없다. 그래서 최고 관리자가 root 계정을 관리하고, 그 밖에 사용자들은 각자 계정을 발급받아 제한된 권한을 갖고 AWS를 이용하게 된다.
여기서 중요한 개념은 IAM이다. AWS IAM은 AWS의 리소스를 사용하게 될 사용자들과 그들의 권한을 관리할 수 있는 더 많은 기능들을 제공한다. CodeDeploy는 AWS에서 제공하는 배포 자동화 서비스이다. 이전에 자동화 및 배포했던건 젠킨스인데, AWS에서 제공하는 서비스이기 대문에 AWS 내 다양한 서비스와 쉽게 연동해서 사용할 수 있다는 장점이 있다.
CodeDeploy 작동 절차
1.클라이언트 http 요청 80번 포트로 가서 로드밸런서로 전달된다.
2. 로드밸런서로 요청을 처리가능한 두가지 타겟있는데 나중에 도메인으로 바꿔줘야한다.
3. jenkins는 private이기 때문에 무조건 로드밸런서를 통해서 들어가야한다. CI/CD 파이프라인 관리
4. 애플리케이션 서버 자동으로 확장시키려고
CodeDeploy 서비스 역할 생성
step 1.
CodeDeploy 서비스에 적용할 역할을 만들어야하기 때문에 AWS 서비스를 선택하고 그 서비스 중에서 CodeDeploy를 선택해준다.
step 2.
기본적으로 CodeDeploy에서 역할을 해줘야하는데 역할 이름을 설정해주고, 설명해준다.
EC2 인스턴스 역할, 인스턴스 프로파일 생성
step 1
정책을 더 쉽게 생성할 수 있게 도와주는 편집기를 이용하지 않고, Json 형식으로 만들어진 정책을 바로 입력해준다. 여기 보면 S3 읽기 권한을 추가하는 것을 볼 수 있는데 EC2 인스턴스에 설치된 CodeDeploy Agent가 깃허브나 S3에서 업로드 된 파일을 가져와야하기 때문에 S3의 읽기 권한이 필요하다.
step 2. 정책 생성
step 3. EC2 인스턴스 역할에 적용할 정책 생성 및 검토
역할 만들기
step 1. 역할 만들기
step 2. codedeploy로 배포 가능한 인스턴스 생성하기
CodeDeploy를 사용하는 데 필요한 역할들을 생성해줬으니, 이제는 CodeDeploy로 배포할 수 있는 인스턴스 환경을 만들어준다.
ubuntu@aws-client:~$ vim ~/.ssh/config
ubuntu@aws-client:~$ vim ~/.ssh/config
ubuntu@aws-client:~$ ssh target
[ec2-user@ip-172-31-8-89 ~]$ clear
[ec2-user@ip-172-31-8-89 ~]$
[ec2-user@ip-172-31-8-89 ~]$ cd /var/www
[ec2-user@ip-172-31-8-89 www]$ ls
aws-exercise-a passenger-6.0.12.tar.gz
[ec2-user@ip-172-31-8-89 www]$ rm -rf *
[ec2-user@ip-172-31-8-89 www]$ ls -l
total 0
[ec2-user@ip-172-31-8-89 www]$
step 3. codedeploy agent 설치
[ec2-user@ip-172-31-8-89 www]$ wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
[ec2-user@ip-172-31-8-89 www]$ chmod +x ./install
[ec2-user@ip-172-31-8-89 www]$ sudo yum install ruby -y
[ec2-user@ip-172-31-8-89 www]$ sudo ./install auto
[ec2-user@ip-172-31-8-89 www]$ sudo service codedeploy-agent status
# exercise-instance로 이미지 만들기(만들고 나서 exercise 삭제해도 된다.)
시작 템플릿 만들기
step 1. 시작 템플릿 생성 - 1
step 1. 시작 템플릿 생성 - IAM 인스턴스 프로파일 값 지정
앞에서 생성하고 복사해 뒀던 [exercise-code-deploy-ec2-role] 역할의 인스턴스 프로파일 ARN 값을 여기에 붙여 넣는다. 그리고 나서 인스턴스 프로파일 값을 지정해두면 이 시작 템플릿으로 생성된 인스턴스들은 [exercise-code-deploy-ec2-role] 의 역할을 모두 가지고 시작될 것이다.
# 시작 템플릿 생성 결과
Auto scaling 그룹 구성
1. EXERCISE-GROUP Auto Scaling 그룹 생성 및 설정 값 변경
exercise-group 내 CodeDeploy 적용이 가능한 인스턴스를 실행하기 위해 시작템플릿의 값을 방금 생성했던 [exercise-launch-template-code-deploy]로 변경해준다. 그리고 나서 그룹 내 3개의 인스턴스를 실행하기 위해 [목표용량], [최소], [최대]의 값을 모두 3으로 변경해준다. [대상그룹]에 [exercise-launch-template-code-deploy]가 올바르게 추가 돼 있는 것도 확인해주면 된다.
2. EXERCISE-GROUP 설정 값 변경
3. Auto Scaling GROUP 생성 결과
CodeDeploy 배포 설정하기
step 1. 애플리케이션 생성
step 2. 배포 그룹 생성 & 설정
# ERROR
로드밸런서에 가서 [리스너 및 규칙]을 보면 로드밸런서에 접속을 하면 젠킨스로 가게 된다. ERROR를 처리하기위해서 리스너 편집을 해준다. 대상그룹은 app-target으로 설정해준다. 나중에 jenkins를 만들면 대상그룹을 추가해준다.
step 3. 결과
step 4. [production-in-place] 배포 그룹의 배포 생성
step 5. 깃허브에 로그인해서 깃허브 아이디와 AWS CodeDeploy를 연동
step 4. 깃허브 리포지토리 & 커밋 ID로 배포 만들기
# 결과 - 배포가 진행 중인 모습
[배포 생성]을 한 후 방금 생성된 배포의 상세 화면으로 이동하게 된다. 방금 만든 배포가 진행 중인 것을 확인할 수 있다. 배포가 발생했을 때 어떤 설정을 가지고 배포가 진행됐는지, 현재 상태는 어떤지 등을 확인할 수 있다. 현재 3대의 인스턴스에 배포를 요청했고, 한번에 한 인스턴스에 배포를 진행해달라고 요청을 설정했었다. 배포 수명 주기 이벤트를 보면 3개의 인스턴스 중 1개가 업데이트가 먼저 되는 것을 볼 수 있다. 세부적으로 보고 싶다면 Viewevent로 어떻게 이벤트가 진행 중인지 보면 된다.
# 로드밸런서 들어가서 DNS 이름 복사해서 확인해보기
대상 그룹 설정
step 1. 대상 그룹 생성
'Cloud(AWS)' 카테고리의 다른 글
[AWS/Jenkins] AWS 구성 (0) | 2025.01.13 |
---|---|
CodeDeploy 배포 (0) | 2025.01.06 |
[AWS] AWS Client 만들기 (0) | 2024.12.30 |
[AWS] VPC 생성 (0) | 2024.12.23 |
[AWS] EC2 (0) | 2024.12.20 |