Developing on AWS 1일차
클라우드 컴퓨팅이란?
클라우드 컴퓨팅이란 인터넷을 통해 IT 리소스와 애플리케이션을 온디맨드로 제공하는 서비스를 말한다.
클라우드 컴퓨팅 모델
- Infrastructure as a Service(IaaS) 클라우드 IT의 기본 구성 요소
- 네트워킹 기능
- 컴퓨터
- 데이터 스토리지 공간
- Platform as a Service(PaaS) 기본 인프라(예: 하드웨어와 운영체제)를 관리할 필요 없이 애플리케이션을 실행할 수 있게 해줌
- Software as a Service(SaaS) 서비스 제공자가 실행 및 관리하는 완전한 제품을 사용자에게 제공
AWS는 IaaS로 시작해 점차 PaaS, SaaS로 발전함.
AWS 클라우드 컴퓨팅의 이점
- 자본 비용을 가변 비용으로 대체 필요 없어지면 비용 지불을 하지않아도 된다.
- 규모의 경제로 얻게 되는 이점 많이 쓸수록 할인 받을 수 있다.
- 용량 추정 불필요 서비스에 제공되고 있는 서버의 성능을 원하는 만큼 언제든지 바꿀 수 있다.
- 속도 및 민첩성 개선
- 데이터 센터 운영 및 유지 관리에 비용을 투자할 필요가 없다.
AWS Global Infra
- Region - 지역
- A.Z. - 가용영역 Region을 이루고 있는 Region -> (추상화된) 데이터센터
- Edge Location 속도를 중시하는 서비스에서 Region 근처에서 캐싱 - CDN, DNS 등
관리형 vs 비관리형 서비스 비교
- 비관리형(Customer Managed) 사용자가 확장, 내결함성 및 가용성을 관리 - EC2 등
- 관리형(AWS Managed) 일반적으로 확장, 내결함성 및 가용성이 서비스에 내장되어 있음 - RDS 등
클라우드 배포 모델
- 올인 클라우드 All Cloud Service
- 하이브리드 Cloud Service + 기업 IDC
- 리프트 앤 시프트(lift&shift) 올인: 모놀리식 애플리케이션 -> 제공중인 서비스를 통째로 클라우드 환경으로 옮기는 것 하이브리드: 클라우드 환경에 맞게 리팩토링하면서 기업 IDC 병행
마이크로서비스 아키텍처
- 기존의 모놀리식 아키텍처는 확장성이 좋지않다.
- 마이크로서비스 아키텍처 내에서 각 애플리케이션 구성 요소는 자체 서비스로 실행되며, 각 구성 요소는 잘 정의된 API를 통해 다른 서비스와 통신한다.
- 서비스마다 한 가지 기능을 수행한다.
- MSA의 장점
- 민첩성 서비스 소유권을 가지는 소규모 독립된 팀으로 구성되어 팀이 작고 이해하기 쉬운 컨텍스트 내에서 역할을 수행할 수 있다. -> 독립적이고 빠른 작업이 가능해 개발 주기가 단축된다.
- 기술적 자유 독립적인 팀은 각자 특정 문제를 해결하는 데 가장 적합한 도구를 선택할 수 있다.
- 유연한 규모 조정 각 서비스를 독립적으로 확장할 수 있다.
- 재사용 가능한 코드
- 손쉬운 배포
- 복원력
Best Practice 서버를 상태 비저장으로 처리하기 -> 언제든지 인스턴스를 추가/제거 할 수 있도록 일회용 서버로 취급해주기!
AWS Lambda를 이용한 서버리스 컴퓨팅
Amazon EC2 요금
- 온디맨드 기본 요금제 - 사용자의 사용량만큼만 요금을 지불
- 예약 인스턴스 R.I - 약정 할인 요금제(1/3년) - 온디맨드에 비해 70%정도 할인
- 스팟 인스턴스 놀고 있는 인스턴스들을 90%정도 할인해서 제공 - 인스턴스의 리소스가 부족해지면 종료 2분 전 공지 후 리소스를 회수
ELB
- 트래픽을 여러 가용 역역에서 여러 Amazon EC2 인스턴스에 걸쳐 분산한다.
- Amazon EC2 인스터스의 상태 확인을 지원한다.
EC2 인스턴스에 대한 트래픽의 라우팅과 로드 밸런싱을 지원한다.
- 종류
- Classic
- Application
- Network
- 고정 세션
- 로드 밸런서의 고정 세션 기능을 사용하면 로드 밸런서가 사용자의 세션을 특정 서버 인스턴스에 바인딩할 수 있다.
- 고정 세션으로 인해 애플리케이션의 확장성이 제한될 수 있다.
- 서버 전반에 걸쳐 로드가 불균등해져 사용자 응답 시간에 나쁜 영향을 미칠 수 있다.
- 대안으로 분산 캐시나 NoSQL 데이터베이스를 사용할 수 있다.
Amazon EC2 Auto Scaling
- 수동 조정
- 예약된 조정 예측 가능한 이벤트를 대응할 때 - 특정 시간 트래픽 증가 대비
- 동적 조정 예측 불가능한 상황을 대비
AWS 시작하기
- AWS 자격 증명 획득
- 개발 환경 설치
- 특정 언어용 AWS SDK 설치 - Resource SDK 권장
- AWS 자격 증명 설정
AWS 접근 방식
- Console ID/PW를 이용해 접근할 수 있다.
- SDK
- CLI
- API API 사용시 통신에 필요한 인증/보안 모듈을 구현해줘야한다.
개발자 도구(IDE)
- AWS Cloud9
- 별도의 설치 필요없이 브라우저에서 운용 가능
- 실시간 페어 코딩이 가능
- AWS X-Ray
- 애플리케이션의 통신을 모니터링
- 서비스 상태의 내부를 모니터링(병목현상 등)을 할 수 있음
- 람다로 구현 시 쉽게 동작 가능
- 소스 코드 레벨에서 구현
- API 작업
- PutRaceSegments
- BatchGetRaces
- GetServiceGraph
- GetRaceSummaries
- Cloud Watch
- AWS 리소스(EC2 등)을 모니터링
- Cloud Trail
- AWS 사용자(사용자의 로그인, 요청 성공/실패, 실패 이유 등 기록)를 모니터링
IAM
- 공동 책임 모델 AWS + Client 측 모두가 보안 책임을 진다.
- AWS AWS 기초 서비스(컴퓨팅, 스토리지, 데이터베이스, 네트워킹), AWS 글로벌 인프라(리전, 가용 영역, 엣지 로케이션)
- Client 클라이언트 측 데이터 암호화 및 데이터 무결정 인증, 서버측 암호화, 네트워크 트래픽 보호, 운영체제/네트워크/방화벽 구성
IAM의 4가지 요소
- user user는 여러 group을 가질 수 있다.
- group group은 중첩될 수 없다.
- role 정책을 user에게 덮어씌움 - 임시 권한 (role을 적용하면 user에게 적용된 기존 policy가 모두 무시됨)
- policy 권한을 JSON으로 정의하고 Allow/Deny로 구분 (allow/deny가 충돌시 Deny 우선)
IAM 권한 유형
- 자격 증명 기반 권한
- 리소스 기반 권한
- IAM 정책 유형
- 관리형: AWS 관리형/고객 관리형
- 인라인: 리소스 기반 정책
- 최소 권한을 부여하기 위해 명시적 거부 정책을 설정해준다.
AWS의 인증 개요
- AWS 인증 (IAM O) ex) 환경을 빌드하는 경우
- 애플리케이션 인증 (IAM X) ex) 사용자가 앱에 로그인할 때
- 리소스 인증 (IAM O) ex) 사용자가 사진을 찍어 Amazon S3에 업로드
- 데이터베이스 인증 (IAM X) ex) 사진이 S3버킷에 업로드되고, 이로 인해 백엔드 작업이 항목 있는 RDS 데이터베이스를 업데이트 하는 경우
하지말아야할 것!
- 루트 계정 자격 증명 사용
- 코드에 AWS 자격 증명 삽입
- GIT 리포지토리, Wiki와 같이 공개된 위치에 자격 증명 저장
보안 자격 증명: 우선순위 순서
- 코드에 지정되어 있음
- 환경 변수
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- 자격 증명 파일의 기본 자격 증명 프로필
- Linux&Mac: ~/.aws/credentials
- Windows: %Userprofile%/.aws/credentials
- EC2 인스턴스 역할: Best Practice 역할을 부여하는게 가장 올바른 방법이기 때문에 우선순위가 높은 1~3은 적용하지않는다.
EC2 인스턴스 역할 부여하기
AWS 스토리지 옵션
Amazon S3 클라우드상의 확장 가능하고 내구성이 뛰어난 객체 스토리지
- 원하는 양의 데이터를 저장하고 검색할 수 있는 간편한 웹 서비스 인터페이스 제공
- 언제든 웹상 어디서나 액세스 가능
- 매우 안전하고 내구성이 뛰어나며 확장 가능한 객체 스토리지 제공
요약하면, 기능 많은 웹하드(…)
- Amazon S3 Glacier 클라우드상의 저렴하고 내구성이 뛰어난 아카이브 스토리지
- Amazon EFS Amazon EC2 인스턴스용 확장 가능 네트워크 파일 스토리지
- AWS Storage Gateway 사실상 무제한의 클라우드 스토리지에 대한 온프레미스 액세스 권한을 제공하는 하이브리드 클라우드 스토리지 서비스
- Amazon EBS Amazon EC2 인스턴스를 위한 내구성이 있는 블록 수준 스토리지를 제공하는 네트워크 연결 볼륨
개발자 시점에서 보는 S3
- 쓰기(Put)
- upload - 최대 5T, 파일이 커질 경우 분할 업로드 해야함
- multipart - sdk단에서도 지원, 코드레벨에서 구현해도 됨
- sse - s3, kms, cms… 서버 측 암호화를 사용하여 저장된 데이터를 보호
- md5 checksum - 무결성 검사 구현
- 읽기(Get)
- byte stream read가 가능
- sql 쿼리가 가능 (select) - 원하는 데이터만 가져와 읽기 때문에 read 비용이 절감됨
- key를 기반으로 목록을 뽑을 수 있음 key==filename, prefix 개념
- presigned url: 임시(10~3600초)로 접근을 허용하는 url - 지정된 시간이 지나면 AccessDenied
- 삭제
- Versioning - 어디까지 보관할지
- 버킷 이름은 전역적으로 고유해야 한다.
- 3~53자를 사용
- 소문자, 숫자, 하이픈(-)판 사용
- SSL과 함께 가상 호스팅 방식 버킷을 사용하는 동안에는 마침표(.)를 사용하면 안 됨
- 밑줄(_)문자는 사용하면 안 됨
- 비용
- 버킷 서울 리전 -> EC2 서울 리전일 경우 비용X
- 버킷 도쿄 리전 -> EC2 서울 리전일 경우 비용O 같은 리전을 사용하는 것으로 비용 문제를 회피할 수 있음
- 객체 키와 메타데이터
- 각 객체는 고유한 키를 가진다. (키 인코딩: UTF-8 / 최대 키 길이: 1024바이트)
- 메타데이터도 하나의 요청에 몰아서 쓰면 비용이 감소
- 접근
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.