IAM
루트 사용자로서, 일반 사용자들이 여러 AWS 서비스에 접근하는 권한과 범위, 역할 등을 지정&관리할 수 있음
EC2
on-demand : 할인율이 적음. 시간 단위로 가격 측정. 즉 단기간 사용할 때 유용함. 특히 개발 초기에 deploy할 때 유용함
reserved : 한정된 용량 사용 가능, 1~3년동안 시간별 할인 적용 받을 수 있음 (개발의 시작과 끝을 미리 알 수 있을 때, 안정적이고 예상 가능한 workload시 유용함). 선불로 지불하면 컴퓨티 비용 대폭 감소
spot : 할인율이 가장 크다. 경매 방식으로 씀. 낙찰한 가격 이상으로 올라가면 끊기는거임. 이로 인해 인스턴스의 시작과 끝이 불규칙적이기에, 시작과 끝기간이 중요하지 않을 때 매우 유용함
EC2 실습
ssh를 활용하여 다른 서버에 접속할 수 있게 해주는 오픈소스 터미널 애플리케이션
putty : ssh를 활용하여 원격 접속
puttygen : EC2 인스턴스를 만들 때 주어지는 pem 파일을 ppk 파일로 변환해줌 (putty는 ppk 파일만 인식하므로 변환 필요)
ElastiCache
| 유스케이스
| 유스케이스
RDS
EC2에 phpmysqlnd 설치 후 RDS에 접근.
보안 인바운드 규칙도 적절히 설정해둬야함 (ssh랑 http 등)
S3
구글 클라우드 느낌의 클라우드 스토리지. 디렉토리같은거를 버켓이라고 명칭함
암호화, 공개 범위 등을 적용 가능 (버킷 정책, 암호화 설정 활용)
CloudWatch
실시간 모니터링, 각종 이벤트들 로그 남겨 줌
EC2, RDS, ELB, S3 등 꽤 많은 AWS 다른 서비스들에 활용이 지원됨
1번 용례 케이스
use case : 매일 얼마나 많은 사용자들이 모바일 앱을 사용하는지 알고 싶음
potential issue : 특정 날에 수많은 traffic이 몰릴 수 있어 병목 현상이 생길 수 있음
solution : 매일 traffic rate와 특정 버튼의 유저 클릭 횟수를 분석하여, 더 효율적인 앱 개발을 할 수 있는 통찰력을 얻을 수 있음
2번 용례 케이스
use case : 특정 시간대에 웹 서버 상태를 점검하여 비용 절감 목표
potential issue : 똑같은 비용을 내며 AWS 리소스들을 사용하지만, 낮 시간대와 밤 시간대에 필요한 서버의 성능은 달라질 수 있기 때문에, 금전적 손실이 생길 수 있음 (주로 밤 시간대에 서버가 오랫동안 idle).
solution : 알람 설정을 통하여 특정 threshold에 도달했을 때, 개발자에게 상황을 보고해줌으로써 서버 management를 할 수 있음.
Alarm State
Alarm : 특정 threshold에 도달해서 알람이 울리는 상태
Insufficient : 알람 설정은 돼있는데 대상 EC2가 없다거나 그럴 때 이 상태로 진입함
OK : 특정 threshold에 도달하지 않은, 아직 안정된 상태
Billing Alarm
지정해놓은 알람 서비스 지출값 초과하면 SNS로 개발자에게 알려줌 (이 기능은 N.virginia(us-east-1) 지역에서만 지원됨)
Lambda
serverless의 주축을 담당하는 AWS 서비스 중 하나
serverless : 클라우드가 서버를 돌리고 생성하고 리소스들을 서버 사용량에 따라 직접 할당해줌. 즉 사람이 직접 관여하는 부분이 적어지고 문제점도 덜 발생
event를 통하여 lambda를 실행시킴
NodeJS, Python, Java, GO 등 다양한 언어 지원
Lambda Function
람다 함수 호출 후 다른 서비스를 호출할 수 있음. 그래서 AWS 아키텍처에서 중간 중간에 들어가있는 경우가 많음
람다 함수가 실행될때만 비용 지불
매달 백만 번 함수 호출까지는 무료 (그 후로는 유료)
최대 300초 런타임 시간 허용
512MB의 일시적인 디스크 공간 제공 (/tmp/)
최대 50MB Deployment Package 허용 (로컬에서 코딩한 내용을 압축 후 람다에 deploy)
-> 50MB가 초과되면 S3 버켓에 담고 람다와 연결 가능
S3에 putObject -> lambda 에서 데이터 변환, 불필요한 데이터 삭제 -> 최종적으로 DB에 올라감
lambda는 중간다리같은 역할을 함
IoT에서 Topic으로 이벤트 감지하고 lambda 호출(자동차 과속 이벤트 감지 시 속도 데이터 보냄) -> lambda에서, 운전자가 미국인이면 km를 다른 유닛으로 형변환 해줌 -> SNS로 사용자에게 실시간으로 경보를 줌
이들을 매우 간단한 serverless architecture로 보면 됨.
CloudFront
edge location을 사용하여 정적, 동적, 실시간 웹사이트 컨텐츠를 유저에게 전달
컨텐츠 딜리버리 네트워크 (CDN)
분산 네트워크 (DN)
전 세계에 설치되어 있는 서버의 collection 개념. 길거리에 ATM 기기같은 느낌. 이걸로 유저와 서버의 거리에 따른 latency 해소
서버에서 컨텐츠를 edge location 캐시에 넣고, 이 캐시에서 유저에게 컨텐츠 제공
원래 컨텐츠들이 들어있는 곳. 웹 서버 호스팅이 되어지는 곳. S3, EC2 인스턴스가 오리진이 될 수 있음
CDN에서 사용되어지며, edge location들을 하나로 묶어 통칭하는 개념
DynamoDB
PK를 사용하여 데이터 쿼리
DynamoDB에는 두 가지의 PK 유형이 있음
파티션 키 (Partition Key)
복합 키 (Composite Key)
query가 scan보다 훨씬 효율적임. query 사용 추천
Application Programming Interface
유저의 리퀘스트 -> API -> 서버에서 요청받은 데이터 싣기 -> API -> 유저에게 제공
representational state transfer
상태 변화를 위한 클라이언트의 요청
CREATE(post), READ(get), UPDATE(put), DELETE(delete)
JSON 형태로 요청을 받고 해결함
<배경>
대부분의 어플리케이션은 RESTful API 기반으로 운용됨
매우 힘든 RESTful API 관리
<정의>
CI / CD
Continuous Integration / Continuous Deployment
github에 중앙 레포에 올리면서, CI/CD 도입해서 테스팅 자동화도 가능(메인 브랜치에 병합 전 테스팅), 테스팅 후 배포 준비 (코드 병합 패키지 생성 등도 CI/CD로 자동화). 물론 소비자 컴플레인 들어와서 특정 기능을 고치거나 롤백시키는 등 사람이 개입해서 해야할 때도 있긴 함
파일들을 보관하는 저장 장소 (Repository) - Github과 매우 유사
많은 사람들이 동시에 저장 장소 접근 및 업데이트 가능
버전 컨트롤 기능 제공
code commit에는 main branch와 더불어 develop branch가 있는데 보통 여기서 충돌 해결 및 코드 확정짓고나서 메인 브랜치에 업뎃함
Rolling 배포
프로덕션의 모든 기능을 100퍼로 잡았을 때, 개발자가 25퍼 정도를 기능 개선해서 이걸 배포하고, 다음 배포 때 또 다른 25퍼 비중의 기능을 구현 후 배포하고 이런 식으로 점진적인 느낌
ex) ELB가 3개의 서버 인스턴스를 관리하고 있다고 치고, 첫 번째 인스턴스를 비활성화 후, 업그레이드가 되고나면 다음 버전 인스턴스를 다시 활성화시켜 ELB에 연결. 이런 식으로 하나하나 다 해서 결과적으로는 모두 버전2의 인스턴스로 업글된 상태
만약 버전2 업글 후 버그 발생하면, 롤링 배포 방식에서는 한번에 버전1로 돌아가기는 힘듦. 똑같은 방식으로 버전0으로 교체해줘야함. blue/green 배포에서는 한번에 돌아가기 가능
Blue/Green 배포 (blue : 현재 가동중인 프로덕션, Green : 새로 배포할 것)
blue의 트래픽을 천천히 줄이면서 green으로 옮기면서, 개발자는 green에 새로운 기능을 추가함. 궁극적으로는 blue를 완전히 셧다운시키고 green으로 완전히 옮기는 것
ex) ELB가 인스턴스 v0 3개를 관리하고 있고, 여기서 기능이 추가된 v1 인스턴스 3개를 생성 후 ELB에 연결함. 이제 트래픽 양을 v0 3개(blue)로 가는 트래픽을 조금씩 줄이고, v1 3개(green)로 가는 트래픽을 조금씩 늘려서, 궁극적으로는 blue에 트래픽이 아예 안가고, green에만 가게 되도록 함.
이전 버전으로 돌리고 싶다면, ELB 셋팅만 똑같은 방식으로 다시 blue쪽으로 트래픽을 옮기면 됨. (물론 이전 버전 인스턴스를 삭제하지 않았다는 가정 하에)
맨 처음 배포할 때는 rolling 배포로 빠르게 배포하고, 그 뒤에는 blue/green 배포 방식 사용하면 됨. (참고로 blue/green 배포는 추가 비용 발생)
CI/CD의 끝판왕!
앞서 배운 code commit, code deploy를 자동화해줌
빌드, 테스트, 배포 과정을 관리
소프트웨어 및 어플리케이션 출시 자동화 가능
배포와 출시를 동일시하는 회사도 있음
배포는 모든 기능이 적용된, 최종본
그리고 이를 출시하면 사용자가 사용 가능
workflow 정의 (code pipeline)
코드 저장소에서 코드 변경 (code commit)
컴파일, 테스트, 패키지 생성 (code build)
staging 혹은 production 배포 (code deploy)