수업

12/8

진태현 2023. 12. 8. 11:59

배포

 

빅뱅 배포

- 애플리케이션 전체 또는 대부분을 한 번에 업데이트 

 

롤링 업데이트

- 점차 새로운 버전으로 바꿔나가는 것

- 두가지 업데이트가 공존함 

- 업데이트 시간이 길다

 

Blue/Green

- 서비스되고 있는 장비와 되고 있지 않은 장비를 나눠놓음 

- 똑같은 장비가 두 대가 있어야 됨 

장점: 업데이트 시간과 롤백시간이 굉장히 짧다 

단점: 자원을 많이 사용한다 

 

Canary

- 일부 사용자만 새로운 버전을 사용하도록 

- 점점 사용자를 늘려가는 과정 

ex) 시험 테스트 

장점: 

단점: 많은 양의 하드웨어 필요

 

롤링과 ,카나리, blue/green 차이점

- 실제 업데이트 > 카나리, blue/green

- 롤링업데이트는 현위치 배포, 단계적 배포

*In place update


CodeDeploy를 이용한 현재 위치 배포

- CodeDeploy란 애플리케이션 배포 자동화 서비스 

*인스턴스, 람다, ec2 내가 만든 소스코드가 포함 

- 서버에서 실행되고 저장소에 있는 리소스를 배포 

실행 중 배포(in place)

blue/green 배포 : 두 개의 쌍을 만들어놓고 현재버전, 다음버전 소스코드 배치

 

EC2에 배포 

 

CodeDeploy에서 사용할 역할 생성

- IAM > 역할생성 > CodeDeploy

 

EC2 인스턴스에 적용할 정책과 역할 생성 

*EC2는 서비스를 사용자에게 제공 : 정책과 역할 (S3버킷에 업로드한 새로운 버전의 코드를 가져와서 실행)

>S3 버킷과 객체를 읽을 수 있는 권한이 필요

 

- IAM > 정책생성

*반드시 정책을 통해서 부여해야한다. 

 

 

- 역할 생성 > EC2 > 만들었던 권한 부여

 

CodeDeploy로 소스코드 배포 가능한 인스턴스 생성

- 애플리케이션 코드가 없는 인스턴스 생성 > 해당 인스턴스를 이용해서 서비스환경(오토스케일링, 로드밸런싱 구성)

*인스턴스가 실행될 때 CodeDeploy를 통해서 소스코드를 가져오도록 설정 

 

기본 vpc 생성

 

인스턴스 생성 > 22번+80번 포트 허용하도록 설정 

*사용자 데이터 

 

