AWS 기타
개요
AWS에 대한 메모 모음.
EC2 몀명법
[type][generation].[capacity] ex. t2.micro : t타임 2세대의 마이크로(1core/1GB) 서버
타입
범용/cpu/gpu/memory/storage 범용 : T, M, A 컴퓨팅 : C 메모리 : R, X, z 가속화 : P, DL, Inf, G, F, VT.. GPU 가속. 부동소수점, 머신러닝 등 스토리지 최적화 : I, D, H
세대
t1, t2, t3, t4 : 숫자가 제너레이션
AWS 사용
CLI, Management Console, API
자격 증명
AccessKey, Password
cloud9
web base ide
x-ray
디버깅용 ??
cloudwatch
알람 등록(ex. cpu 50%이상..) 지표 수집 트리거링(ex. cpu 50%이상이면 날림)
cloudtrail
api call 전체 로깅. json으로 s3에 떨굼.
서비스 클라이언트 API와 리소스 API
서비스 클라이언트 API : API 접근을 key-value로 하나하나 접근. 리소스 API : 약간 추상화해둠. 개별 리소스(ex. s3)를 object로 추상화하여 접근 API. 추상화 수준이 높음. 개념적으로 리소스 접근
IAM
API 접근을 위한 아이디/비밀번호
- Access Key ID : 아이디
- Secret Access Key : 비밀번호
IAM 사용자와 Root 사용자
Root 사용자
- 로그인 : email/ pw
- 권한 : 전체권한
- 권한이 크므로 직접 접속 추천하지 않음
- IAM 유저를 걸고 쓰기
- MFA를 꼭 걸기
IAM
- 로그인 : Acess Key Id /사용자명/Secret Access Key
- 권한 : 사용자가 권한
IAM USER
- 영구 자격 증명. 유출되면 다 죽는다.
IAM GROUP
- IAM 유저에 대한 그루핑
IAM ROLE
- 역할
- 사람이 아닌 sevrice/reousrce에 권한 부여.
- 임시자격증명 사용
- 교차계정 access
- deny가 우선함
IAM Policy
- 정책. 리소스 allow, deny 설정
- 사용자/그룹/역할에 부여 가능
- AWS Policy Generator를 통해 생성 가능
- JSON으로 구성 가능
특수 : IAM User와 IAM Group의 Policy가 다를때? A유저에게 B권한이 있고, C그룹에게 D권한이 있다. A유저를 C그룹에 넣으면 권한은 D권한만 가진다. B+D권한이 되는 것이 아니라, 기존 유저 권한은 날아감.
IAM Policy format
{"version" : "2012-01-17","statement":[{"Effect":"Allow","Action":["dynamodb:*", "s3:*"],"Resource":}]"condition":{ //해당 소스만 OK{IPAddress:""}}
관리형과 인라인
- 관리형 : AWS관리형, 고객 관리형
- 인라인 : 관리가 어렵다. 자제하자
리소스 정책 vs 자격증명 정책
- 리소스 : 누가 접근할 수 있는가?
- 자격증명 : 어디에 접근할 수 있는가? => 보통 이 이야기입니다.
최소권한의 원칙
권한을 다 합쳐서 최소 권한으로 부여
리소스 정책과 IAM 정책
리소스 정책이 걸려있으면 IAM 정책과 리소스 정책을 모두 보고 권한 부여. s3에 IAM 정책으로 allow가 걸려 있어도 s3의 버켓이 deny면 접근할 수 없음
자원에 s3를 붙여서
S3
simple storage service
object = file + metadata
보호장치
아래로 갈 수록 강력한 권한 제어
- public access 막기
- ACL
- bucket policy -> 섬세하게 권한 제어
성능:요청
객체 메타데이터 생성
성능 : 지연시간
사용자에게 가까운 버킷 리전 선택
오류 코드 확인
400 오류 코드 확인
aws policy generator
https://awspolicygen.s3.amazonaws.com/policygen.html
다이나모디비
파티션키
균등성이 좋은 값을 필수
정렬키
정렬키를 기준으로 사용 옵션
기본키
1) 파티션 기본키 : 파티션키만 사용 2) 파티션 및 정렬 기본 키 : 파티션키와 정렬키 같이 사용
읽기 일관성
- 최종 일관성 - 0.5ㄱㅊ -강력한 일관성 - 1rcu / 4kb / 1ㄴ
쓰기일관성
처리량단위
- 읽기 : rcu, 4kb, strong
- 쓰기 : wcu, 1kb, strong
initial provision configuration
before : RCU : 5 WCU : 5 auto : off
after : RCU : 1->10 WCU : 1->10 auto : on
보조인덱스. 세컨더리 인덱스
프라이머리키가 아닌 키로 쿼리
- 글로벌 세컨더리 인덱스 : 파티션키가 다르다
- 로컬 세컨더리 인덱스 : 파티션키는 같지만 소트키만 가지고 날림
글로벌테이블
- 개별 테이블 생성
- 묶자
백업
- 자동백업 : 시점복구. ex) 35일을 지정하면 35일까지 시점에 대해서 롤백가능.
- 수동백업 : 사용자가 복구. 엄청 빠르다. 수초 내에 진행
객체지속성모델(Object Persistence Model)
orm도 슉슉
테이블 생성
선택적 속성
DAX
다이나모 캐쉬
문제해결
클라우드트레일 : 에이피아이확인 클라우드와치 : 성능 알람 걸기 배치작업의 오류처리
- 실패한 배치(unprocessedkeys)만 재시도 반환된오류코드 확인
- 처리량, 프로비저닝 어쩌고 -> rcu, wcu 늘리자
- 500 -> 제시도
파티션키의 분배
파티션키에 따라 RCU, WCU 분배하므로 적절히 분배할 수 있는 키를 선택 => 성으로 키를 나눌 경우 '김'씨가 많지만 전체 균등하게 r/wcu를 분배하므로 => 성은 적절한 파티션키가 아니다
글로벌 테이블 - 컨시스턴시
1초의 동기화 시간이 걸린다.
consistency option
- read : 1rcu - 1s, 4kb, strong
- strong consistency : 항상 동일한지 비교하여 리턴, 1rcu
- eventually consistency : 하나를 바로 땡김, 0.5rcu
- transaction consistency : 2rcu
- write : 1wcu - 1s, 1kb, standard
- standard consistency : 1wcu
- transaction consistency : 2wcu
sql-like query
Lambda
서버리스 함수
생성
- 리젼
- 이름
- 펑션 설정
lambda tempalte
//event : 필요 데이터//context : 런타임 정보handler_function(event, context){print("hello + o", event.name)}
어떻게 구현?
- 매니지먼트 콘솔에서 개발
- 개발 후 zip 배포
- 라이브러리를 말아서 같이 올려야 함
- new! efs에 라이브러리 설치 후 람다에서 공유 가능
- IDE 연동 : plug-in or cloud 9
실행방식
- push : 외부에서 호출함
- pull : 내부에서 먼저 호출함
호출 권한
실행 권한
- 함수 실행 : 실행에 필요한 권한. s3의 이미지를 축소하는 함수라면 s3 read/write 권한 필요
- 로킹 : cloudwatch log 권한
한계
- 메모리 : 10GB
- 실행시간 : 15분(900초)
구조
- 핸들러함수
- 이벤트 객체
- 컨텍스트 객체
모범사례
- 재귀코드 사용금지
- 핸들러 진입점 분리
- 실행 컨텍스트 재활용
- 공통로직은 - 레이어나 이에프에스로 관리
limit
프리티어
-1,000,000호출까지 -400,000기가바이트초 까지
람다한계
memory : 10GB 실행시간 : 15분
API Gateway
- 프론트엔드로 동작하며 예를 들어 람다의 리버스 프록시로 사용
- 백엔드 하이드 가능 -> 디도스 완화
- 메세지 검증/변환
- cache : 0.5~237GB
- api 호출 권한 제어
- IAM
- KEY
- API 사용량
- 모니터링
- 제한 : 쓰로틀링 일일사용량
api endpoint
- regional(default)
- edge optimized
- private
사용량 제한
모니터링 제한 - 스로틀링, 일일사용량 최대요청수 : 5000, AWS와 협의하에 가능
엔드포인트
- 리져널
- 엣지네트워크
- private(internal vpc)
Step functions
start->end로 구성되는 스테이트머신
state
- task : 작업
- wait : 대기
- pass : 전달
- choice : 분기
- parellel : 병렬
- succeed / fail :
- map
실행방법
- start execution api call
- api gateway에서 api가로채서
- cloudwatch event 규칙 : 5분에 한번
- lambda -> start execution api 호출 코드 구현
CloudFormation
IaC
SQS 및 SNS
SQS
- standard :큐지만 fifo 아니다. 중복처리가 될 수 있음.
- 무제한처리
- fifo : 한번만 실행
- 초당 300건, 3000건
SNS
pub/sub 모델
filter policy
ex. 이벤트 이름이 어떤 것인것만 받겠다
Amazon MQ
Rabbit MQ의 매니지드 서비스
SQS vs SNS
1:1 vs 1:n
Apache MQ
ElasticCache
전략
writethrough : 캐쉬에 쓰는 동시에DB에 씀. 매번 갱신하므로 속도가 느림. lazyloading : 캐쉬에 먼저 쓰고 나중에 갱신. 일관성 깨짐
redis : pub/sub 기능 제공
안전한 App
AC(certificates)M
인증서 갱신/발급/관리
AS(Secrets)M
보안정보 관리/갱신
STS
티켓 받아오기 ex) aws 외부 서비스가 s3에 파일을 올리려고 한다.
- 내부 서비스가 아니므로 iam role을 사용할 수 없음.
- sts에서 임시 크리덴셜을 받아서 사용
배포 자동화
인프라수준의 배포(Infra as a code)
- CloudFormation
- SAM Serverless App Template(?) 왜M?
Application
프로세스(CI/CD Pipeline)
- 프로세스 : Code->build->test->deploy->monitoring
- 전체지원도구 : Code Pipeline
스텝별 도구
- Code : Code Commit
- Build : Code Build
- Test : 서드파티도구
- Deploy : Code Deploy
- Monitoring : Cloudwatch, Cloudtrail
Code Star
지라, 젠킨스까지 다 커버되는 프로세스 전체 관리