Amazon Web Services 한국 블로그

AWS Step Functions Workflow Studio – 상태 머신 구축을 위한 시각적 도구 출시

AWS Step Functions를 사용하면 상태 머신으로 확장 가능한 분산된 애플리케이션을 구축할 수 있습니다. 이전까지는 Step Functions에서 워크플로를 구축하려면 Amazon State Language(ASL)를 배우고 이해해야 했습니다. 오늘 출시된 Workflow Studio는 코드를 적게 사용하는 시각적 도구로, 가이드가 있는 인터랙티브 인터페이스를 통해 Step Functions를 배우고 워크플로를 더욱 빠르게 프로토타이핑하여 구축할 수 있습니다.

2016년 12월에 Step Functions가 출시되었을 당시 저는 서버리스로 마이그레이션하던 중이었습니다. 우리 팀은 기존 환경에 맞게 구축된 애플리케이션에서 서버리스 아키텍처로 모든 비즈니스 로직을 옮겼습니다. 우리는 오직 단 한 가지만 하는 기능을 구현하려고 했음에도 불구하고 애플리케이션의 모든 상태 관리를 함수에 넣자 매우 복잡해졌습니다. Step Functions가 출시된 것을 보고 이 솔루션을 사용하면 우리가 구축하던 서버리스 애플리케이션의 복잡성을 낮출 수 있을 것으로 생각했습니다. 다만 ASL을 사용하여 상태 머신을 배워서 작성하고, 각각의 AWS 서비스를 호출하고, 상태 머신에서 요구하는 플로 작업을 실행하는 데 많은 시간이 걸렸습니다. 몇 주간 작업하고 나서도 많은 테스트를 거쳐 수정해야 했습니다.

Step Functions는 분산된 애플리케이션 내의 프로세스를 시각화하기에는 좋지만, 상태 머신을 개발하는 과정은 시각적이지 못했습니다. Workflow Studio를 사용하면 개발자들이 쉽게 서버리스 워크플로를 구축할 수 있습니다. 개발자들은 중요한 비즈니스 로직에 집중하면서도 워크플로 정의를 위한 구성 코드를 작성하고 데이터 변환을 구축하는 데 걸리는 시간을 낮출 수 있습니다.

Workflow Studio는 첫 워크플로를 구축하는 시간이 단축되고, 개발자가 실습으로 빠르게 익숙해질 수 있기 때문에 Step Functions를 처음 사용하는 개발자에게 유용합니다. 또한, Workflow Studio는 시각적 도구로 개발 시간을 더욱 줄일 수 있기 때문에 워크플로 구축 경험이 있는 개발자에게도 유용합니다. 예를 들어 Workflow Studio를 사용하여 워크플로를 프로토타이핑하고 관계자들에게 빠르게 공유할 수 있습니다. 또는, Workflow Studio를 사용하여 상태 머신의 상용구를 설계할 수 있습니다. Workflow Studio를 사용할 때는 모든 리소스를 AWS 계정에 배포하지 않아도 됩니다. 상태 머신을 구축하고, 준비 상태에 따라 다양한 작업으로 서서히 완료하면 됩니다.

Workflow Studio는 기업 애플리케이션(예: 전자 상거래 플랫폼, 금융 거래 처리 시스템, 전자 의료 서비스)을 간단하게 구축할 수 있습니다. AWS 서비스를 워크플로에 결합해서, 내결함성이 있는 확장형 애플리케이션을 구축하는 복잡한 과정을 추상화합니다. Workflow Studio는 시각적 워크플로에서 여러 가지 AWS 서비스 기능을 노출하기 때문에 AWS 서비스 및 API에 대한 호출에 순서를 정해 구성하고, 워크플로를 통해 데이터 흐름을 변환할 수 있습니다.

Workflow Studio를 사용한 워크플로 구축
계정을 생성할 때 데이터를 검증하는 시스템을 구축해야 한다고 가정합니다. 입력 데이터가 올바를 경우, 시스템이 영구 스토리지에 레코드를 저장하고 관리자에게 계정이 생성된 것을 알리는 이메일을 보냅니다. 검증 오류로 인해 계정을 생성하지 못할 경우, 데이터는 저장되지 않고 관리자에게 계정 생성에 문제가 있음을 알리는 이메일을 보냅니다.

이 문제를 해결하는 방법은 여러 가지가 있지만 최소한의 코드로 애플리케이션을 구축하고 AWS가 제공하는 모든 관리형 서비스를 활용하고 싶다면, Workflow Studio를 사용하여 상태 머신을 설계하고 모든 관리형 서비스와의 통합을 구축해야 합니다.

현재 구축 중인 아키텍처 다이어그램

