Region
- 리전은 전세계에 걸쳐있습니다.
- ex) us-east-1, us-west-3 등
- 데이터 센터의 클러스터가 됩니다.
- 거의 대부분의 AWS서비스는 리전(특정 지역)에 초점이 맞춰집니다.
리전 선택
- 규정 준수 - 몇몇 정부에서 앱을 배포하는 국가의 로컬 데이터를 요구하는 경우가 있음 ( 프랑스는, 프랑스에 로컬 데이터가 위치해야 합니다)
- Latency - 대기 시간을 줄이기 위해 사용자와 가까운 위치를 이용합니다.
- 가용 서비스 - 몇몇 지역에서는 서비스가 지원 되지 않기에 배포할 지역에 해당 서비스가 있는지 확인해야 합니다.
- 가격 - 지역별로 가격이 다릅니다.
AZ (Availability Zones)
- 각각의 리전은 다수의 AZ를 가집니다. (보통 3, 2~6의 가용지역을 가짐)
- ex) ap-southeast-2a, ap-southeast-2b, ap-southeast-2c
- 하나의 가용지역은, 하나이상의 데이터 센터를 생성할 것이며, 그것들은 네트워크와 연결성을 갖게 됩니다.
- 각각의 가용지역은 각각 분리되어 있습니다. ( 재난등으로부터 보호 )
- 높은 대역폭과 초저지연 네트워킹으로 연결되어 연결되어 있으며, 지역을 생성합니다.
Points of Presence ( Edge Locations )
- AWS는 42개 국가 84개 도시에서 200개 이상의 엣지로케이션을 가지고 있으며, 이를 이용해서 저지연 콘텐츠를 제공합니다.
글로벌 서비스
- IAM
- Route t3
- CloudFront
- WAF
대부분의 서비스는 글로벌 서비스가 아닌 지역에 초점을 맞추고 있습니다.
글로벌 서비스는, 하나의 리전이 아닌 모든 리전에서 사용가능함을 의미합니다.
IAM
- IAM은 ID와 Access Management 를 나타내며 글로벌 서비스입니다.
- 사용자를 생성하고 이들을 그룹으로 할당하빈다.
- Root account - 기본값으로 설정되어 있으며, 모든 권한을 가집니다.
- Users - IAM안에서 유저를 생성하고 하나의 사용자는 여러 조직을 가질 수 있습니다. ( 그룹을 갖지 않는 것도 가능 )
- Groups - 그룹은 유저만을 포함할 수 있습니다. ( 그룹안에 그룹 넣기 X )
IAM - Permissions
- 유저나 그룹은 JSON 문서로 되어있는 정책을 할당받게 됩니다.
- 정책들은 사용자들에게 권한을 정의하게 설정됩니다.
- 최소 권한 원칙 - 보안, 서비스 등을 위해 필요한 최소한의 권한만 할당하세요 ( AWS 권장 원칙 )
IAM - Password Policy
- 비밀번호 설정으로 인해, 더 보안이 강화됩니다.
- 방법
- 비밀번호 최소 길이를 설정
- 특정한 문자 유형을 요구(대문자 소문자 숫자 등)
- 비밀번호를 바꾸게 설정
- 같은 비밀번호 사용 방지
Multi Factor Authentication ( MFA )
- AWS에 필수조항, 사용하도록 강력 권고
- 루트 계정이나 IAM 유저를 보호할 수 있음
- 보안디바이스를 이용하는 방식으로 비밀번호만 사용할 때보다 훨씬 강력한 보안 유지
- 비밀번호를 해킹당해도, 계정이 손상되지 않는다는 장점이있음.
AWS의 MFA 디바이스
- Virtual MFA device
- Google Authenticator ( phone only )
- Authy ( multi-device )
- Universal 2nd Factor (U2F) Security key
- YubiKey
- Hardware Key Fob MFA Device
- Gemalto
- Hardware Key Fob MFA Device for AWS GovCloud(US)
- Provided by SurePassID
AWS 제어 방법
- AWS Management console
- Command Line Interface ( CLI )
- Software Developer Kit ( SDK )
SDK의 경우 access key를 통해 제어되는데, 이는 관리 콘솔을 통해 생성 할 수 있음.(일종의 비밀번호)
- Access Key ID - username
- Secret Access Key - password
AWS CloudShell
- 일종의 AWS의 터미널 (단 지원하는 지역이 한정되어있음)
EC2
- Elastic Compute Cloud - Infrastructure as a Service(IaaS)
- 경우에 따라, EC2는 하나를 지칭하는 단어가 아니라 여러개의 구성으로 확장된다.
- EC2 ( 인스턴스 )
- EBS
- ELB
- ASG
- 지원하는 OS : 리눅스, 윈도우, 맥OS 3개를 지원합니다.
- CPU, RAM, Storage, Network, 방화멱, 부트스트랩 스크립트 (처음 시작할때 설정한 코드가 실행됨) 등을 고려해서 인스턴스를 설정합니다.
- 인스턴스의 이름규칙에 따라 작명되어있으며, 용도에 따라 적절한 인스턴스를 사용해야합니다. (c-컴퓨팅, m-메모리, s-스토리지 등)
- Security Group설정으로 보안 (포트, IPv4, IPv6, 인바운드 아웃바운드 설정 등)
- 연결이 타임아웃된 상태면 보안그룹을 확인하고, connection refused 같은 경우는 어플리케이션을 확인한다.
- Ssh(22), http(80), ftp(21, file transfer protocol), sftp(22, secure file transfer protocol, ssh를 이용해서 전송하기 때문에 22번 포트 사용), https(443), rdp(3389, remote desktop protocol)
SSH
- 흔히 말하는 원격조종이라고 생각하면 편합니다.
- 운영체제에 따라 연결법이 다릅니다. (mac, linux, windows10 이상, 이하)
- AWS의 Instance Connect를 이용하는 것이 제일 간단.
IPv4 vs IPv6
- IPv4의 주소가 거의 소멸되는 상태가 되자, IPv6를 새로 도입하게됨
- IPv4를 현재 사용하고 있는 기기가 대부분이기에 함부로 IPv6로 변경하지 못함
- 현재는 웹사이트에서 IPv4를 사용하고 있으며, IPv6는 IOT에서 주로 사용하고 있음.
Public vs Private
- AWS에는 Public ip 와 Private ip를 제공하는데, Public ip를 통해 인터넷을 통한 접속이 가능하고, Private ip를 통한 특정 공간( VPC )에서의 기기끼리의 연결이 가능
Elastic Ip
- 인스턴스를 중지하고 다시 시작할 경우, Public ip가 변경되는데 이러한 것을 Elastic IP를 부착하여 고정된 Ip주소로 사용할 수 있습니다.
- AWS에서는 계정당 5개까지의 elastic ip를 제공 ( AWS에 추가 요청시 가능하지만, 드문 케이스)
- Elastic IP를 잘 사용하지 않는 것이 구조적으로 효율적 + DNS를 사용하는 것이 더 좋음
Placement Groups
- 클러스터: 하나의 AZ에서 (하나의 Rack) low-latency group을 이룬다. ( 고성능이지만, 고위험 )
- 스프레드: AZ당 최대 7개의 인스턴스를 가지며 넓게 분포한다. ( 중요한 앱이있는 경우 사용 )
- 파티션: 스프레드와 비슷하지만, 그룹당 수백개의 EC2 인스턴스들을 이용
Elastic Network Interfaces (ENI)
- VPC의 논리적 구성 요소
- ENI는 다음의 특성을 가진다.
- Primary private IPv4
- 한개 or 더 많은 예비 IPv4를 가진다.
- 한개의 Public IPv4를 가진다.
- 하나 or 더 많은 Security group을 가질수 있다.
- Mac address가 있다.
- EC2 인스턴스로 부터 독립적으로 생성 가능하다. 이를 장애 조치를 위해 EC2 인스턴스에 부착 가능
- 하나의 AZ에 묶여 있다. (AZ끼리 이동 불가.)
EC2 Hibernate
- 인스턴스는 중지할 수 있는데, 중지 할경우, disk(EBS)의 데이터가 다음 시작을 위해 그대로 유지되지만, OS는 정지되고 시작할때 재시작됩니다.
- Hibernate를 사용할 시, 모든 메모리가 보존됩니다. 이를 통해 인스턴스의 부팅 속도가 훨씬 빨라지게 됩니다. ( 운영시스템은 중지되거나 다시 시작한 적이 없기 때문에 )
- 최대절전모드라고 생각하면 편함
- RAM상태는 EBS볼륨에 파일로 덤핑됩니다. ( EBS볼륨은 당연히 암호화가 되어야 함 )
EC2 Nitro
- 현재 사용중인 차세대 EC2 인스턴스 기본 플랫폼
- 새로운 가상화 기술을 도입
- 더 좋은 성능을 보이고, 더 나은 네트워크 옵션, 더 빠른 EBS지원(64000 IOPS가능, Nitro가 아닌 경우 최대 32000 IOPS) , 보안 향상, 많은 백엔드 개선
Understanding vCPU
- vCPU = CPU core * Thread
- 비용 절감을 위해 Optimizing 할 수 있습니다. ( 코어당 쓰레드 갯수, 코어 갯수 등 )
EC2 Capacity Reservations
- 추가 용량을 미리 계획 (짧은 예약으로 기간과 용량만 설정하면됨)
Elastic Block Store (EBS)
- 네트워크를 통해 인스턴스에 연결되는 볼륨형태의 저장공간 ( 네트워크를 사용하기 때문에 데이터 전송간의 딜레이가 있을수 있습니다. )
- EBS를 통해 데이터를 유지할 수 있습니다.
- 특정 AZ에 묶입니다.
- EC2 인스턴스로부터 탈부착 가능
- 프로비저닝된 수용성 ( 얼마나 공간이 필요한지 정의해야함 )
- 공간이 더 필요할 경우 시간이 지남에 따라 용량을 늘릴 수 있음
- Delete on Termination 옵션이 설정되어 있으면, 인스턴스가 삭제될때 루트 볼륨이 같이 삭제됩니다.
EBS 스냅샷
- 백업 ( 스냅샷 )을 생성할 수 있습니다.
- 스냅샷을 위해 EBS를 인스턴스로부터 떼어낼 필요는 없지만, 완벽하게 진행하기 위해서는 권장됩니다.
- 스냅샷 이후, 다른 AZ or 리전으로 카피 가능
AMI - Amazone Machine Image
- EC2 인스턴스의 커스터마이즈
- 나만의 소프트웨어, 구성, 운영시스템, 모니터링 등 을 설정할 수 있습니다.
- 더 빠르게 부팅하고, 더 빠르게 구성할 수 있습니다. ( AMI안에 내장되어 있어서 )
- AMI는 특정 리전에 구축되어있습니다. ( 다른지역에서 사용하려면 지역간에 복사 )
EC2 Instance Store
- EBS 볼륨은 네트워크 드라이브이기에, 성능의 한계가 있습니다.
- EC2 Instance Store는 하드웨어 디스크가 EC2에 부착된 형식이기 때문에 높은 성능을 보여줍니다.
- 더 나은 I/O 성능을 보여줍니다.
- 단, 인스턴스가 종료되거나, 중지될 경우, 인스턴스 스토어의 저장공간 또한 손실됩니다.
- 버퍼, 캐쉬, 스크래치 데이터, 임시 컨텐츠 등을 저장하기에 적절
- 하드웨어가 손실됬을 때 큰 손실을 입을 가능성이 있습니다.
- EC2 인스턴스를 사용하기로 했다면, 백업이나 복제가 필수적입니다.
EBS Volume Types
- gp2 / gp3 : SSD 볼륨
- Io 1/ io 2 : SSD 볼륨, Highest - performance
- St 1 : HDD 볼륨,
- sc 1 : HDD 볼륨, 덜 사용하는 데이터 저장에 적절
EBS Multi-Attach - io1/io2 family
- EBS 볼륨을 여러개의 EC2 인스턴스에 부착하는 방법 ( 같은 AZ )
- 각각의 인스턴스는 full read & write 권한을 가집니다.
EBS Encryption
- 암호화된 EBS 생성하면 다음을 얻게 됩니다.
- 저장 데이터가 볼륨 내에서 암호화됩니다.
- 인스턴스와 볼륨 사이에 이동중인 모든 데이터가 암호화됩니다.
- 모든 스냅샷이 암호화됩니다.
- 스냅샷에서 생성된 모든 볼륨이 암호화됩니다.
- 암호화 과정은 투명하게 처리되기 때문에 따로 할일은 없습니다. ( AWS에서 EC2 EBS에 의해 처리)
- 이러한 암호화는 가능하면 모든 것에 적용하기를 권장합니다. - 이는 매우 적은 지연만을 가져옴
- KMS의 키를 활용합니다. (AES-256)
EFS - Elastic File System
- Managed NFS 혹은 네트워크 파일 시스템이라고 불립니다.
- 이는 AZ 영역을 넘어서 여러 인스턴스에 탑재될 수 있습니다.
- 가용성이 높고, 확장 가능하지만, 가격이 매우 비쌉니다. ( 단 사용한 만큼만 지불 )
- 컨텐츠 관리, 웹서빙, 데이터 공유, 워드프레스 웹사이트 같은 것에 사용
- NFSv4.1 프로토콜 사용
- security group을 이용해서 EFS에 접근을 컨트롤
- EFS는 리눅스 기반에만 작동합니다.
- 암호화를 위해서는 KMS키를 사용합니다.
- 각각의 2가지의 모드가 존재
- Performance mode
- General purpose : 웹서버 등의 사용 사례 ( 지연 민감 파일 시스템 )
- Max I/O : 지연시간이 길어지지만, 사용량은 더 좋아집니다. ( 빅데이터에 적절 )
- Throughput mode
- Bursting ( 처리량이 파일시스템의 크기와 같이 확장 )
- Provisioned ( 구체적인 양 설정 )
- Performance mode
- Storage Tiers 가 존재하여 수명주기 설정으로 자주 사용하지 않는 데이터는 가격이 싼 저장공간으로 이동 가능
Scalability
- 확장성은, 어플리케이션/시스템들의 사이즈가 더 커질 수 있음을 의미합니다.
- 두가지 종류의 확장성
- Vertical Scalability ( 수직 확장성 )
- Horizontal Scalability ( 수평 확장성 )
High availability
- 높은 가용성은, 확장성이랑 다릅니다.
- 이는 최소 2개이상의 데이터센터 or 가용지역을 이용중임을 의미합니다.
- 하나의 데이터 센터가 작동불가 상태가 되도 다른 지역에서 작동하게 됩니다. ( 재난 대응 )
Load balancing
- 로드 밸런스는, 서버 트래픽을 여러개의 서버로 분산하는 다운스트림형태입니다.
- 하나의 DNS로 사용가능하다는 장점도 있음
- 장애대응에 효과적
- 헬스체크를 통해 인스턴스가 사용가능한 상태인지 확인
- SSL을 통한 https 사용가능
- 쿠키를 이용한 stickiness 사용가능
- 다른 AZ간의 high availability
로드밸런서 종류
- Classic Load Balancer
- 2009 년부터 사용된 구버전 ( 지금은 잘 사용하지 않음 )
- HTTP, HTTPS, TCP, SSL 등 지원
- Application Load Balancer
- 2016 년부터 사용된 신버전
- HTTP, HTTPS, WebSocket 지원
- Network Load Balancer
- 2017년 부터 사용
- TCP, TLS, UDP 지원
- Gateway Load Balancer
- 2020년 부터 사용
- 네트워크 레이어를 운영하는 3개의 ip 프로토콜 제공
ALB운영시, client IP를 알아야할 때
- ALB를 기본으로 운영시, EC2 인스턴스는 클라이언트의 Ip주소를 알수 없습니다.
- 이를 알기 위해서, 클라이언트의 주소를 ALB가 X-Forwarded-For에 client ip 주소를 저장합니다.
- Ec2 인스턴스는 클라이언트 ip가 필요할 때, X-forwarded-for로 부터 가져옵니다. (x-forwarded-port, x-forwarded-proto를 통해 port, proto 또한 가져올 수 있습니다.)
ALB 와 NLB의 차이
- ALB는 Layer7 수준 - http, https에서 작동
- NLB는 Layer4 수준 - TCP, UDP 에서 작동
- Layer4를 이용하기 때문에 NLB의 지연율이 훨 적음 ( ~100ms vs ~400ms )
- NLB는 AZ하나당 하나의 고정된 IP 주소를 가집니다. ( ALB는 고정된 host주소를 가지는 것과 차이 )
- NLB는 극도로 높은 성능을 요구할 때 사용됩니다.
Gateway Load Balancer
- 보유한 네트워크에 침입 탐지 및 방지 시스템 등을 이용하고자 할때 주로 사용
- Layer3 수준(Network layer)에서 작동합니다.
- 2가지의 기능을 가집니다.
- 투명 네트워크 게이트웨이 - 모든 트래픽이 vpc에 있고 입구와 출구를 통해서 네트워크가 이동할 텐데, 이것이 로드밸런서가 됩니다.
- 로드밸런서의 역할
- 6081포트에서 GENEVE 프로토콜을 이용
Sticky Sessions
- 동일한 유저는 동일한 인스턴스로 연결하는 설정
- 쿠키를 이용하여 기능을 사용
- Application-based Cookies 두가지의 쿠기 종류
- Custom cookie
- 목표에 의해 생성된 맞춤 쿠키
- 앱에 필요한 모든 맞춤 속성을 포함할 수 있으며, 쿠키 이름은 각각 목적에 따라 개별적으로 특화되어야하는데 AWSALB, AWSALBAPP등 몇몇 쿠키이름은 이미 ELB가 사용하기 때문에 사용하면안됩니다.
- Applicaiton cookie
- 로드밸런서에 의해 생성
- AWSALBAPP쿠키 사용
- Custom cookie
- Duration-based Cookies
- 로드밸런서에 의해 생성 쿠키이름은 ALB에서 사용하는 AWSALB, CLB에서 사용하는 AWSELB가 됩니다.
- 만료기간이 있습니다.
Cross Zone Load Balancing
- ALB
- 항상 가능 ( 비활성화 불가능 )
- AZ간 데이터 전송에서는 비용을 지불하지 않음
- NLB
- 기본적으로 비활성화
- CLB
- 기본적으로 비활성화
- AZ간 데이터전송에는 요금이 부과되지 않음
SSL / TLS
- SSL인증서를 통해 클라이언트와 로드밸런서 전송중 암호화를 허락합니다.
- SSL 보안 소켓 레이어를 나타냅니다. ( 연결을 암호화하는데 사용 )
- TLS는 SSL의 최신버전 입니다. (전송 레이어 보안을 나타냄)
- TLS가 주로 사용되고있으며, 종종 이를 SSL이라고 부르기도함
- SSL은 공공 인증기관에서 발급됩니다.
SSL - Sever Name Indication ( SNI )
- 웹서버가 여러 웹사이트를 제공하기 위해 하나의 웹서버에서 여러 SSL인증서를 로드하는 방법
- 핸드쉐이크를 통해 , “이 서버에 연결하고 싶다” 요청을 하면, 서버가 어떤 인증서를 로딩하는지 파악하고 새당 인증서를 발급
- ALB & NLB(새로운 버전), CloudFront에서만 작동합니다. ( CLB에서는 작동하지 않음 ) - CLB가 다중 웹사이트에 대한 지원을 하기위해서는 여러개의 CLB를 운영해야함 ( CLB하나당 1개의 SSL을 지원 )
Connection Draining
- Feature naming
- CLB - Connection Draining
- ALB & NLB - Deregistration Delay
- 인스턴스 등록이 취소되거나 비정상으로 표시되는 동안 인스턴스가 진행중인 요청 또는 활성 요청을 하는데, 약간의 시간을 주는 기능
- 0~3600초의 드레이닝 시간을 설정할 수 있습니다. (0인 경우, 드레이닝 설정 안함 상태)
- 짧으면 짧을수록 빠르게 오프라인되도록 진행함
Auto Scaling Group
- 증가된 로드 및 감소된 로드에 따라 인스턴스의 환경(갯수)를 조절함
- ELB에 연결하여 자동화 된 인스턴스 환경을 구축할 수 있음
- 최소, 최대 인스턴스 갯수를 지정함으로 동적으로 대응
Auto Scaling Alarms
- CloudWatch alarms을 기반으로 한 ASG을 계산하는 것이 가능
- 측정항목을 설정하고 해당 측정항목이 설정한 값 이상 혹은 이하가 됬을 때 대응 (평균 CPU 양 등)
ASG - Dynamic Scaling Policies
- Target Tracking Scaling
- 가장 설정하기 쉬운 설정
- 예) 모든 EC2 인스턴스의 사용량이 평균 40프로를 넘지 않게 설정해라
- Simple / Step Scaling
- CloudWatch Alarms을 통해 설정량 이상일 때 2개의 유닛을 추가해라 or 2개를 삭제해라 등
- Scheduled Actions
- 조정이 필요한 시간에 인스턴스를 증가 했다가 이후에 줄여라 ( 오후 5 ~ 오후 9시에는 인스턴스를 증가시켰다가 해당시간이 아니면 줄여라 )
ASG - Predictive Scaling
- Predictive Scaling
- 예측을 통해 계획을 조정하는 방법 (머신러닝 기반)
사용하기 좋은 metrics
- CPU사용량
- 타켓당 요청 갯수 ( 인스턴스 하나당 요청을 얼마나 받는지 )
- 평균 네트워크 In/Out량
- 커스텀 메트릭 (CloudWath를 통해 설정)
ASG - Cooldowns
- 조정활동 이후, 쿨다운 기간을 가짐 ( 기본값 300 )
- 이기간 동안에는 인스턴스를 추가하거나 삭제하지 않음
RDS
- RDS는 Relational Database Service의 약어
- 이는 SQL을 사용하는 데이터베이스입니다.
- AWS를 통해 클라우드에서 데이터 베이스 운영이 가능합니다.
- Postgres
- MySQL
- MariaDB
- Oracle
- Microsoft SQL Server
- Aurora
- RDS는 managed service입니다.
- 데이터베이스 제공은 물론, OS가 탑재되어있어 완전한 자동화가 가능합니다.
- 지속적으로 백업파일을 생성할 수 있고, 타임스탬프를 통한 복원이 가능합니다.
- 대쉬보드를 통한 모니터링이 가능합니다.
- 복제를 통한 읽기 전용을 구축하고, 이로인해 데이터베이스 성능이 증가합니다.
- Multi AZ에서 구축가능합니다.
- 유지보수가 가능합니다.
- 확장가능합니다.
- 스토리지는 EBS에 의해 제어됩니다. (gp2, io1)
- SSH를 통해 인스턴스에 접근할 수 없습니다.
RDS - Storage Auto Scaling
- 저장공간이 부족해지면, RDS는 이를 감지하고 자동으로 스케일업합니다.
- 최댓값을 설정할 수 있습니다.
- 모든 AWS 데이터베이스가 이 기능을 지원합니다.
Read Replicas
- 읽기 전용 스케일 복제입니다.
- 쓰기와 읽기가 동시에 작동된다고 하면 너무 많은 리퀘스트가 있어 성능이 떨어집니다.
- 이를 위해 읽기전용 데이터베이스를 복제합니다
- 같은 AZ
- 다른 AZ
- 다른 리전
- ASYNC replication - 비동기식 복제: 마스터 인스턴스로부터 복제하여 읽기전용 레플리케이션을 설치
- 복제된 데이터베이스는 오직 SELECT 문구만 가능 ( INSERT, UPDATE, DELETE 등 불가 )
RDS Multi AZ
- 재해복구를위해 멀티 AZ를 사용합니다.
- SYNC replication을 통해 새로운 RDS DB인스턴스를 복제합니다. ( 마스터에 새로운 데이터가 저장되면 복제된 곳에도 데이터가 복제되어야함 )
- 이들은 같은 DNS를 사용하기 때문에 마스터인스턴스에 재해가 생기더라도 Failover함
- 이를 활성화 할때, RDS를 멈출 필요없음( Zero downtime ) - modify를 통해 해당 옵션을 활성화하면 끝
RDS Security - Encryption
- AWS의 KMS를 통해 마스터 데이터베이스와 read replication를 암호화 할 수 있습니다.
- 마스터 인스턴스가 암호화 되어있지않으면, read replica도 암호화되지 않습니다.
- Transparent Data Encrytion ( TDE )를 적용 할 수 있습니다. - ( Oracle and SQL Server )
- In - flight encrytion
- SSL인증서를 이용한 암호화 방식으로, RDS를 암호화하는 동시에, in-flight(클라이언트와 데이터베이스간의 데이터 전송)가 가능합니다.
- 모든 클라이언트가 SSL을 사용하기를 강요하기 위해서는
- PosterSQL : rds.force_ssl = 1를 설정해야합니다.
- MySQL : SQL 명령문을 실행
- 암호화되지 않은 RDS를 암호화는 방법은 EC2 암호화 방식과 동일하게 스냅샷 생성후 카피를 통해 암호화 설정 활성화
RDS - Network&IAM Security
- 보통 퍼블릭 서브넷이 아닌 프라이빗 서브넷 배치
- RDS보안은 RDS인스턴스에 부착한 보안그룹을 설정합니다.
- IAM 정책을 설정함으로 데이터베이스를 읽기, 삭제, 추가 등을 설정가능
Aurora
- AWS의 특허기술이므로, 오픈소스가 아니며, PostgreSQL, MySQL와 호환가능
- 클라우드 최적화로 만들어져, 다른 데이터베이스보다 성능이 좋습니다.
- 스토리지가 자동으로 확장됩니다.
- MySQL이 5개의 replica를 갖는것과 다르게, Aurora는 최대 15개까지 가질 수 있습니다.
- 복제 속도또한 매우 빠르게 설계되었습니다.
- 다른 RDS에 비해 약 20%정도 비싸지만, 그만큼 성능이 훨씬 효율적입니다.
- 3개의 AZ에 6개의 카피를 가지게됩니다.
- write를 위해서는 4개의 카피가 필요합니다.
- read를 위해서는 3개의 카피가 필요합니다. ( 높은 가용성을 가집니다. )
- 자동 복구기능이 있습니다. ( P2P식의 복제를 통해 자동 복구를 진행합니다 )
- 수많은 볼륨에 의존합니다.
- 다른 RDS처럼 read replica를 생성하고, 만약 마스터 인스턴스가 다운됬을 때, 어떤 read replica든 마스터 인스턴스가 될 수 있습니다. ( 높은 가용성 )
- 데이터베이스에 read 요청량이 많아질 경우, 자동으로 Auto Scaling하여 read replica를 생성하는데 이는 reader Endpoint를 통해서 모든 read replica에 자동으로 연결됩니다.
Aurora Serveless
- 실제 사용에 근거한 자동 스케일링을 제공합니다.
- 이는 간혈적이거나 예측 불가능한 워크로드를 가지고 있을때 유용합니다.
- 어떠한 용량 계획이 필요없습니다.
- 초단위로 비용을 지불합니다.
Global Aurora
- Aurora는 하나의 주요 리전을 가집니다.
- 5개의 서브 리전을 가집니다. ( 읽기 전용 )
- 각각의 서브 리전은 16개의 read replica를 가집니다.
Aurora ML
- Aurora는 다양한 ML-based 예측을 제공합니다.
- 간단하고, 최적화되고, 보안화된 상태에서 Aurora ML 서비스를 이용할 수 있습니다.
- SageMaker
- Comprehend
- 머신러닝 경험이 없어도 간단해서 이용 할 수 있습니다.
ElastiCache
- RDS에서 관리된 관리형 데이터베이스를 제공받는것처럼 ElastiCathe는 관리된 Redis나 Memcached를 제공합니다.
- 캐시는 인메모리 데이터베이스로 높은 성능과, 짧은 지연시간을 가지고, read intensive 워크로드를 위해 데이터베이스의 로드를 제거합니다.
- 빈번하게 쿼리되는 데이터베이스 내용을 캐시에 저장함으로 이점을 누릴수 있습니다.
- RDS와 동일한 이점을 가지고 있기 때문에 유지보수가 좋습니다.
Redis
- 멀티 AZ 지원 ( Auto Failiover )
- Read replica는 read를 스케일하기 위해 사용
- 높은 가용성을 가짐
- 영구 캐시로 데이터 지속성도 있음
- 백업기능도 있음
- RDS와 유사
Memcashed
- 멀티 노드를 사용하여, 파티셔닝 ( sharding )
- 높은 가용성 x
- 복제 x
- 영구 캐시 x
- 백업 저장 x
- 멀티 스레드 아키텍쳐
Cache Security
- IAM 인증을 지원하지 않음 ( AWS API 수준의 보안에서 사용 - 캐시생성, 삭제 등)
- Redis AUTH - 레디스 클러스터 생성시 비밀번호/토큰을 설정 할 수 있습니다. 이는 캐시에 들어갈 때 비밀번호를 입력하도록 요청, 보안그룹이상의 보안
- SSL을 통한 in flight encrytion 가능
- Memcashed - 조금더 높은 수준의 SASL 기반 인증을 지원
ElastiCache 패턴
- Lazy Loading - 모든 read데이터가 캐시되고, 데이터가 캐시안에서 오래 있을 수 이씁니다.
- Write Through - 데이터베이스로 write 될때마다 데이터를 캐시에 추가하고 업데이트하여 오래된 데이터가 없도록합니다.
- Session Store - Time to Live ( TTL ) 속성을 통해 세션을 만료할 수 있습니다.
Route 53
- A - 호스트네임을 IPv4로 맵핑
- AAAA - 호스트네임을 IPv6로 맵핑
- CNAME - 호스트네임을 다른 호스트네임으로 맵핑
- 목표 호스트네임은 당연히 A레코드 혹은 AAAA레코드
- CNAME을 DNS의 top노드에서 생성 못함 ( example.com 는 불가능하지만, www.example.com는 가능)
- NS - 호스팅 영역을 위한 DNS 쿼리에 답할수있는 DNS네임 or IP주소
Hosted Zones
- 호스팅 영역은 레코드들의 컨테이너, 트래픽 도메인과 서브 도메인으로 루트하는 방법을 정의합니다.
- 두가지의 호스팅
- 퍼블릭 호스팅 영역
- 프라이빗 호스팅 영역
CNAME vs Alias
- 도메인 호스트네임을 다른 이름으로 변경하고싶으면 두가지 선택이있습니다.
- CNAME
- 호스트네임을 다른 호스트네임이 가르킬수 있도록 설정 (app.domain.com -> blabla.anything.com)
- 루트가 아닌 도메인 네임을 가진 경우에만 작동합니다.
- Alias
- Route 53만의 특징에 해당하며, 호스트 네임을 특정한 AWS리소스를 가르킬 수 있도록 합니다. (app.domain.com -> blabla.amazonaws.com)
- 루트 도메인도 가르킬 수 있습니다.
- 무료입니다.
- 네이티브 헬스체크기능이 있습니다.
- 단, EC2 DNS name은 설정할 수 없습니다.
Routing Policies
- Simple - 랜덤으로 연결
- Weighted - 각각의 ip마다 가중치를 설정하고 이에따라 연결
- Latency based - 가장 적은 latency를 가지는 곳으로 연결
- Failover - 헬스체크를 통해, primary로 설정한 인스턴스가 unhealthy하다면, 서브로 설정한 인스턴스로 연결
- Geolocation - 사용자 위치를 기반으로 연결 ( 특정 국가에서 오면 어디로 연결 등 )
- Multi-Value Answer - 헬스체크를 통해, ALB처럼 밸런스를 유지 ( 단 ELB를 대체할 수 는 없음 )
- Geoproximity - 설정한 bias를 기반으로 영역을 나눠 해당하는 영역으로 연결 ( 트래픽 플로우를 이용하면 시각적 측면으로 영역을 볼 수 있음 )
Route 53 - Health Checks
- 퍼블릭 리소스에 연결하기위해 헬스체크 진행
- 헬스체크는 3가지 타입이있습니다.
- 엔드포인트를 활용한 헬스체크 ( application, server, other AWS resource )
- 다른 헬스체크 모니터링을 통한 헬스체크 ( Calculated Health Checks )
- CloudWatch Alarms 모니터링을 통한 헬스체크 ( DynamoDB, RDS )
Domain Registar
- 타사의 도메인을 Route 53에 등록하면, AWS에서 관리를 해줌
Beanstalk
- 코드를 통해서 AWS 환경을 제어 ( 매번 같은 환경을 구축하는데 이를 반복할 필요없이 짜여진 환경을 만들 수 있음 )
- Application, Application Version, Environment 등 설정
- 다양한 언어를 제공함
S3
- AWS의 파일 저장 시스템
- 무한하게 스케일링 가능한 저장공간
- 버킷이라는 저장소 단위가 있음
- 버킷은 리전레벨 ( 버킷은 유니크한 이름을 가져야 함 )
- 파일(오브젝트)은 키라고 칭함
- 오브젝트는 최대 5TB를 가질 수 있지만, 한번에 업로드 할 때 5GB씩 밖에 업로드가 안되기때뭉네 분할해서 업로드 해야합니다.
S3 - Versioning
- S3파일은 버전을 통한 관리가 됩니다.
- 같은 버킷에 같은 이름의 키가 업로드 될경우, version에따른 관리가 됩니다.
- 이를 통해 의도하지 않은 삭제로 부터 보호받을 수 있습니다. ( 이전 버전은 다시 복구 가능 )
- 버전관리가 활성화되지 않은 파일은 null 로 저장됩니다.
S3 Encryption
- AWS는 4가지의 암호화를 제공합니다.
- SSE S3 - 암호화를 위해 처리된 키를 AWS에 의해 관리됩니다.
- SSE는 서버측 암호화를 뜻합니다. ( Server Side Encrytion )
- SSE KMS - KMS를 통해 암호화 키를 관리합니다.
- SSE-C - 개인이 암호화 키를 관리합니다.
- Client Side Encryption - 개인이 암호화를 합니다.
- SSE S3 - 암호화를 위해 처리된 키를 AWS에 의해 관리됩니다.
S3 Security
- 유저 측면
- IAM 정책
- 리소스 측면
- Bucket 정책
- Object Access Control List ( ACL )
- Bucket Access Control List ( ACL )
CORS - Cross-Origin-Resource-Sharing
- origin이란, 스키마, 호스트, 포트입니다.
- 웹브라우저는 가동중인 보안이 있으며, CORS는 기본적으로 웹사이트를 방문하자마 오직 다른 출처가 이런 요청을 하도록 허락하는 경우에만 다른 출처를 요구할수있습니다.
EC2 인스턴스 메타데이터
- 기본적으로 EC2 인스턴스가 스스로 학습하도록 합니다. ( IAM 역할을 해당 목적으로 사용하지 않아도 됩니다. )
- EC2 인스턴스는 누구인지, URL이 무엇인지를 알아야 합니다. - http://169.254.169.254/latest/meta-data
- AWS에 대한 내부 IP로 개인 PC에서는 작동하지 않고, 인스턴스에서만 작동합니다.
- 이를통해 메타데이터로부터 IAM 역할 이름을 검색할 수 있습니다. ( 이를 통해 IAM 정책 테스트를 할 수 있습니다. )
- 메타데이터는 EC2인스턴스에 대한 정보이며 사용자 데이터로 EC2 인스턴스 스크립트를 런칭한 곳이 어디였는지 등 알 수 있습니다.
curl http://169.254.169.254/latest/meta-data/[알고싶은 정보]
AWS SDK
- AWS를 CLI를 사용하지 않고, 어플리케이션 코드에서 직접 동작 할 수 있습니다.
- Boto3 라고 불리는 Python SDK가 가장 유명합니다. ( AWS CLI가 Boto3로 만들었습니다. )
- 지역을 설정하지 않으면 default 값인 us-east-1이 선택되니 지역을 선택해야합니다.
S3 MFA Delete
- MFA - Delete는 MFA를 사용하는 다단계 인증이며, S3에서 중요한 작업을 수행하기 위해 사용합니다.
- MFA - Delete를 사용하기 위해서는 S3버킷에 Versioning이 활성화 되어야 합니다.
- MFA가 필요한 상황
- 영구적으로 object version을 삭제할 때
- 버킷을 suspend versioning 할 때 (버저닝 비활성화)
- 버킷 소유자만, MFA - Delete를 활성화/비활성화 해야합니다. ( root 사용자 )
- CLI를 통해서만 가능함.
S3 Default Encryption
- 기본적으로 S3에 들어가는 모든 Object는 암호화 되어야합니다. ( 암호화 옵션을 사용하면 암호화됩니다. )
S3 Access Logs
- 감사의 목적으로 모든 액세스를 S3버킷에 기록, 즉 모든 계정의 모든 승인 또는 거부된 요청들을 기록합니다.
- 이러한 로그는 다른 S3에 저장되어야 하며, 이후 Amazone Athena를 사용하여 분석
S3 Replication ( CRR & SRR )
- 이를 위해서는 Versioning이 활성화 되어야 합니다.
- CRR - 다른 리전으로 복제
- SRR - 같은 리전으로 복제
- 버킷은 서로 다른 계정에 존재 할 수 있습니다.
- 복제는 비동기식으로 일어나며, 매우 빠르게 진행됩니다.
- 이를 위해서는 IAM 롤이 생성되어야 합니다.
- 복제를 진행한 이후에 새로운 오브젝트부터 복제가 됩니다. ( 기존 오브젝트는 복제 X )
S3 pre-signed URLs
- SDK or CLI를 통해서 pre-signed URLs를 생성 할 수 있습니다.
- 만료시간을 설정 할 수 있는데 - 기본값은 3600초입니다.
- 기본적으로 pre-signed URLs을 줄 때, 그 권한을 상속합니다. ( 따라서, 그 권한을 이용해서 GET/PUT등의 작업을 수행 할 수 있습니다. )
S3 Storage Classes
- S3 Standard
- S3 Standard - Infrequent Access (IA) - 백업용으로 주로 사용
- S3 One Zone - Infrequent Access - 온프로미스 데이터 백업, 썸네일 등
- S3 Interlligent Tiering - 모니터링을 통해 어떤 S3가 적합한지 판단하고 자동으로 처리
- Glacier - 마크네틱 스토리지의 대체용으로 좋음 버킷이아니라 볼트라는 단위를 이용
- 회수하는데 시간이 걸립니다. ( Expedited - 1~ 5 minutes, Standard 3~5 hours, Bulk 5~12 hours, 최소 보관기간 90일, 즉 장기적으로 존재해야 하는 파일 )
- Glacier Deep Archive - 회수하는데 더 오래걸리지만 가격이 더 쌈 ( Standard 12hours, Bulk 48 hours, 최소보관기간 180일 )
- S3 Reduced Redundancy Storage - 지금은 사용하지 않음
S3 수명주기
- 수명주기 구성을 통해 자동으로 class이동이 가능 ( 60일 이후 IA로 이동 등 )
- 일정시간 이후 파일을 삭제하는 것도 가능
S3 Analytics - Storage Class Analysis
- S3에서 IA로 이동하는게 언제가 적절한지 분석하기 위해 사용합니다.
- 오직 Standard 에서 Standard-IA에서만 작동합니다.
- 이 기능을 활성화하면 매일 업데이트 됩니다.
- 수명주기를 계산하기 위한 제일 좋은 첫 방법입니다.
S3 Performance
- 100메가 이상의 파일을 업로드 할 때는 멀티 파일 업로드를 권장합니다. ( 5기가 이상은 필수 )
- Transfer Acceleration - 엣지 로케이션을 이용해서 전송속도를 늘리는 방법
- Byte-Range-Fetches - 바이트단로 병렬 Get 진 ( 실패시 더 작은 단위로 쪼갬 - 더 나은 복원력을 가집니다. )
- 필요한 부분만 가져옵니다. (헤더만 가져온다 등 )
S3 Select
- SQL을 이용해서 필요한 데이터만 필터링 할 수 있습니다.
- 적은 네트워크를 사용하고, 적은 CPU 코스트를 사용하게 됩니다.
S3 Event Notifications
- S3에 생성 삭제등 액션이 취해졌을 때, 알림 규칙을 통해 행동을 취할 수 있음 (SNS, SQS, Lambda 등)
S3 - Requesters Pays
- 일반적으로 버킷 소유자가 S3에 대한 네트워킹 비용을 지불하지만, 버킷 소유자 대신 요청자가 네트워킹 비용을 지불하는 방법
Amazon Athena
- 서버리스 분석 서비스
- SQL을 이용
- CSV, JSON, ORC, Arbo and Parquet
Glacier Vault Lock
- WORM - Write Once Read Many
- 볼트를 잠굼으로써, 수정할 수 없습니다. ( 변경되지 않았음을 보장 )
AWS CloudFront
- CloudFront는 콘텐츠 전송 네트워크 입니다. ( CDN )
- 읽기 성능을 높힙니다. ( 엣지로케이션으로 분배되기 때문에 )
- S3 or HTTP
- Geo Restriction을 설정 할 수 있음 ( 화이트리스트, 블랙리스트 지정 )
CloudFront Signed URL / Signed Cookies
- 일정 사람들에게 액세스 권한을 부여하고 CloudFront 배포에서 누가 액세스 권한이 있고 어떤 것에 액세스 권한이 있는지 보고 싶을 때 사용
- Signed URL - 개별 파일에 대한 액세스를 제공합니다. (파일당 하나의 URL을 얻습니다.)
- Signed Cookies - 여러 파일에 쿠키를 재사용 할 수 있습니다.
Unicast Ip VS Anycast IP
- Unicast IP - 하나의 서버가 IP주소를 보유합니다. (12로 시작하면, 12쪽으로 보내는 등)
- Anycast IP - 모든 서버가 동일한 IP주소를 보유합니다. (가장 가까운 서버로 전송)
Global Accelerator
- 앱을 라우팅하기 위해 AWS 내부 네트워크를 이용 ( Anycast IP를 이용하는 방식 )
Snowball Edge
- 테라바이트, 페타바이트단위에 데이터를 전송하는데 효과적
- 두가지의 버전
- Snowball Edge Storage Optimized
- 80테라바이트 용량의 하드웨어 디스크를 포함하며, 볼륨, S3로의 전환을 돕습니다.
- Snowball Edge Compute Optimized
- 42테라바이트의 용량을 제공합니다.
- Snowball Edge Storage Optimized
- 데이터 센터 이전, 재해복구 등을 위해 사용되는 기기
Snowcone
- snowcone은 작은 기기입니다. ( 스노우볼 엣지보다 훨씬 작음 )
- 견고하고 안전하며 가혹한 환경을 견딜 수 있습니다. ( 사막, 물속등에서 사용 가능 ), 2.1kg
- 8TB의 용량을 제공합니다.
- 스노우볼 엣지를 사용하기에 공간이 제한적인 곳에서 자주 사용 ( 드론 위에도 놓을 수 있음 )
Snowmobile
- 실제 트럭
- 1EB (1000pb)의 용량을 지원하는 매우 큰 저장소 ( 단 한대당 100PB를 지원하므로 10대를 사용했을 때 용량 )
- GPS와 연중무휴 영상 감지 시스템이 탑재되어있음. ( 데이터를 전송하는 아주 안전한 방법 )
- 10pb이상의 데이터를 전송할 때 적절한 사례
이러한 snow family들은 바로 Glacier가 될 수는 없으며, S3에서 수명주기를 이용한 전환이 필요
Hybrid Cloud for Stroage
- 일부는 클라우드에 있고, 일부는 온프레미스에 있는 것을 칭함
- 여러가지 사유로 하이브리드 클라우드를 이용 ( 보안, IT정책 등 )
- AWS Storage Gateway를 통해 가능
Storage Gateway
- S3와 온프레미스를 연결합니다.
- File Gateway
- NFS와 SMB프로토콜을 이용해서 액세스
- 파일 게이트웨이는 IAM 규칙을 통해 버킷에 연결
- 대부분 최근 사용된 데이터가 캐쉬됩니다.
- 사용자 인증이 필요한 경우, 사용자 인증을 수행하기 위해 온프레미스와 Active Directory와 통합 될 수 있습니다.
- Volume Gateway
- iSCSI프로토콜을 이용
- EBS 스냅샷을 가지며, 필요한 경우 온프레미스 볼륨을 복원하는데 사용
- Cached volume - 가장 최근에 데이터에는 대기시간이 짧은 액세스를 제공
- Stored volume - 전체 데이터 세트가 온프레미스인 stored volume에 있고, S3에 대한 예약된 백업이 있습니다.
- Tape Gateway
- 테이프 백업 시스템 같은 물리적 시스템을 사용하는 경우, 테이프가 클라우드에 백업됩니다.
FSx File Gateway
- AWS에서 제공되는 Windows 파일 서버용 기본 액세스 제공
- 자주 액세스하는 데이터의 로컬 캐시됨
Amazone FSx
- FSx는 AWS의 관리형 서비스입니다. ( 타사대비 높은 성능을 보여줍니다. )
- FSx for Windows
- EFS의 경우 POSIX시스템으로 리눅스 시스템에서만 작동합니다.
- 이는 Windows용 파일 공유 시스템입니다.
- SMB 프로토콜 및 Windows NTFS, Active Directory 통합 지원
- FSx for Lustre
- 대규모 컴퓨팅용 병렬 분산 파일 시스템
- L(inux) + ustre(cluster)
- 기계학습, 고성능 컴퓨팅에 사용
Transfer Family
- S3 또는 EFS 내외로 데이터 송수신하기를 원할때, S3 API를 사용하지 않고, EFS 네트워크 파일 시스템을 사용하지 않고, FTP 프로토콜을 사용하는 방법
- Transfer for FTP
- Transfer for FTPS
- Transfer for SFTP
SQS
- AWS에서 가장 오래된 서비스
- 완전 관리형 서비스로, decouple applications
- 큐의 메시지 수에는 제한이 없습니다.
- 기본 메세지 보관 기간은 4일 ( 최대 14일 )
- 저지연
- 메시지등 256KB 미만이여야 합니다.
SQS - Message Visibility Timeout
- 메세지가 풀되었을 때, 그것은 다른 컨슈머에게 보이지 않습니다.
- 이후 설정한 메시지 가시성 타임아웃이 지나면 해당 메세지가 다른 컨슈머에게 보입니다. ( 이는 타임아웃 전에 메세지를 처리해야 함을 의미 - 그렇지 않으면 중복처리가 될 가능성이 높음 )
- 만약 메세지 처리가 더 오래 걸릴것 같으면 Change Message Visibility API를 통해 다른 컨슈머에게 안보이게 할 수 있습니다.
Dead Letter Queue
- 반복해서 처리하지 못한 메세지를 다른 큐로 빼는 방법
- 이후 나중에 Dead Letter Queue를 분석해서 왜 성공적으로 처리되지 못했는지 분석
Delay Queue
- 의도적으로 메세지에 딜레이를 주는 방법
Long Polling
- 메세지가 비어있는데, 폴하는 경우 계속해서 기다리게되는데 이를 롱 폴링이라고 합니다.
- 사용하는 이유
- 지연시간을 줄이기 위해
- API 호출 수를 줄이기 위해
FIFO Queue
- First in First out ( 순서를 보증합니다. )
- 초당 300개의 메시지를 받으며, 초당 3000개의 메세지를 처리 할 수 있습니다.
- 정확히 한 번 보낼수있는 기능으로, 중복을 제거하는것을 허용
- 메시지의 순서가 보장되어야 할 때 사용
- 큐의 이름이 .fifo 로 끝내야합니다.
SNS
- 메세지를 보내야하는데, 수신기가 여러개일 때 효과적
- 주제를 정하고, 해당 주제에대한 구독으로 이뤄짐
- 구독자는 SQS, HTTP,HTTPS, Lambda Email, SMS, Mobile Notification 이 될 수 있습니다.
SNS + SQS Fan Out
- SQS가 SNS를 구독하도록 설계
- SQS는 SNS가 보내는 메세지를 받고, SQS를 통해 이를 처리
- 이는 완전히 분리된 모델이며, 데이터 손실이 없습니다.
- SQS지속성을 통해 처리 지연 및 작업 재시도를 제공합니다.
Kinesis
- 프로세스를 쉽게 수집하고, 스트리밍 데이터를 실시간으로 분석할 수 있습니다.
- Kinesis Data Streams - 캡쳐, 프로세스, 데이터 저장
- Kinesis Data Firehose - 실시간 데이터 로드
- Kinesis Data Analytics - 데이터 스트림 분석 ( SQL, Flink )
- Kinesis Video Stream - 비디오 관련 처리
Kinesis Data Stream
- 스트림은 샤드라는 단위를 가지는데, 샤드가 많을 수록, 스트림 통과를 위해 더 많은 데이터가 통과됩니다.
- 파티션키와 data blob을 통해 데이터가 전송되고, 샤드 하나당, 초당 1mb의 처리 능력을 보유합니다.
- 이후 처리된 데이터는 다시 파티션 키, Sequence no, Data Blob으로 컨슈머에게 전달됩니다.
- 일종의 Publish - Subscribe 구조
- 컨슈머 처리는, 2가지 종류가 있으며
- Shared - 샤드 하나당 초당 2MB, 모든 컨슈머 대상
- enhanced - 샤드 하나당 초당 2MB, 하나의 컨슈머 대상 ( 당연히 더 비싸고, 더 많은 데이터 처리 )
- 프로비저닝된 샤드로, 원하는 만큼의 샤드를 가질 수 있음
- 데이터 보존은 1~365일
- 데이터를 재처리하고 재생성할 수 있습니다.
- Kinesis에 들어간 데이터는 삭제할 수 없습니다. (불변성)
- 같은 파티션을 공유하는 데이터는 같은 샤드로 이동합니다.
Kinesis Data Firehose
- 목표 위치에 데이터를 저장
- 한번에 1mb씩 데이터가 업로드
- 람다 함수를 생성하여, 일부 스팸 수정을 수행하기 위해 레코드 변환
- 해당 데이터를 목표 데이터베이스에 쓰기 위해 데이터 배치를 채우기 시작 ( 순간적으로 쓰지 않고, 효율적으로 작성하기 위해 배치로 모아서 처리 시도 )
- 준 실시간 서비스라고 불림
- 목적지 : S3, Redshift, ElasticSearch
- datadog, splunk, new relic, mongoDB같은 타 파트너사도 가능
- 커스텀을 통해 HTTP Endpoint도 가능
- 처리를 실패한 데이터는 이후 S3 백업 버킷으로 보낼 수 있습니다.
Docker Containers Management
- ECS - 컨테이너 서비스
- Fargate - 서버리스 컨테이너 플랫폼
- EKS - 쿠버네티스 서비스
ECS - Elastic Container Service
- 도커를 AWS에서 사용하는 방법
- 프로비전 / 인프라 유지를 해야함
- ELB와 함께 사용
Fargate
- 도커를 AWS에서 사용하는 방법
- 인프라스트럭쳐를 제공할 필요 없음 - 서버리스
- AWS가 Run할 컨테이너가 얼마나 많은 CPU/RAM을 필요로 하는지를 계산하여 실행
ECR - Elastic Container Registry
- AWS에 컨테이너를 저장하고,관리하고, 배치하는데 사용되는 서비스
- 모든 이미지는 S3의 지원을 받아 보안, 버저닝, 수명주기 등의 기능을 지원
EKS - Elastic Kubernates Service
- AWS에서 쿠버네티스 클러스터를 지원
- 두가지의 모드를 지원
- EC2 실행모드 - EC2처럼 작업자 노드를 배치하는 경우
- Fargate 모드 - 서버없는 컨테이너를 배치하고 싶은 경우
Lambda 제한
- 메모리 : 128mb ~ 10기가
- 최대 실행 시간 : 900초
- 환경변수 : 4kb
- function container : 512mb
- 동시 실행 : 1000회
- 파일 : 50MB ( 압축하지 않을땐, 250 MB )
- 큰 파일이 필요할 땐 /tmp 디렉토리 사용
Lambda Edge
- 글로벌 lambda 함수를 운영할 때, 적절
- CloudFront CDN으로, 세계 각 지역을 따라 Lambda 함수를 배치
- 저지연을 요구하거나, 서버를 관리하지 않기 때문에 전 세계에 배치하기 좋음
Dynamic DB
- 가용성이 높고, 데이터는 다수의 AZ를 지나 자동으로 복제
- NOSQL
- 워크로드, 확장성이 좋음
- 테이블 안에서 일초에 수백번 요청 가능
- 빠르고 일관된 성능을 가지고 있음
- 저지연
- 보안, 권한부여, 관리에 좋음
- 테이블형태로 생성, 각각은 프라이머리 키가 있음
- 각 아이템과 행은 특성을 가지고 있으며, 시간에 따라 추가될 수 있음
- 최대 아이템 사이즈는 400kb로, 큰 개체를 저장하기에는 적절하지 않음
Read/Write Capacity Modes
- 테이블 얼마나 많은 읽기와 쓰기 용량을 필요로 하는지 정의할 필요가 있습니다.
- 두개의 모드
- 프로비전 모드(기본값) - 테이블을 보유하기 원하는 초당 읽기 쓰기 숫자를 미리 명시, 용량은 미리 계획되어야 하며, 공급한 모든것에 대한 비용을 지불, 오토스케일링을 통해 자동 스케일링 할 수 있습니다. 패턴을 예측할 수 있거나 부드럽게 작용할 때 적절
- 온디맨드 모드 - 워크로드에 따라 용량을 줄이고 늘림. 자동으로 읽기와 쓰기를 받아들이므로, 용량 계획이 필요하지않음, 온디멘드 모드는 유연하지만, 프로비전모드보다 훨씬 비쌈
DynamoDB Accelerator ( DAX )
- 가용성이 뛰어난 인메모리 캐시
- 읽기 데이터를 캐시에 저장함으로 읽기 혼잡을 해결
- 캐시데이터를, microseconds의 지연시간을 가지게 함
- 어떤 종류의 애플리케이션 로직도 바꿀 필요 없이 이용가능
- 데이터는 5분(기본값) TTL 만료
DAX와 ElastiCache의 차이
- DAX는 DynamoDB를 위한 캐시
- 애플리케이션이 DynamoDB에 접속하기 위해 API를 변경하지 않습니다.
DynamoDB Sterams
- 테이블의 아이템 레벨 수정을 나타내는 정렬된 데이터 스트림입니다. ( 아이템을 생성하고 업데이트하고 삭제할 때마다 DynamoDB스트림으로 종결 )
- 기록들은 Kinesis, Lambda 로 보내지고, Kinesis Client Library 애플리케이션에 의해 읽혀집니다.
- DynamoDB 스트림의 데이터는 24시간까지 보관되서, 빨리 처리하는 것은 사용자에 달려있습니다.
- 테이블의 실시간 변화에 대응하고, 사용자에게 환영 이메일을 보내고, 분석하고, 데이터를 변환하거나 할 때 적절
DynamoDB Global Tables
- 테이블이 여러 영역에 걸쳐있습니다. ( 영역간의 양방향 복제가 이루어집니다. )
- 저지연을 가지게 되는 장점
DynamoDB - TTL
- 만료시간을 통해, 일정 시간이 지나고 데이터가 삭제됩니다.
DynamoDB - Indexes
- 두가지의 인덱스가 존재
- GSI - Global Secondary Indexes
- LSI - Local Secondary Indexes
- 프라이머리 키 이외의 속성에 대한 쿼리를 수행하게 도와줍니다.
DynamoDB - Transactions
- Transcations은 두개의 테이블을 쓸 수 있게 하거나, 모두 쓰지 않게 합니다.
API Gateway
- lambda와 통합 할 수 있습니다.
- WebSocket 프로토콜을 지원하기 때문에, API Gateway를 통한 2개의 다른 방법으로 실시간 스트리밍 할 수 있습니다.
- 버전 관리를 통해 버전1에서 버전2로 클라이언트를 망치지 않고 좋은 환경을 구축 ( 개발, 테스트 및 개발 환경을 포함 )
- 인증 및 허가를 위해
- 너무 많은 요청을 하는 경우, API 키를 생성하고 요청을 조절
- 일반 표준을 사용
- 호출이 정확한지 API Gateway 단계에서 요청과 응답을 변환하고 검증 할 수 있습니다.
- 캐시할 수 있습니다.
API Gateway - Integration
- Lambda
- 완전한 서버리스 애플리케이션을 하는 것은, 가장 일반적이고 쉬움
- HTTP
- 뒤에 있는 어떤 HTTP 엔드포인트도 노출 할 수 있음 (rate limiting, cashing user authentications 등 )
- AWS Service
- AWS API를 노출 할 수 있습니다.
API Gateway - Endpoint Types
- Edge-Optimized (기본값) : 글로벌 클라이언트를 위한 것으로, 세계 어디에서나 접속 할 수 있고, 효율적이며, 요구들의 대기 시간을 단축하는 Edge Location과 통하는 것을 의미
- Regional : Edge Location을 사용하기 싫을 때
- Private : VPC 내부로 부터, 접속 할 수 있고, ENI를 위해 인터페이스 VPC 엔드포인트를 사용
API Gateway 보안
- IAM Permission (Sig v4)
- Lambda Authorizer (Custom Authorizer)
- Cognito User Pools
Cognito
- 사용자에게 신분을 제공할 때 사용
- Cognito User Pools
- 앱유저와 상호작용
- API Gateway와 연결
- Cognito Identity Pools
- AWS 증명서를 앱사용자에 직접 제공하여, AWS자원에 직접 접속 할 수 있습니다.
- ID 제공자로 Cognito User Pool와 통홥
- Cognito Sync
- 디바이스에서 Cognito로 데이터를 동기화하고 더이상 사용되지 않으며, AppSync로 대체
AWS SAM - Serverless Application Model
- 서버리스 애플리케이션을 개발하고, 배치하는 틀
- 서버리스 애플리케이션의 모든 구성은 YAML코드에서 이뤄집니다.
RDS
- 프로비전 해야합니다. (EC2 인스턴스 & EBS 볼륨)
- Read Replicas 와 멀티 AZ 지원
- IAM, KMS, SG, SSL 지원
- 백업, 스냅샷
- 클라우드 와치를 통한 모니터링
- 시스템 대체작동 이나 유지보수 문제가 발생했을 때, 다운타운이 매우 적습니다. ( EC2, EBS의 수동 개입을 암시 )
Aurora
- PostgreSQL, MySQl과 호환
- 3 AZ에 6개의 replicas 생성
- 자동으로 핸들링
- 다중 AZ, Auto Scaling Read Replica
- Global 서비스
- 10GB ~ 128TB의 오토스켈링
- Aurora Serveless도 존재
- Aurora Multi Master로 failover 지원
ElastiCache
- 캐시
- Redis - 클러스터링
- Memcached - 멀티 AZ, Read Replicas
- 인메모리 데이터 보관 방식, 저지연
- EC2인스턴스를 프로비전해야함
- key-value 보관방식
DynamoDB
- NoSQL
- 서버리스
- key-value 방식으로 ElastiCache를 대체할 수 있음 (단 엘라스틱캐쉬보단 느림)
- 가용성이 높고, Multi AZ, DAX지원
S3
- key - value 저장 방식
- 서버리스, 무한정 확장가능, 최대 5TB의 오프브젝트 사이즈
Athena
- 서버리스, SQL이용
- S3를 쿼리하는 형식
- 쿼리당 페이
- 아웃풋 결과는 S3로 들어갈 수 있다.
RedShift
- OLAP로, 분석을 위한 데이터웨어하우스
- 다른 웨어하우스보다 10배 더 좋은 성능을 보여줌
- 컬럼형 저장 방식
- SQL을 사용
- QuickSight나 태블로와 통합되어 있음
- Multi AZ를 지원하지 않으므로, 스냅샷을 찍어서 백업해야함
Glue
- ETL 서비스
- 데이터를 준비하고 변형하는데 유용
- 서버리스 서비스
Neptune
- 그래프 데이터베이스
- 소셜네트워킹에 주로 사용되는 데이터 베이스
- High relation Data
- 3AZ에 15 Read replicas가능
ElasticSearch
- 검색을 하는 기술로, 모든 필드를 검색 할 수 있고, 부분 일치 항목도 검색할 수 있습니다.
- DynamoDB와 ElasticSearch를 같이 사용해서 좋은 성능을 내고는 함
CloudWatch
- 모든 서비스에 metric을 제공 (모니터링 할 수 있는 지표)
CloudWatch Log
- CloudWatch 로그를 기록하고 저장할 수 있습니다.
- Subscription Filter를 이용해서 원하는 데이터를 분석 할 수 있습니다.
CloudWatch Alarms
- metric에서 트리거할 때 사용됩니다.
AWS CloudWatch Events
- 클라우드와치 이벤트를 통해서 AWS 서비스나 모든 소스에서 일어나는 이벤트를 언터셉트할 수 있습니다. ( EC2 인스턴스 시작, 코드빌드 장애대응, S3 등 )
- CloudTrail 인테그레이션을 통해 API 콜을 할 수 있습니다.
- 스케쥴 or Cron을 할 수 있습니다.
EventEdge
- Cloud Watch Event에 진화형
- CloudWatch Event는 기본 버스만 사용한다면, EventEdge는 다수의 버스를 생성해서 사용할 수 있습니다.
- 파트너 이벤트 버스 : AWS로부터 이벤트를 전달받는 형태가 아닌, 서비스를 제공하는 것들이나 어플리케이션 형태의 소프트웨어로부터 전달 받습니다. (AWS서비스가 아닌 다른 서비스로도 보낼 수 있음 )
- 커스텀 이벤트 버스 : 어플리케이션의 고유의 이벤트를 생성할 수 있음, 다른 어플리케이션이 이벤트와 상호작용하게 할 수 있음
EventBridge Schema Registry
- 이벤트 브릿지는 버스안에 있는 이벤트를 분석하고 스키마를 해석할 수 있습니다. ( 스키마란 데이터가 어떻게 구성되어 있는지를 의미합니다. )
- 스키마 레지스트리는 코드를 생성해주고 이벤트 버스안에 들어갈 데이터가 어떻게 구성되어야 하는지 설정 ( 시간을 아낄수 있고, 오류도 막을 수 있음 )
EventBridge vs CloudWatch Event
- 이벤트브릿지는 클라우드 와치 이벤트의 연장선입니다.
- 동일한 서비스 API와 엔드포인트를 사용하고, 동일한 서비스 인프라를 사용합니다.
- 단 이벤트 브릿지는 추가적인 기능이 있습니다. ( 커스텀 어플리케이션, 이벤트버스, 스키마 레지스트리 )
CloudTrail
- AWS계정의 거버넌스 컴플라이언스, 그리고 감사권을 부여합니다.
- CloudTrail은 기본적으로 작동합니다.
- AWS 계정에 의한, event의 기록, API 콜 등을 볼 수 있습니다.
- CloudTrail로부터 로그를 가져와, CloudWatch log나 S3로 이동가능
- 모든 리전에서 축적된 모든 기록을 가져올 수 있습니다.
- CloudTrail Insights 를 사용하면, 비정상적인 활동을 검출합니다.
CloudTrail Event Retention
- 기본적으로 이벤트는 90일동안 보관됩니다.
- 이 기간을 넘기 위해서는 S3에 로그를 보낼 수 있게 해야합니다.
AWS Config
- Config는 AWS에 있는 리소스에 대한 감시와 레코드 컴플라이언스를 볼 수 있게 해주는 것입니다.
- 구성을 기록하고, 어떻게 변했는지 알 수 있습니다. 이를 통해 인프라에 어떤 변화가 있었는지 알 수 있습니다.
STS - Security Token Service
- AWS에 대해 단기적 접근을 허용해줍니다.
- 토큰을 발행해 주는데, 이는 단기적으로 1시간까지 유효합니다.
- AssumeRole - 개인계정의 보안강화를 위해 사용, 교차계정 접속을 위해 사용하기도 함
- AssumeRoleWithSAML - SAML을통해 사용자가 합쳐질 때, return credentials을 하는데 도움이 됩니다.
- AssumeRoleWithWebldentity - ID제공자를 통해 로그인할 사용자에 대한 증명을 반환하는 것 ( Facebook Login, Google Login 등) , AWS에서 사용하지 말라고 권고 (Cognito를 사용해라)
- GetSessionToken - 사용자 혹은, AWS계정 root 사용자들을 위한 다중 인증을 위한 것
Identity Federation
- 바깥 사용자들이 AWS 리소스에 접근할 수 있도록 일시적인 역할을 assume합니다.
- 해당 사용자들은 제공된 접근의 역할들의 정체성을 assume합니다.
Microsoft Active Directory(AD)
- 모든 윈도우 서버에서 발견되는 Active Directory Domain Service
- objects들의 데이터베이스 : 사용자 계정, 컴퓨터, 프린터, 파일 공유 등
- 중앙 보관관리가 이뤄집니다. (계정생성, 허가 등 )
- 오브젝트들은 tree이며, tree들의 그룹은 forest입니다.
AWS Directory Services
- AWS에서 Directory Service를 생성하는 방법 제공
- Managed Microsoft AD - 사용자는 로컬하게 관리, 다중인증 지원
- AD Connector - 직접적 gateway proxy, 사용자들은 On-premise AD로만 관리
- Simple AD - on-premise 가 없으며, 단독으로 가지고 잇는 형태
AWS Organizations
- AWS 계정을 관리할 수 있도록 하는 서비스
- 주 계정은 Master Account라고 불리며, 변경할 수 없습니다. ( 다른 계정들은 member accounts )
- Member accounts는 오직 한 기관에만 속할 수 있습니다. (이동은 가능)