AWS Step Functions 사용 사례
AWS Step Functions로 무엇을 자동화할 수 있나요? 아래의 가장 일반적인 사용 사례에서 몇 가지 아이디어를 얻으세요.AWS Step Functions를 사용하면 워크플로를 구성하는 일련의 단계로서 비즈니스 프로세스를 구현할 수 있습니다.
워크플로의 개별 단계는 Lambda 함수 또는 몇 가지 비즈니스 로직이 있는 컨테이너를 호출하거나, 해당 단계 또는 전체 워크플로 실행이 완료되었을 때 DynamoDB와 같은 데이터베이스를 업데이트하거나 대기열에 메시지를 게시할 수 있습니다.
AWS Step Functions에는 Standard와 Express라는 두 가지 워크플로 옵션이 있습니다. 비즈니스 프로세스를 한 번 실행하는 데 5분 이상 걸릴 것으로 예상되는 경우 Standard를 선택해야 합니다. 장시간 실행되는 워크플로의 예로 ETL 오케스트레이션 파이프라인을 들 수 있으며, 워크플로의 모든 단계에서 사용자의 응답을 기다리는 경우에도 실행 시간이 길어집니다.
Express 워크플로는 실행 시간이 5분 미만인 워크플로에 적합하며, 초당 10만 회 호출하는 경우와 같이 실행 횟수가 많은 경우에 이상적입니다. Standard 또는 Express를 개별적으로 사용하거나, 실행 시간이 긴 Standard 워크플로가 병렬로 실행되는 여러 개의 짧은 Express 워크플로를 트리거하도록 두 가지 워크플로를 결합할 수 있습니다.
마이크로서비스 오케스트레이션
Lambda 함수를 결합하여 웹 기반 애플리케이션 구축
이 간단한 은행 시스템의 예에서는 고객의 이름과 주소를 확인한 후 신규 은행 계좌를 생성합니다. 워크플로는 두 개의 CheckName과 CheckAddress라는 Lambda 함수를 태스크 상태로서 병렬로 실행하는 것으로 시작합니다. 이 두 함수가 모두 완료되면 워크플로에서 ApproveApplication Lambda 함수가 실행됩니다. 태스크 상태의 오류를 처리할 retry 및 catch 절을 정의할 수 있습니다. 워크플로에서 미리 정의된 시스템 오류를 사용하거나 이들 Lambda 함수에 의해 발생하는 사용자 지정 오류를 처리할 수 있습니다. 오류 처리는 워크플로 코드가 수행하므로 Lambda 함수에서는 비즈니스 로직에 초점을 맞추어 코드를 줄일 수 있습니다. Lambda 함수는 외부 종속성 없이 총 5분 미만의 태스크를 수행하므로 Express 워크플로가 이 예에 더 적합합니다.
Lambda 함수를 결합하여 웹 기반 애플리케이션 구축 - 사람의 승인 포함
비즈니스 프로세스의 단계를 검토하여 워크플로가 다음 단계를 계속 진행하도록 승인하거나 거부할 사람이 필요할 수 있습니다. 워크플로에서 사람의 승인을 기다려야 하거나 외부 시스템이 응답하는 데 5분 이상 걸릴 수 있는 프로세스를 기다려야 할 경우 Standard 워크플로를 사용하는 것이 좋습니다. 이 경우 다른 단계들 사이에 알림 승인자 단계를 두어 새 계정 개설 프로세스를 확장합니다. 워크플로는 CheckName 및 CheckAddress 태스크 상태를 병렬로 실행하는 것으로 시작합니다. 다음으로 ReviewRequired 상태는 두 가지 가능한 경로가 있는 선택 상태입니다. 즉, NotifyApprover 태스크의 승인자에게 SNS 알림 이메일을 보내거나 ApproveApplication 상태로 진행합니다. NotifyApprover 태스크 상태는 승인자에게 이메일을 보내고 응답을 기다린 후 다음 선택 상태인 ‘Approved’로 진행합니다. 승인자의 결정에 따라, Lambda 함수를 통해 계정 신청이 Approved 또는 Rejected 상태가 됩니다.
Express 워크플로를 사용하여 이벤트에 대한 응답으로 비즈니스 프로세스 호출
이 예에서는 사용자 지정 EventBridge 버스의 이벤트가 규칙을 충족하고 Step Functions 워크플로를 대상으로 호출합니다. 고객 서비스 애플리케이션에서 만료된 고객 구독을 처리해야 한다고 가정해보겠습니다. EventBridge 규칙이 구독 만료 이벤트를 수신하고, 그 응답으로 대상 워크플로를 호출합니다. 구독 만료 워크플로는 만료된 구독이 소유한 모든 리소스를 삭제하지 않고 비활성화하며, 고객에게 만료된 구독에 대해 알리는 이메일을 보냅니다. 이 두 가지 작업은 Lambda 함수를 사용하여 병렬로 수행할 수 있습니다. 워크플로가 완료되면 구독 만료가 처리되었음을 나타내는 새 이벤트가 Lambda 함수를 통해 이벤트 버스로 전송됩니다. 이 예에서는 Express 워크플로를 사용하는 것이 좋습니다. 비즈니스가 성장하고 이벤트 버스에 더 많은 이벤트를 추가하기 시작하면, Express 워크플로를 사용하여 초당 10만 개의 워크플로 실행을 호출할 수 있는 용량이 진가를 발휘합니다. 이 Github 리포지토리에서 작동 방식의 예를 참조하세요.
보안 및 IT 자동화
IAM 정책 생성을 위해 보안 인시던트 대응을 오케스트레이션
AWS Step Functions를 사용하여 수동 승인 단계가 포함된 자동 보안 인시던트 대응 워크플로를 생성할 수 있습니다. 이 예에서는 IAM 정책이 생성될 때 Step Functions 워크플로가 트리거됩니다. 이 워크플로는 정책 작업을 사용자 지정 가능한 제한된 작업 목록과 비교합니다. 워크플로는 정책을 일시적으로 롤백한 다음 관리자에게 알리고 관리자가 승인 또는 거부할 때까지 기다립니다. 대체 작업을 적용하거나 특정 ARN으로 작업 대상 범위를 제한하는 등, 자동으로 문제를 해결하도록 이 워크플로를 확장할 수 있습니다. 이 예가 어떻게 작동하는지 여기에서 확인할 수 있습니다.
AWS 계정의 운영 이벤트에 응답
AWS 리소스의 운영 이벤트에 대한 응답을 자동화하면 AWS 클라우드 인프라를 유지 관리하는 데 따른 운영 오버헤드를 줄일 수 있습니다. Amazon EventBridge는 AWS 리소스에 대한 대부분의 변경 사항 및 알림을 설명하는, 거의 실시간에 가까운 시스템 이벤트 스트림입니다. 이 스트림에서 특정 이벤트를 AWS Step Functions, AWS Lambda 및 기타 AWS 서비스로 라우팅하여 추가 처리 및 자동화된 작업을 수행하는 규칙을 생성할 수 있습니다. 이 예에서는 AWS Health에서 가져온 이벤트를 기반으로 AWS Step Functions 워크플로가 트리거됩니다. AWS는 널리 사용되는 코드 리포지토리 사이트에서 공개적으로 노출된 IAM 액세스 키를 선제적으로 모니터링합니다. IAM 액세스 키가 GitHub에서 노출되어 있다고 가정해보겠습니다. AWS Health는 이 노출된 키와 관련한 AWS 계정에 AWS_RISK_CREDENTIALS_EXPOSED 이벤트를 생성합니다. 구성된 Amazon EventBridge 규칙이 이 이벤트를 감지하고 Step Functions 워크플로를 호출합니다. 그러면 해당 워크플로가 AWS Lambda 함수를 사용하여 노출된 IAM 액세스 키를 삭제하고 노출된 키에 대한 최근 API 활동을 요약한 다음 요약 메시지를 Amazon SNS 주제로 전송하여 구독자에게 알리는 작업이 순서대로 실행됩니다. 이 예가 어떻게 작동하는지 여기에서 확인할 수 있습니다.
소스 및 대상 S3 버킷 간의 데이터 동기화
Amazon S3를 사용하여 정적 웹 사이트를 호스팅하고 Amazon CloudFront를 사용하여 콘텐츠를 전 세계에 배포할 수 있습니다. 웹 사이트 소유자로서 웹 사이트 콘텐츠를 업로드하려면 준비 및 테스트용과 프로덕션용으로 각각 하나씩, 두 개의 S3 버킷이 필요할 수 있습니다. 웹 사이트를 업데이트할 때마다 새 버킷을 새로 생성하는 번거로움 없이, 스테이징 버킷의 모든 변경 사항으로 프로덕션 버킷을 업데이트하면 됩니다. 이 예에서 Step Functions 워크플로는 두 개의 루프(병렬 루프와 독립 루프)로 작업을 수행합니다. 이들 루프 중 하나는 대상 버킷에 이미 있는 객체를 제외하고 소스 버킷의 모든 객체를 대상 버킷에 복사합니다. 두 번째 루프는 소스 버킷에서 찾을 수 없는 객체를 대상 버킷에서 삭제합니다. 일련의 AWS Lambda 함수가 입력을 검증하고, 소스 및 대상 버킷 모두에서 객체 목록 가져오고, 객체를 일괄적으로 복사 또는 삭제하는 등의 개별 단계를 수행합니다. 여기에서 이 예와 해당 코드를 자세히 살펴볼 수 있습니다. 상태 시스템에서 병렬 실행 분기를 생성하는 방법은 여기에서 자세히 알아볼 수 있습니다.
데이터 처리 및 ETL 오케스트레이션
데이터 스트리밍을 위한 데이터 처리 파이프라인 구축
이 예에서 Freebird는 여러 소스의 웹 후크 데이터를 실시간으로 처리하고 데이터를 수정하는 Lambda 함수를 실행하는 데이터 처리 파이프라인을 구축했습니다. 이 사용 사례에서는 여러 서드 파티 애플리케이션의 웹 후크 데이터가 Amazon API Gateway를 통해 Amazon Kinesis 데이터 스트림으로 전송됩니다. AWS Lambda 함수가 이 Kinesis 스트림에서 데이터를 가져오고 Express 워크플로를 트리거합니다. 이 워크플로는 이 데이터를 검증하고 처리하고 정규화하는 일련의 단계를 거칩니다. 마지막으로, Lambda 함수가 SNS 주제를 업데이트하면, 다음 단계를 위해 SQS 대기열을 통해 다운스트림 Lambda 함수로 전송되는 메시지가 트리거됩니다. 데이터 처리 파이프라인을 확장하기 위해 이 워크플로를 초당 최대 10만 회까지 호출할 수 있습니다.
ETL 프로세스의 단계 자동화
Step Functions를 사용하여 ETL 프로세스의 모든 단계를 서로 다른 데이터 소스 및 대상으로 오케스트레이션할 수 있습니다.
이 예에서는 소스 S3 버킷에 사용 가능한 새 데이터가 추가될 때마다 Step Functions ETL 워크플로가 Amazon Redshift를 새로 고칩니다. Step Functions 상태 시스템이 AWS Batch 작업을 시작하고, 작업 상태를 모니터링하여 완료 상태 또는 오류 상태를 확인합니다. AWS Batch 작업은 PL/SQL 컨테이너를 통해 소스(Amazon S3)에서 ETL 워크플로 .sql 스크립트를 가져오고 대상(Amazon Redshift)을 새로 고칩니다. .sql 파일에는 데이터 변환의 각 단계에 대한 SQL 코드가 들어 있습니다. EventBridge 이벤트로 ETL 워크플로를 트리거하거나, AWS CLI를 통해 또는 AWS SDK나 사용자 지정 자동화 스크립트를 사용하여 수동으로 트리거할 수 있습니다. 워크플로의 모든 단계에서 또는 워크플로 실행이 끝나면 오류에 대한 이메일을 트리거하는 SNS를 통해 관리자에게 알릴 수 있습니다. 이 ETL 워크플로는 Standard 워크플로의 사용 예입니다. 이 예는 여기에서 자세히 살펴볼 수 있습니다. 여기에서 샘플 프로젝트를 통해 AWS Batch 작업을 제출하는 방법을 자세히 알아볼 수 있습니다.
여러 병렬 작업이 있는 ETL 파이프라인 실행
추출, 전환, 적재(ETL) 작업은 원시 데이터를 사용 가능한 데이터 세트로 변환하여 데이터를 유용한 인사이트로 바꿉니다.
소스 데이터 세트마다 사용 가능한 시간이 서로 다른 경우 Step Functions를 사용하여 여러 ETL 작업을 병렬로 실행할 수 있으며, 각 ETL 작업은 해당 데이터 세트를 사용할 수 있는 경우에만 트리거됩니다. 이러한 ETL 작업은 AWS Glue, Amazon EMR, Amazon Athena 등의 다양한 AWS 서비스나 기타 비 AWS 서비스에서 관리할 수 있습니다.
이 예에서는 판매 데이터 세트와 마케팅 데이터 세트를 처리하는 두 개의 개별 ETL 작업을 AWS Glue에서 실행합니다. 두 데이터 세트가 모두 처리되면 세 번째 ETL 작업이 이전 ETL 작업의 출력을 결합하여 결합된 데이터 세트를 생성합니다. 이 Step Functions 워크플로는 S3에서 데이터를 사용할 수 있을 때까지 기다립니다. 기본 워크플로가 일정에 따라 시작되면 EventBridge 이벤트 핸들러가 Amazon S3 버킷에 구성되므로, Sales 또는 Marketing 데이터 세트 파일이 버킷에 업로드될 때 상태 시스템이 사용 가능한 데이터 세트에 따라 ‘ProcessSales Data’ 또는 ‘ProcessMarketingData’라는 ETL 작업을 트리거할 수 있습니다.
AWS 계정에서 ETL 오케스트레이션 아키텍처를 설정하는 방법을 자세히 알아보려면 여기에서 아키텍처를 참조하세요. Step Functions에서 AWS Batch 작업을 관리하는 방법은 여기에서 확인할 수 있습니다.
대규모 데이터 처리
Step Functions를 사용하여 JSON 어레이, S3의 객체 목록 또는 S3 버킷의 CSV 파일과 같은 데이터 세트에서 수천만 개 이상의 항목을 반복적으로 처리할 수 있습니다. 그런 다음 높은 동시성을 유지하면서 데이터를 병렬로 처리할 수 있습니다.
이 예에서 Step Functions 워크플로는 분산 모드의 맵 상태를 사용하여 S3 버킷의 S3 객체 목록을 처리합니다. Step Functions는 객체 목록을 반복적으로 처리한 다음, 항목을 처리하기 위해 동시에 실행되는 수천 개의 병렬 워크플로를 시작합니다. Lambda와 같은 컴퓨팅 서비스를 사용하여 지원되는 어떤 언어로든 코드를 작성할 수 있습니다. 220여가지 목적별 AWS 서비스 중에서 맵 상태 워크플로에 포함할 서비스를 선택할 수도 있습니다. 하위 워크플로 실행이 완료되면 Step Functions는 검토 또는 추가 처리에 사용하도록 결과를 S3 버킷으로 내보낼 수 있습니다.
기계 학습 운영
ETL 작업 실행 및 기계 학습 모델 구축, 훈련, 배포
이 예에서는 EventBridge에 의해 트리거되어 하루에 한 번 실행되는 스케줄에 따라 Step Functions 워크플로가 실행됩니다. 이 워크플로는 S3에서 새 데이터를 사용할 수 있는지 확인하는 것으로 시작됩니다. 다음으로, ETL 작업을 수행하여 데이터를 변환합니다. 그런 다음 SageMaker 작업을 트리거하고 해당 작업이 완료될 때까지 기다린 후 워크플로의 다음 단계로 이동하는 Lambda 함수를 사용하여 이 데이터로 기계 학습 모델을 훈련하고 배포합니다. 마지막으로, 이 워크플로는 Lambda 함수를 트리거하여 S3에 저장되는 예측을 생성합니다. 여기에서 이 워크플로를 생성하는 프로세스를 단계별로 살펴보세요.
AWS Step Functions Data Science SDK를 사용하여 기계 학습 워크플로 자동화
AWS Step Functions Data Science SDK는 Amazon SageMaker 및 AWS Step Functions를 사용하여 기계 학습 모델을 처리하고 게시하는 워크플로를 생성하도록 지원하는 오픈 소스 라이브러리입니다. 이 SDK는 기계 학습 파이프라인의 모든 단계(엔드포인트 훈련, 튜닝, 변환, 모델링 및 구성)를 지원하는 Python API를 제공합니다. 이 워크플로는 Python 및 Jupyter Notebook에서 직접 관리하고 실행할 수 있습니다. 아래의 예는 기계 학습 워크플로의 훈련 및 변환 단계를 보여줍니다. 훈련 단계에서는 먼저 SageMaker 훈련 작업을 시작하고 모델 아티팩트를 S3에 출력합니다. 모델 저장 단계에서는 S3의 모델 아티팩트를 사용하여 SageMaker에서 모델을 생성합니다. 변환 단계에서는 SageMaker 변환 작업을 시작합니다. 엔드포인트 구성 생성 단계에서는 SageMaker에서 엔드포인트 구성을 정의합니다. 엔드포인트 생성 단계에서는 구성된 엔드포인트에 훈련된 모델을 배포합니다. 여기에서 노트북을 참조하세요.
미디어 처리
PDF 또는 이미지에서 처리할 데이터 추출
이 예에서는 AWS Step Functions, AWS Lambda 및 Amazon Textract를 결합하여 PDF 송장을 스캔하고 텍스트와 데이터를 추출함으로써 결제를 처리하는 방법을 알아봅니다. Amazon Textract는 송장의 텍스트와 데이터를 분석하고 각 작업이 성공적으로 완료될 때마다 SNS, SQS 및 Lambda를 통해 Step Functions 워크플로를 트리거합니다. 이 워크플로는 성공적인 송장 분석의 결과를 S3에 저장하는 Lambda 함수로 시작됩니다. 다음으로, 분석된 문서를 처리하여 이 송장의 결제를 처리할 수 있는지 확인하는 또 다른 Lambda 함수가 트리거되고 DynamoDB의 정보가 업데이트됩니다. 송장을 처리할 수 있는 경우 이 워크플로는 송장이 결제 승인되었는지 확인합니다. 승인되지 않은 경우 SNS를 통해 검토자에게 송장을 수동으로 승인하라고 알립니다. 승인된 경우에는 Lambda 함수가 처리된 송장을 아카이빙하고 워크플로를 종료합니다. 여기에서 이 예와 해당 코드를 자세히 살펴볼 수 있습니다.
대규모 병렬화를 사용한 비디오 분할 및 트랜스코딩
이 예에서 Thomson Reuters는 AWS Step Functions와 AWS Lambda를 사용하여 서버리스 분할 비디오 트랜스코딩 솔루션을 구축했습니다. 이 회사는 하루에 약 350개의 뉴스 비디오 클립을 각 비디오 클립마다 14개의 형식으로 최대한 빠르게 변환해야 했습니다. 이 회사의 아키텍처는 미디어 파일을 직렬로만 처리하는 오픈 소스 오디오 및 비디오 인코더인 FFmpeg를 사용합니다. 최고의 고객 경험을 제공하도록 스루풋을 개선하기 위해, AWS Step Functions와 Amazon S3를 사용하여 작업을 병렬로 처리하는 솔루션이 활용되었습니다. 각 비디오는 3초 길이의 세그먼트로 분할되어 병렬로 처리된 다음 마지막에 결합됩니다.
첫 번째 단계는 비디오 청크에 필요한 정보를 식별하는 Locate keyframes라는 Lambda 함수입니다. 다음으로, Split video Lambda 함수가 키 프레임을 기준으로 비디오를 분할하고 분할된 세그먼트를 S3 버킷에 저장합니다. 그러면 각 세그먼트가 Lambda 함수에 의해 병렬로 처리되어 대상 버킷에 저장됩니다. 상태 시스템은 N개의 세그먼트가 모두 처리될 때까지 이 처리 프로세스를 실행합니다. 그런 다음 처리된 세그먼트를 연결하는 최종 Lambda 함수를 트리거하고 결과 비디오를 S3 버킷에 저장합니다.
Amazon MediaConvert를 사용하여 서버리스 비디오 트랜스코딩 파이프라인 구축
이 예에서는 AWS Step Functions, AWS Lambda 및 AWS Elemental MediaConvert를 함께 오케스트레이션하여 온디맨드 콘텐츠를 위한 완전관리형 트랜스코딩 기능을 구현하는 방법을 알아봅니다. 이 사용 사례는 클라우드에서 비디오 콘텐츠를 처리하거나 향후 워크로드를 클라우드로 이동하려는 소스 비디오 콘텐츠의 볼륨이 크거나 다양한 기업에 적용됩니다.
이 VOD 솔루션에는 기본 Step Functions 워크플로에서 트리거되는 세 가지 하위 워크플로가 있습니다.
- 수집: 이 워크플로는 Express 워크플로일 수 있습니다. S3에 추가되는 소스 파일이 이 워크플로를 트리거하면 데이터가 수집됩니다.
- 처리: 이 워크플로는 비디오의 높이와 너비를 확인하여 인코딩 프로필을 만듭니다. 처리 후에는 AWS Elemental MediaConvert를 통해 인코딩 작업이 트리거됩니다.
- 게시: 이 마지막 단계에서는 대상 S3 버킷에서 자산을 사용할 수 있는지 확인하고, 작업이 완료되었음을 관리자에게 알립니다.
AWS Step Functions 시작하기