AWS DVA-C02 #4 StepFunctions 기본 정리
AWS DVA-C02 #4 StepFunctions 기본 정리 — #개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프 참고: ExamPotic Di...
#DVA-C02#Naver Blog
#개발자의도구들 #AWS시험 #AWSDVA-C02 #DVA-c02문제 #DVA-c02덤프
참고: ExamPotic Disscussion
문제 찾는법 : 여기 최하단
요구사항 분석
Question #4
- 다양한 소스에서 대용량 데이터 수집 → 여러 비즈니스 룰/변환을 순서대로 실행
- 오류 시 재처리(재시도/보정/재구동) 가능해야 함
- 확장성 높고 운영/유지보수 최소화
다음을 만족하는 솔루션?
A. AWS Batch
B. AWS Step Functions
C. AWS Glue
D. AWS Lambda
요구 지식
- Glue?
- AWS Glue는 완전 관리형 서버리스 데이터 통합 서비스
- 데이터를 수집,정리,변환해서 분석이나 머신러닝에 쓸 수 있는 형태로 만드는 도구
- ETL(Extract -> Transform -> Load)
- Extract: 다양한 데이터 소스에서 데이터 추출
- S3, RDS, RedShift, DynamoDB, JDBC ...
- Transform: 스키마 변환, 데이터 정제, 조인, 필터링, 집계
- Load: 정제된 데이터를 목적지(S3, Redshifr, RDS 등)로 로드
개념 정리
Step Functio에 대한 기본정리
- 쓰는 이유
- 여러 비즈니스 룰을 정해진 순서로 실행
- 오류 재처리 가능
- Retry, Catch
- 유지 보수 최소화
- 완전 관리형, 시각적 실행 이력/상태 트래킹 제공
- 확장성
- 각 단계는 Lambda/Glue/Batch/ECS 등으로 분리되어 독립적으로 확장됨
2; 기본 빌딩 블록
ASL: Amazon States Language
State 타입
- Task: 실제 작업 수행
- Choice: qnsrl
- Parallel: 병렬 실행
- Map: 아이템 리스트에 대한 반복 처리
- Succeed/Fail: 종료 상태
- 통합 패턴
- 인입 (Kinesis/S3) -> Step Functions(오케스트레이션) -> 각 단계 Lambda/Glue Job 호출
- 규칙/변환이 코드로 짧다 -> Lambda로 작성
- 대규모 ETL/스파크 처리 Glue Job
- 실패시
- Catch -> SQS(DLQ) 전송
- 살향 유형
- Standard: 장시간/복잡 워크플로우, 실행 이력 보존/시각화 중요할 때
- Express: 초고빈도, 저비용, 단기 실행(스트리밍/이벤트 폭주)
- 운영
- Cloud Watch Logs/메트릭 연동, Event Bridge로 상태 변경 이벤트 발행
- 보안/IAM
- State Machine 실행 권한(누가 시작/중지?)
- Task 리소스 권한
- Lambda/Glue/S3 등 호출 권한
- 둘을 분리하여 최소권한만 적용
{
"StartAt": "Rule1",
"States": {
"Rule1": {
"Type": "Task"
"Resource": "arn:aws:lambda:REGION:ACCT:function:Rule1",
"Retry": [
{ "ErrorEquals": ["States.ALL"], "IntercalSeconds": 5, "BackoffRate": 2.0, "MaxAttempts": 3 }
],
"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "SendToDLQ" }],
"Next": "Rule2"
},
"Rule2": {
"Type": "Task",
"Resource": "arn:aws:lambda:REGION:ACCT:function:Rule2",
"Next": "Done"
},
"SendToDLQ": {
"Type": "Task",
"Resource": "arn:aws:states:::sqs:sendMessage",
"Parameters": { "QueueUrl": "https://sqs.REGION.amazonaws.com/ACCT/dlq", "MessageBody.$": "$" },
"End": true
},
"Done": { "Type": "Succeed" }
}
}
한번 써보니 더 익숙해지는 느낌이다.