bitvise ssh에서 sudo rm -rf /var/www/html/*

 

인스턴스 > 이미지생성

 

AutoScailing 그룹 생성 

*로드밸런서 대상그룹 생성 > 보안그룹을 22번,80번포트 모두 붙을 필요는 없기때문에 

보안 그룹을 새로 만드는게 원칙 (지금은 편의상) 

>>> 여기까지 서비스 인프라 구성 

github > sourcecode, appsec.yml

*yaml 파일 들여쓰기는 반드시 스페이스로 처리 (tab사용시 에러)

 


GitHub 레포지터리 생성 후 소스코드(web page)를 commit

깃 허브 사이트 > new > 레포지터리

 

레포지터리에 index.html 파일 추가 

> create a new file > 소스코드 삽입 후 생성

 

레포지터리에 appspec.yml 파일 추가

- CodeDeploy Agent가 수행할 내용을 기술한 파일

> Add file > Create new file 

 

레포지터리에 scripts/set_owner 파일 추가 

> add file > new file > 코드 삽입 후 생성 

 

배포할 레포지터리의 주소와 커밋 ID(커밋 버전) 확인 

> 레포지터리 주소 > 본인 레포지터리 주소 

> 커밋 id 확인

 

CodeDeploy 애플리케이션 생성

- codedeploy 대시보드 > 애플리케이션 생성 

> EC2/온프레미스 

 

생성 확인 후에 배포그룹 생성

- 배포 대상(개발, 테스트, 운영 등) 과 배포 방법(한번에, 반반, 단계적 등) 정의를 생성

> 배포유형(현재 위치: 현 인프라, 인스턴스에 소스코드 바꾸는 방법)

*블루/그린 새로운 코드를 올리고 현재 코드와 바꿔치기, 노드밸런스에 주소 

배포 방식

배포 생성

토큰 할당

- CodeDeploy agent 제대로 실행되지 않음

> EC2 codedeploy agent가 동작하기 위한 EC2에 역할 부여해야함 

 

EC2 역할(CodeDeployEC2Role) 부여 

> 인스턴스 대시보드에서 보안 > IAM 역할 수정

 

각 인스턴스 ssh 에 > sudo systemctl restart codedeploy-agent

 

후에 다시 재배포 

- beforeblocktraffic 성공확인 : 로드 밸랜서의 요청 각 인스터들에게 트래픽 전달, 업데이트 하는 트래픽이 들어오면 안되고 트래픽을 막는 것이 blockTraffic

 

 

CodeDeployEC2Role 역할에 불필요한 권한 삭제

- S3 버킷과 파일을 읽을 수 있는 권한 부여 > s3 관련 권한 정책 삭제

>> CodeDeployEC2Policy-038 에서 s3권한 삭제 

 

ASG의 용량을 0으로 설정해서 기존에 생성된 인스턴스를 모두 종료

 

EC2 인스턴스에 역할이 부여되지 않아서 에이전트 동작하지 않는 문제 

>> 시작 템플릿을 수정 > 인스턴스에 역할 하도록 수정 

 

시작템플리 수정 > 새로운 버전 생성 

 

ASG의 용량을 2로 변경 > 새롭게 생성된 인스턴스에 에이전트가 정상적으로 동작하는 것 확인 

 


IAM > 역할 > CodeDeployEC2Policy-038 제거 

>> 신뢰관계만 남게됨, 

 

AutoScailing 그룹 편집

- 2개 씩되 있는 용량을 0으로 수정

 

AMI 생성을 위해서 실행했던 인스턴스 종료(불필요 인스턴스 정리)

 

시작 템플릿 > 템플리 수정 

- 고급 세부 정보에서 역할 설정

버전 변경

asg > 시작 템플릿에서 버전 최신(2)로 변경

 

세부정보에서 용량 2로 변경

- 인스턴스 2개 다시 생성 

 

- ELB의 DNS 이름으로 접근

 

* codedeploy 실행중이면 인스턴스 실행 안됨 

- 애플리케이션 다시 생성

 

다시 배포하면 같은 결과로 깃허브에 있는 코드 반영 확인

 

ASG 용량을 3개로 변경 

 

삭제 과정

codedeploy > asg > elb > 대상그룹 > 시작템플릿 > AMI 등록 취소 > 스냅샷 > 보안그룹 > vpc > 역할, 정책 삭제

*ASG 삭제시에 용량 0으로 업데이트 한 뒤에 ASG 삭제 


SK 쉴더스 클라우드 보안 가이드 

- 운영 관리: 암호화 

- 로그를 남기는 것 로그가 보호되어야 함. 

로그 파일의 개인정보 유출 가능성 

중요정보는 로그 암호화 

 

 키페어 

- puttygen으로 

- ec2 접근 할경우 key pair(pem)으로 접근

> 키파일 내 pc에 저장하는 것은 옳지 않음 

> 공개된 절차를 통해서 보관되어야 함 

 

점검가이드, 보안가이드 만들어보기 

'수업' 카테고리의 다른 글

12/12 : burp Academy  (0) 2023.12.12
12/11 : burp Academy  (0) 2023.12.11
12/7 : 서버리스 아키텍처  (0) 2023.12.07
12/6: AWS RDS  (1) 2023.12.05
12/5 :AWS 명령어, CLI 이용  (0) 2023.12.05