Workflow Studio를 사용하면 얼마나 쉽게 상태 머신을 만들 수 있는지 보여드리겠습니다. 시작하려면 Step Functions 콘솔로 가서 상태 머신을 만듭니다. Workflow Studio를 사용하여 시각적으로 새 상태 머신 설계를 시작하기 위한 옵션이 보입니다.

새 상태 머신 만들기

Workflow Studio에서 상태 머신을 만들기 시작할 수 있습니다. 왼쪽 창의 [상태 브라우저]에서 사용 가능한 작업과 플로 상태를 확인하고 검색할 수 있습니다. 작업이란 AWS 서비스를 사용하여 실행할 수 있는 것을 의미합니다. 예를 들어 AWS Lambda 함수를 호출하거나, Amazon API Gateway로 요청을 보내거나, Amazon Simple Notification Service(SNS) 주제로 메시지를 보내는 등의 작업이 있습니다. 플로는 사용 사례에 맞는 워크플로를 만드는 데 사용하는 상태 유형입니다.

사용 가능한 플로 상태는 다음과 같습니다.

  • 선택: if-then-else 로직을 추가합니다.
  • 병렬: 병렬 분기를 추가합니다.
  • : for-each 루프를 추가합니다.
  • 대기: 일정 시간 지연합니다.

페이지 중앙에는 현재 작업 중인 상태 머신이 보입니다.

Studio의 워크플로 우선 뷰 스크린샷

계정 유효성 검사기 워크플로를 구축하려면 다음이 필요합니다.

  • 계정을 만들기 위해 제공한 데이터를 검증하는 Lambda 함수를 호출하는 태스크 1개.
  • 항목을 DynamoDB 테이블에 입력하는 태스크 1개.
  • 메시지를 SNS 주제에 넣는 태스크 2개.
  • Lambda 함수의 결과에 따라 실행할 작업을 결정하는 선택 플로 상태 1개.

워크플로를 만들 때는 상태 머신을 구축하기 전에 미리 모든 AWS 리소스를 준비할 필요가 없습니다. 상태 머신을 구축하고 나서 나중에 리소스에 정의를 추가할 수 있습니다. 또는, 이 블로그 게시물에서처럼 상태 머신을 구축하기 전에 미리 AWS 계정에 모든 AWS 리소스를 배포할 수도 있습니다.  Serverless Application Model 템플릿에서 AWS 계정으로 필수 리소스를 배포할 수 있습니다. 리소스를 만들어 배포한 후에 이 게시물의 다른 단계를 진행할 수 있습니다.

Lambda 함수 구성
워크플로의 첫 단계는 Lambda 함수입니다. 상태 머신에 함수를 추가하려면 작업 목록에서 호출 작업을 끌어서 Workflow Studio의 중앙으로 가져옵니다(1단계 참조). 오른쪽 창에서 함수 구성을 편집합니다. 예를 들어 이름을 변경할 수 있습니다(2단계 참조). 이 계정에 배포된 함수 목록에서 호출해야 할 Lambda 함수의 종류를 변경할 수도 있습니다(3단계 참조). 이 작업이 끝나면 이 태스크의 출력을 수정할 수 있습니다(4단계 참조).

상태 머신에 새 Lambda 함수를 추가하는 단계

태스크의 출력 구성은 매우 중요합니다. 이 값이 다음 상태에 입력값으로 전달되기 때문입니다. 필요한 정보만 포함하여 결과 객체를 생성합니다(이때 계정이 유효해야 합니다). 먼저 1단계에 나와 있듯이 [OutputPath로 출력 필터링]을 취소합니다. 그런 다음, [Result Selector로 결과 변환]을 선택하고 2단계에 나와 있는 JSON을 추가합니다. 3단계에서와같이 이 현재 상태의 입력과 출력을 결합하고 다음 상태의 입력값으로 보내려면 [ResultPath로 입력과 결과 결합]을 선택합니다. 이 상태의 입력이 필요한 이유는 계정 정보이기 때문입니다. 검증이 성공하면 그 데이터를 DynamoDB 테이블에 저장해야 합니다.

각 변환이 무슨 작업을 하는지 아는 데 도움이 필요할 경우, 각 변환에서 [정보] 링크를 선택합니다.

Lambda 출력을 구성하는 스크린샷

선택 상태 구성
Lambda 함수를 구성하고 나서 선택 상태를 추가해야 합니다. 선택에서 선택 규칙에 따라 입력을 검증합니다. 이러한 규칙을 적용한 결과에 따라 상태 머신이 실행을 다른 경로로 보냅니다.

다음 그림은 선택 상태를 추가하는 워크플로를 나타냅니다. 1단계, 플로에서 선택 상태를 끌어옵니다. 2단계, 이름을 입력합니다. 3단계, 규칙을 정의합니다. 이 사용 사례의 경우, 각 조건에 한 가지 규칙이 있습니다.

선택 상태를 구성하는 스크린샷

