AWS CodeDeploy 실습
- EC2인스턴스(CodeDeployAgent 설치) -> S3 , CodeDeply를 이용하여 간단한 웹 어플리케이션 배포
1. IAM에서 S3 접근을 허용하는 서비스룰 생성
- EC2 인스턴스가 S3에 접근을 위해
![](https://velog.velcdn.com/images/black2code/post/c06bc8aa-5dc3-4557-89ca-47fc07d73e6b/image.png)
- EC2 사용 사례 선택
![](https://velog.velcdn.com/images/black2code/post/a73c3361-78d3-4448-bf02-b0fd4c9e64ca/image.png)
![](https://velog.velcdn.com/images/black2code/post/23ea7a79-038d-42a5-8ccb-b9a14c31e68d/image.png)
![](https://velog.velcdn.com/images/black2code/post/1c8ef84c-d322-42cd-8bae-5e61b51f8a73/image.png)
- 역할을 하나 더 만들어야 함, CodeDeploy가 API를 성공적으로 불러와야 함
- EC2 인스턴스에 CodeDeployAgent를 설치하는데 역할이 필요함
![](https://velog.velcdn.com/images/black2code/post/42c929c5-8798-49f6-ae4b-778e60e55d11/image.png)
2. EC2 생성
![](https://velog.velcdn.com/images/black2code/post/b41dcf5d-2461-4738-8685-1e1d2a548902/image.png)
sudo yum update
sudo yum install ruby
sudo yum install wget
wget https://aws-codedeploy-ap-northeast-2.s3.amazonaws.com/latest/install
chmod +x install
sudo ./install auto
sudo service codedeploy-agent status
- EC2 생성과정은 생략 하도록 하겠다.
- EC2에서 기본적인 툴 설치 및 업데이트
- CodeDeployAgent도 설치
![](https://velog.velcdn.com/images/black2code/post/f9e8fb3c-558d-4453-af82-2b0548e3b95f/image.png)
- CodeDeploy-agent 실행 내역 확인
![](https://velog.velcdn.com/images/black2code/post/bd8e64f8-1524-441b-9f15-f5ba5d0dda5c/image.png)
- IAM에서 사용자 생성
- 콘솔 액세스 활성화 선택(프로그래밍 방식으로 액세스키, 비밀액세스키를 설정 콘솔에서 AWS 리소스를 사용할 수 있다.)
![](https://velog.velcdn.com/images/black2code/post/fe998bf8-4cc8-4ef6-9403-c89960a031dd/image.png)
- 권한 설정 - 직접 정책 연결 - AWSCodeDeployFullAccess 추가
![](https://velog.velcdn.com/images/black2code/post/d01fe211-2a89-4938-9bca-903ab99f04a6/image.png)
![](https://velog.velcdn.com/images/black2code/post/b1d0a449-8bb3-4829-8ead-4c2a636c8d36/image.png)
![](https://velog.velcdn.com/images/black2code/post/6720e8ba-3cd7-470b-80bb-8a24136b0253/image.png)
![](https://velog.velcdn.com/images/black2code/post/a6bd371a-662d-4c18-9f32-2c091f211bd3/image.png)
- 로컬 pc에서 access key, secret key, regin 입력
- format은 스킵
3. 실습에 사용될 파일
- appspec.yml : codedeploy를 사용하는데 모든 설정이 내포되어 있음
version: 0.0
os: linux
files: // 인스턴스 내에서 어떤 파일을 어디에 복사할지 선택
- source: /index.html
destination: /var/www/html/
hooks:
BeforeInstall:
- location: scripts/install_dependencies.sh // 필요한 dependencies 설치
timeout: 300
runas: root
- location: scripts/start_server.sh // 시작
timeout: 300
runas: root
ApplicationStop:
- location: scripts/stop_server.sh // 종료
timeout: 300
runas: root
![](https://velog.velcdn.com/images/black2code/post/aadbe175-5d99-42ee-9296-c45e915b93ae/image.png)
4. S3에 파일 업로드, CodeDeploy가 인식하도록 설정
![](https://velog.velcdn.com/images/black2code/post/d25e2117-1771-4d00-911c-6950df222d21/image.png)
![](https://velog.velcdn.com/images/black2code/post/aca212a5-fe64-46d3-96b2-97bf99d4df12/image.png)
- cdedeploy를 이용하여 어플리케이션 생성 (mywebapp)
![](https://velog.velcdn.com/images/black2code/post/6c469dcc-8977-477f-9e23-ae5fc6300676/image.png)
aws deploy push --application-name mywebapp --s3-location s3://aws-learner-code-deploy-bucket-jmw/webapp.zip --ignore-hidden-files
- deploy의 push 명령어 사용, 방금 전 생성한 어플리케이션 mywebapp
- S3 저장소에 webapp.zip 파일로 업로드
![](https://velog.velcdn.com/images/black2code/post/f3032416-d293-49e9-8443-cdc6792fe1b8/image.png)
![](https://velog.velcdn.com/images/black2code/post/7d1a7158-aeb7-4a4a-889b-7a50ede47925/image.png)
- CodeDeploy - 어플리케이션 확인해보면 방금 전 생성한 어플리케이션을 확인할 수 있다.
- S3버켓과 Codedeploy를 연결시켜 S3에 업로드된 파일에 따라 배포를 할 수 있는 기능을 구현하였다.
배포그룹 - 호스트를 생성하여 CodeDeploy에 배포를 할 수 있는 역할을 담당(배포 그룹 설정 필수)
5. 배포 그룹 생성
![](https://velog.velcdn.com/images/black2code/post/b2fd5287-9319-4a88-9eff-21f44b3d143d/image.png)
- 배포 그룹 생성, 생성한 CodeDeploy 서비스 역할 지정
![](https://velog.velcdn.com/images/black2code/post/0c1660aa-683d-4dd1-b8a8-0c57136d8a4a/image.png)
현재위치 - Rolling 배포
- 배포가 진행중일 때 일정 인스턴스가 다운이되어 퍼포먼스에 영향이 있는 배포 방식
블루/그린 배포
![](https://velog.velcdn.com/images/black2code/post/1de7f522-5a55-4f66-bf96-23819ae29858/image.png)
- CodeDeploy를 인스턴스에서 사용하려면 CodeDeployAgent가 설치되어야 한다.
- 설치를 안할지, 아니면 한번만 할지, 일정을 예약해서 설치를 할지 선택
- 이미 EC2에 Agent를 설치를 했기 때문에 안함으로 선택
![](https://velog.velcdn.com/images/black2code/post/2b97ec0d-26c0-4eb9-94c1-aa65ff1bddf0/image.png)
- AllAtOne 선택, 처음 배포를 하기 때문에
- 주로 프로덕션에서는 반반 나눠서 또는 하나씩 배포를 진행
- 롤백하기 편하기 때문에
인스턴스들을
- CodeDeployDefault.OneAtTime: 한번에 하나씩 배포하기
- CodeDeployDefault.HalfAtTime: 절반씩 배포하기
- CodeDeployDefault.AllAtOne: 한꺼번에 배포하기
![](https://velog.velcdn.com/images/black2code/post/dd542f32-8dbf-4111-b9e5-842a48d89906/image.png)
6. 배포 생성
![](https://velog.velcdn.com/images/black2code/post/c1d24f33-2201-4283-813e-40e6fec7787c/image.png)
![](https://velog.velcdn.com/images/black2code/post/7eae2182-2c6d-4577-9448-190de300280b/image.png)
- 배포가 실패했을 시, 어떻게 대처할것인가 행동을 정의
- 기본 설정으로 유지
![](https://velog.velcdn.com/images/black2code/post/c0688720-1650-45f7-becb-25a55e3416fd/image.png)
- 배포 완료 후, EC2의 공인 IP로 접속하면 Index.html 페이지를 확인할 수 있다.
- yml 파일을 통하여 스크립트가 실행되고
- dependencies 설치 및 서버를 시작하여 EC2 인스턴스가 웹 사이트를 호스팅
7, 직접 배포를 테스트
![](https://velog.velcdn.com/images/black2code/post/dd9aa54b-d62c-41ab-ae5a-c16a0003aec1/image.png)
![](https://velog.velcdn.com/images/black2code/post/735991f8-34f2-4c04-8cb9-370c0ef8dcf7/image.png)
![](https://velog.velcdn.com/images/black2code/post/dde0510f-f9dd-4d7d-b766-3aef7acce583/image.png)
- 개정위치를 새로 업데이트된 파일을 선택 후, 배포
![](https://velog.velcdn.com/images/black2code/post/a4dacfad-74b0-45f6-ba49-d53f0772bfdf/image.png)
https://www.inflearn.com/course/aws-%EC%9E%85%EB%AC%B8/dashboard