AWS 기술 블로그
AWS Step Functions Workflows Collection을 활용하여 빠르게 비즈니스 워크플로 구성하기
AWS Serverless Developer Advocate 팀은 2022년 6월 29일에 Serverless Land 사이트에 AWS Step Functions 워크플로를 쉽게 검색, 배포 및 공유할 수 있도록 Workflows Collection을 새롭게 출시했습니다.
이 글에서는 AWS Step Functions 워크플로우가 무엇인지, 어떤 문제들을 해결해주는지를 소개하고, Step Functions 사용에 도움이 되는 플랫폼인 Workflows Collection을 소개합니다. 이를 통하여 서버리스 애플리케이션을 쉽게 구축하는 방법을 알게 되며, 관련 예제를 검색할 수 있는 사이트 사용법을 익힐 수 있습니다.
AWS Step Functions 소개
AWS Step Functions는 다양한 AWS 서비스들을 통해 구현된 작업을 연결하고, 각 작업의 상태를 관리하는 데에 사용되는 서비스입니다. Step Functions를 이용하면 Fail 처리 및 재시도, 병렬화, 서비스 통합, 작업 순서 관리 등과 같이 여러가지 상태(state)로 연결된 프로세스를 코드를 작성하지 않고도 시각적으로 편하게 조작할 수 있고, 다양한 AWS 서비스를 편리하게 연결할 수 있습니다.
예를 들어, Step Functions가 필요한 상황은 다음과 같습니다.
A의 계좌에서 B의 계좌로 돈을 송금하고 알림을 보내주는 뱅킹 서비스가 있습니다. A가 B의 계좌로 ‘송금 요청’을 한다면, 요청이 제대로 진행된 경우에만 A의 계좌에서 돈이 빠져나가고 B의 계좌로 돈이 ‘입금’ 됩니다. 그리고 ‘송금 요청’과 ‘입금’의 두 과정이 안전하게 완료된 것이 확인 되어야만 B에게 해당 내역이 ‘알림’으로 전송됩니다. 이 세 과정 중 어느 하나라도 순서대로 진행되지 않으면 이 뱅킹 서비스는 실패한 것으로 간주 됩니다.
Step Functions를 이용하면 위의 예제에서 송금-입금-알림의 각 과정이 순서대로 진행되도록 시각적으로 조작할 수 있고, 오류가 발생했다면 3개 작업 중 어느 작업에서 오류가 일어났는지를 쉽게 확인할 수 있습니다.
Step Functions는 이와 같이 한 단계의 출력이 다음 단계의 입력으로 전달되는 일련의 단계를 워크플로로 정의하여 편리하게 설계, 실행, 관리해줍니다. AWS Step Functions Workflow Studio를 이용하여 시각적으로 워크플로를 구성할 수 있고, 200개 이상의 AWS 서비스를 조합하여 애플리케이션을 구축하고 실행시킬 수 있습니다.
더 자세한 소개는 아래 영상을 참고해 주세요.
이러한 상태 관리를 이용하면 고객은 마이크로서비스 애플리케이션을 쉽게 구축하고, IT 및 비즈니스 프로세스를 자동화하며, 데이터 및 기계 학습 파이프라인 등을 편리하게 구축하고 관리할 수 있습니다.
Workflows Collection으로 Step Functions 시작하기
Workflows Collection은 Step Functions을 통해 제작된 워크플로를 검색, 배포, 공유할 수 있는 참고 사이트입니다. Workflows Collection을 탐색함으로써 Step Functions 워크플로의 사례를 찾아볼 수 있고, 원하는 워크플로를 찾으면 직접 적용하여 실행시킬 수 있습니다.
Workflows Collection은 좌측의 Workflow Type, Use case, Level, Service와 같은 다양한 필터로 워크플로를 분류하고 있습니다.
‘Workflow Type’은 Step Functions 구성의 기본이 되는 설정으로, 워크플로 성격에 따라 아래와 같이 2가지 종류를 선택할 수 있습니다.
- Standard 타입: 시간이 오래 걸리는 워크플로를 실행하는 데에 적합합니다.
- Express 타입: 빠르고 즉각적으로 결과를 도출해야 하는 IoT, Streaming 서비스 등에 적합한 워크플로 타입입니다.
또한 ‘Level’ 카테고리를 참고하여, 필요한 상황 및 독자 수준에 맞는 워크플로를 찾을 수 있습니다.
- 1- Fundamental: 가장 간단한 Step Functions의 기본 구성 요소들이 포함됩니다.
- 2- Pattern: 애플리케이션에서 자주 활용되는 워크플로 블록이 포함됩니다.
- 3- Application: 바로 사용할 수 있는 하나의 마이크로서비스 워크플로가 포함됩니다.
이와 같이 다양한 필터 기능을 통해 원하는 워크플로의 범위를 지정하여 탐색할 수 있습니다.
Workflows Collection 둘러보기
Workflows Collection을 통해 Step Functions의 다양한 예제 코드와 구성을 참고할 수 있고, IT 비즈니스에 적용할 수 있는 다양한 기능들을 실행시켜볼 수 있습니다. ‘Speech Recognition Counter’ 워크플로를 보며 Workflows Collection의 활용법을 알아보겠습니다.
먼저 View를 눌러 워크플로 Detail 페이지로 이동합니다.
1. 상단의 설명을 읽어보면, Speech Recognition Counter는 음성 파일에서 특정 표현(You know)이 몇 번 등장했는지 카운트하는 기능의 워크플로입니다. Amazon Transcribe와 Amazon Athena 서비스의 API를 Step Functions 상태 머신 상에서 연결하여 구축한 기능입니다.
2. 워크플로의 다이어그램과 코드를 볼 수 있습니다.
- Statemachine 를 클릭하여 워크플로의 시각적 다이어그램을 확인할 수 있습니다.
- Template을 클릭하여 워크플로를 실제 배포하는 데 필요한 IaC(infrastructure as code) 템플릿을 확인할 수 있습니다. 템플릿은 워크플로를 실제 실행하기 위해 필요한 AWS 리소스를 프로비저닝하는 역할을 담당하며, AWS SAM(AWS Serverless Application Model) 또는 AWS CDK(AWS Cloud Development Kit) 프레임워크를 통해 JSON 혹은 YAML 파일 형태로 배포할 수 있습니다.
3. Workflows Collection에서 원하는 워크플로를 찾은 경우, Download와 Deploy 명령어를 통해 Step Functions 상태 머신을 실행시킬 수 있습니다.
Workflows Collection 내의 워크플로 실행하기
Speech Recognition Counter를 실제 실행해 볼까요?
사이트의 Download, Deploy 명령어를 이용해 워크플로를 실행할 수 있습니다. 아래의 과정을 통해 예제를 실행해봅니다.
1. 처음 실행하는 경우, SAM 명령어를 실행하기 위해 SAM CLI를 설치해야 합니다. 링크를 참고하여 먼저 설치를 진행해주세요.
2. Template 파일을 다운로드 받는 과정입니다.
- Download 명령어를 통해 코드를 Github에서 다운로드 받습니다.
* 워크플로마다 Download/Deploy 명령어는 조금씩 다를 수 있지만, 대체적으로 아래와 같은 형식을 가집니다.
git clone https://github.com/aws-samples/step-functions-workflows-collection.git
cd step-functions-workflows-collection/{원하는 워크플로 이름}
3. 필요한 리소스를 구성하는 과정입니다.
Deploy 명령을 복사하여 본인의 터미널에 입력합니다. 이를 통해 AWS 계정에 Step Functions 상태 머신 및 실행에 필요한 AWS 리소스가 계정에 생성 됩니다.
* 워크플로마다 Download/Deploy 명령어는 조금씩 다를 수 있지만, 대체적으로 아래와 같은 형식을 가집니다.
sam deploy –guided
이후 아래와 같이 Stack Name, AWS Region, IAM 역할 생성 허용 여부에 대한 정보들을 입력하도록 하는 command가 나타납니다. 입력 시 특별한 설정 없이 default값으로 설정하고 싶다면 Enter를 입력하여 설정할 수 있습니다.
“Successfully created/updated stack”이라는 문구가 뜨면 리소스 생성이 완료된 것입니다. 이제 Step Functions 상태 머신을 비롯하여 필요한 리소스들(S3 버킷, EventBridge 등)이 AWS 계정에 생성되었습니다.
4. 구성된 워크플로의 동작을 테스트하는 과정입니다.
워크플로가 실제 동작하도록 실행하는 과정은 각 예제별로 실행하는 방법이 조금씩 다릅니다. 가장 정확한 실행 방법은 Visit the Github repo for this workflow 를 클릭하여 나오는 레포지토리의 README.md 파일을 참고하는 것입니다.
Workflows Collection의 Detail 화면에서, 연결된 Github repo로 이동합니다.
README 파일의 가이드에 따라, 이미 생성된 S3버킷(you-know-media)에 mp3 파일을 업로드하면, EventBridge가 이 업로드 동작을 감지하고 상태 머신을 실행합니다. Step Functions 콘솔로 이동하면 상태 머신이 자동으로 실행되고 있는 것을 확인할 수 있습니다.
상태머신의 동작이 끝나면 mp3 파일에서 ‘You know’라는 어구가 몇 번 언급되었는지 횟수를 분석해 output으로 출력된 것을 확인할 수 있습니다.
이와 같은 과정을 통해 리소스를 구성하고, 사이트의 가이드에 따라 워크플로를 실행해볼 수 있습니다.
Workflows Collection에 기여하기
누구나 직접 만든 워크플로를 업로드함으로써 해당 사이트에 기여할 수 있습니다. 이 블로그 포스트에서는 실제 ‘Script Generator’ 워크플로를 Workflows Collection에 업로드 하는 과정을 보여주고 있습니다. 아래의 과정을 따라 Workflows Collection에 기여할 수 있습니다.
1. 사전 준비 사항
Workflows Collection에 워크플로를 업로드하기 전에 준비해야 할 파일은 아래와 같습니다.
- template.yaml 파일: CDK 혹은 SAM을 이용하여 생성한 CloudFormation 템플릿 파일 (예시)
- statemachine.asl.json 파일: Step Functions 상태머신을 정의하는 ASL 파일(예시)
- 워크플로 이미지: 상태머신 다이어그램 PNG, JPEG 이미지 파일 (예시)
각 파일의 예시는 실제 업로드된 워크플로의 파일을 참고할 수 있습니다.
2. 워크플로 제출을 위한 aws-samples Github 로 이동합니다.
3. step-functions-workflows-collection 레포지토리를 본인의 Github으로 Fork 합니다.
상단의 ‘Fork’를 클릭합니다.
‘Create fork’를 클릭합니다.
본인의 계정에 Fork한 레포지토리가 생성됩니다.
4. Fork 해온 본인의 Github레포지토리에 1번에서 준비한 파일들을 업로드하는 과정입니다.
본인이 사용하는 IDE에서 터미널을 열고 아래 명령어를 입력합니다. (아래 예시에서는 VSCode를 이용하였습니다.)
git clone https://github.com/{본인의 Github ID}/step-functions-workflows-collection.git cd step-functions-workflows-collection git init git remote add origin https://github.com/{본인의 Github ID}/step-functions-workflows-collection.git git checkout -b dev
# 본인이 업로드하고자 하는 워크플로 이름으로 디렉토리를 생성 cp -r _workflow_model/ ./{새로운 디렉토리 이름}/ cd {새로운 디렉토리 이름} ls
위 명령어를 통해 레포지토리를 Clone하고, _workflow_model 폴더를 복제하여 script-generator라는 폴더를 생성했습니다.
생성된 폴더는 아래와 같은 예시 파일들을 담고 있습니다. 파일 구조에 맞춰 본인의 파일을 폴더에 업로드합니다.
- template.yaml 파일: CDK 혹은 SAM을 이용하여 생성한 템플릿 파일을 업로드합니다. (예시)
- statemachine 폴더: 상태머신을 정의하는 ASL 파일을 폴더 내에 업로드합니다. (예시)
- resources 폴더: 상태머신 다이어그램 PNG 파일을 폴더 내에 업로드합니다. (예시)
- example-workflow.json 파일: 작성자 정보 및 워크플로 설명 등의 메타데이터를 담습니다. (예시)
- README.md 파일: 정해진 형식에 맞추어 본인의 워크플로를 소개하는 내용을 담습니다. (예시)
모든 파일이 준비되었다면, 아래 명령어를 터미널에 입력하여 fork 해온 Github 레포지토리로 파일을 업로드 합니다.
git add .
git commit -m "커밋 메세지를 입력하세요"
git push -u origin dev
본인이 fork해온 레포지토리에 성공적으로 파일이 업로드된 것을 확인할 수 있습니다.
5. 제출하려는 워크플로를 설명하는 내용을 Github Issue 템플릿에 맞추어 작성합니다.
‘New Issue’를 클릭합니다.
‘New Workflow Submission’의 ‘Get Started’를 클릭합니다.
- Issue Title에는 업로드하고자 하는 워크플로의 이름을 입력합니다. (예: Script Generator)
- Github location에는 앞서 파일들을 업로드한 본인 Github 레포지토리 링크를 삽입합니다.
- 워크플로 세부 사항에는 아래와 같은 내용이 포함되어야 합니다.
-
- Description: 워크플로의 기능 및 패턴을 300~500자 이내로 설명합니다.
- Simplicity: [ (1)Fundamental, (2)Pattern, (3)Application ] 중 적절한 워크플로의 난이도를 1개 선택합니다.
- Diagram: Step Functions 상태 머신의 다이어그램 PNG 파일을 업로드합니다. PNG 파일을 드래그앤드롭 하여 업로드할 수 있습니다.
- Type: [ Standard, Express ] 중 Step Functions 실행 유형을 1개 선택합니다.
- Resources: 해당 워크플로를 이해하는 데 도움이 되는 AWS 공식 문서 혹은 블로그 링크를 첨부합니다. (최소 1개, 최대 5개까지 첨부 가능)
- Framework: [ SAM, CDK ] 중 해당 워크플로를 실행하는 데 사용되는 배포 프레임워크를 선택합니다.
- Author bio: 작성자 정보를 입력합니다. LinkedIn 또는 Twitter 프로필을 첨부하거나, 1줄 분량의 본인 소개를 삽입하면 좋습니다.
이슈를 제출하고, 해당 이슈 번호를 확인합니다.
6. Clone한 레포지토리에서 aws-samples의 레포지토리로 Pull Request를 생성하는 과정입니다.
Fork 해온 본인의 레포지토리의 상단 메뉴에서 ‘Pull request’ 메뉴로 이동합니다.
4번에서 생성한 이슈의 번호를 Pull Request 메시지에 입력하고, ‘Create Pull request’를 클릭합니다.
aws-samples 레포지토리에 Pull requests가 올라간 것을 확인할 수 있습니다.
여기까지 완료했다면 워크플로 제출이 성공적으로 완료된 것입니다. 이후 1주 이내로 Serverless Developer Advocate팀의 심사를 거쳐 사이트에 워크플로가 등록 됩니다.
결론
이 글에서는 Workflows Collection을 이용해 빠르게 Step Functions 애플리케이션 구축을 시작하는 방법을 알아보았습니다. 바로 AWS Step Functions Workflows Collection을 방문하여, Step Functions의 예제를 탐색하고 이를 이용해 어떤 비즈니스를 구축할 수 있는지를 알아보세요.
앞서 소개한 예제 외에도, 이미지를 분석해 관련 있는 카탈로그를 매핑해주는 ‘Moderated Image Catalog’ 워크플로, AWS 계정의 보안 정책을 진단해주는 ‘Automated policy orchestrator’ 워크플로, Amazon Athena 쿼리를 처리해 적절한 데이터 프로세싱을 하는 방법을 담은 ‘Query Athena’ 워크플로 등, 다양한 비즈니스가 Workflows Collection에 소개되고 있습니다.
이밖에도 Step Functions 이용에 도움을 얻고 싶으시다면 아래의 자료를 참고하여 기본적인 사용 방법과 예제를 배울 수 있습니다.
- AWS 블로그 포스트
Workflows Collection 예제를 활용하여, AWS Step Functions 기반 비즈니스 애플리케이션을 빠르게 구축하시기를 기대합니다.