이 규칙의 조건은 이전 상태의 출력 결과와 부울 상수를 비교하는 것입니다. 이전 상태 작업에서 true 값을 반환하면 규칙이 실행됩니다. 이것이 성공한 경로입니다. 이 예시에서는 Lambda 함수의 결과를 검증합니다. 여기에 나와 있듯이 함수가 입력 데이터를 검증하면 검증된 값이 true인지 반환합니다.

규칙 구성

규칙이 적용되지 않으면 선택 상태는 기본 분기를 실행합니다. 이것은 오류가 있는 경로입니다.

오류 경로 구성
오류가 있을 경우 관리자에게 이메일을 보내서 계정을 만들 수 없다고 알려야 합니다. 이 게시물 앞부분에서 이미 SNS 주제를 생성했어야 합니다. SNS 주제에서 구성한 이메일 주소가 이 주제에 대한 이메일 구독을 수신하는지 확인해야 합니다.

메시지를 게시하는 SNS 태스크를 추가하려면 먼저 SNS:Publish 태스크를 검색한 다음(1단계 참조), 상태 머신으로 끌어옵니다(2단계 참조). 실패 상태 플로를 상태 머신으로 끌어와서(3단계 참조), 이 실행 분기가 완료되면 상태 머신이 실패 상태가 되도록 합니다.

Workflow Studio는 상태 머신에서 여러 가지 상태를 끌어와 워크플로의 다른 부분에 넣을 수 있는 좋은 기능이 있습니다.

이제 메시지를 게시하기 위한 SNS 태스크를 구성할 수 있습니다. 먼저 상태 이름을 변경합니다(4단계 참조). AWS 계정에 배포된 주제에서 하나를 선택합니다(5단계 참조). 마지막으로 이메일로 보낼 메시지를 사용 사례에 맞게 변경합니다(6단계 참조).

오류 경로 구성의 단계

성공 경로 구성
성공 경로의 경우, 계정 정보를 DynamoDB 테이블에 저장한 다음 앞서 배포한 SNS 주제를 사용하여 이메일을 보냅니다. 이렇게 하려면 DynamoDB:PutItem 태스크(1단계 참조)와 SNS:Publish 태스크(2단계 참조)를 상태 머신에 추가합니다. 오류 경로와 유사한 방법으로 SNS:Publish 태스크를 구성합니다. 다른 메시지를 보냅니다. 이를 위해서는 오류 경로에서 상태를 복사해 적절한 곳에 끌어서 넣은 다음, 새 메시지로 수정하면 됩니다.

DynamoDB:PutItem 태스크는 DynamoDB 테이블에 항목을 입력합니다. 이 태스크는 Lambda 함수에서 이 작업을 실행할 필요가 없기 때문에 매우 간편합니다. 이 태스크를 구성하려면 먼저 이름을 변경합니다(3단계). 그런 다음, API 파라미터를 구성하고(4단계 참조) DynamoDB 테이블에 적절한 데이터를 입력합니다.

성공 경로 구성의 단계

이 항목(계정)에 사용할 API 파라미터:

{
  "TableName": "<THE NAME OF YOUR TABLE>",
  "Item": {
    "id": {
      "S.$": "$.Name"
    },
    "mail": {
      "S.$": "$.Mail"
    },
    "work": {
      "S.$": "$.Work"
    }
  }
}

상태 머신 저장 및 실행
Workflow Studio가 상태 머신의 ASL 정의를 대신 생성해주기는 하지만, 언제든 ASL 정의를 수정하고 시각적 편집기로 돌아와 언제든 상태 머신을 수정할 수 있습니다.

상태 머신이 준비되면 첫 실행을 합니다. 저장하고 새 실행을 시작합니다. 새 실행을 시작하면 메시지가 표시되고 상태 머신에 대한 입력 이벤트를 요청합니다. 이 이벤트의 속성 이름이 Name, Mail 및 Work인지 확인하세요. 여기에 따라 상태 머신의 실행이 달라집니다.

실행 시작 상태 머신을 실행하고 나면 실행의 시각화가 보입니다. 실행에서 했던 모든 단계가 표시됩니다. 각 단계에서 단계 입력과 출력이 보입니다. 이는 상태 머신을 디버깅하고 세부적으로 조정하는 데 매우 유용합니다.

실행 결과

정식 출시

앞으로 Workflow Studio에서는 여러 가지 좋은 기능이 개발될 것입니다. 세부 정보는 바뀔 수 있지만, 고객 여러분께 워크플로 실행을 시각적으로 생성, 실행하고 디버깅까지 할 수 있는 기능을 제공하고자 노력하고 있습니다. 자세한 내용은 향후 공개될 예정이며, 저희에게 언제든 피드백을 보내주세요.

Workflow StudioStep Functions가 제공되는 모든 AWS 리전에서 사용할 수 있습니다.

한 번 체험해보고 자세히 알아보세요.

Marcia