Step Functions에서 스테이트 머신에 대해 알아보기 - AWS Step Functions

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Step Functions에서 스테이트 머신에 대해 알아보기

Step Functions는 스테이트 머신과 태스크를 기반으로 합니다. Step Functions에서는 상태 머신을 워크플로라고 하며, 워크플로우는 일련의 이벤트 기반 단계입니다. 워크플로의 각 단계를 상태라고 합니다. 예를 들어 작업 상태는 다른 AWS 서비스가 수행하는 작업 단위 (예: 다른 서비스 AWS 서비스 또는 호출) 를 나타냅니다API. 작업을 수행하는 워크플로를 실행하는 인스턴스를 Step Functions에서 실행이라고 합니다.

Step Functions 워크플로우 다이어그램의 예시

주요 개념

다음은 컨텍스트에 대한 주요 Step Functions 용어의 개요를 제공합니다.

용어 설명
워크플로 비즈니스 프로세스를 반영하는 경우가 많은 일련의 단계입니다.
상태

입력을 기반으로 결정을 내리고, 해당 입력으로 작업을 수행하고, 출력을 다른 상태로 전달할 수 있는 상태 머신의 개별 단계입니다.

자세한 내용은 Step Functions에서 사용할 워크플로 상태 검색 단원을 참조하십시오.

Workflow Studio

더 빠르게 워크플로 프로토타입을 제작하고 워크플로를 빌드할 수 있도록 도와주는 시각적 워크플로 디자이너입니다.

자세한 내용은 Step Functions 워크플로 스튜디오에서 워크플로우 개발 단원을 참조하십시오.

상태 시스템

, StartAtTimeoutSeconds, 등의 필드와 함께 워크플로의 개별 상태 또는 단계를 나타내는 JSON 텍스트를 사용하여 정의된 Version 워크플로입니다.

자세한 내용은 Step Functions용 Amazon States 언어 워크플로의 상태 시스템 구조 단원을 참조하십시오.

Amazon States Language

스테이트 머신을 정의하는 데 사용되는 구조화된 JSON 기반의 언어입니다. 를 사용하여 작업을 수행할 수 있는 상태 모음 (Task상태) 을 정의하고, 다음으로 전환할 상태 (Choice상태) 를 결정하고, 오류가 발생한 실행 (Fail상태) 을 결정합니다. ASL

자세한 내용은 Amazon States 언어를 사용하여 Step Functions 워크플로를 정의하기 단원을 참조하십시오.

입력 및 출력 구성

워크플로의 상태는 JSON 데이터를 입력으로 받고 일반적으로 JSON 데이터를 다음 상태에 출력으로 전달합니다. Step Functions는 상태 간 데이터 흐름을 제어하는 필터를 제공합니다.

자세한 내용은 Step Functions에서 입력 및 출력 처리하기 단원을 참조하십시오.

서비스 통합

워크플로우에서 AWS 서비스 API 작업을 호출할 수 있습니다.

자세한 내용은 Step Functions와 다른 서비스 통합 단원을 참조하십시오.

서비스 통합 유형
  • AWS SDK통합 — 스테이트 머신에서 직접 2백 AWS 서비스 9,000개 이상의 API 액션 중 하나를 호출하는 표준 방법입니다.

  • 최적화된 통합 — 특정 서비스와의 통화 및 데이터 교환을 간소화하는 맞춤형 통합. 예를 들어, Lambda Invoke는 Payload JSON 이스케이프된 문자열의 응답 필드를 객체로 자동 변환합니다. JSON

서비스 통합 패턴

를 AWS 서비스호출할 때는 다음 서비스 통합 패턴 중 하나를 사용합니다.

Execution

상태 시스템 실행은 워크플로를 실행하여 작업을 수행하는 인스턴스입니다.

자세한 내용은 Step Functions에서 스테이트 머신 실행 시작 단원을 참조하십시오.

상태 머신 데이터

상태 머신 데이터는 다음과 같은 양식을 사용합니다.

  • 상태 머신에의 초기 입력

  • 상태 간 전송되는 데이터

  • 상태 머신의 출력

이 섹션에서는 AWS Step Functions에서 상태 머신 데이터의 형식 지정 및 사용 방법에 대해 설명합니다.

데이터 형식

스테이트 머신 데이터는 JSON 텍스트로 표시됩니다. 에서 지원하는 모든 데이터 유형을 사용하여 상태 머신에 값을 제공할 수 JSON 있습니다.

참고

상태 머신 입/출력

두 가지 방법 중 하나로 초기 입력 데이터를 AWS Step Functions 스테이트 머신에 제공할 수 있습니다. 실행을 시작할 때 데이터를 StartExecution 작업에 전달할 수 있습니다. Step Functions 콘솔에서 데이터를 상태 시스템으로 전달할 수도 있습니다. 초기 데이터는 상태 머신의 StartAt 상태에 전달됩니다. 아무 입력도 제공되지 않으면 빈 객체({})가 기본값이 됩니다.

마지막 상태(terminal)에 따라 실행의 출력이 반환됩니다. 이 출력은 실행 결과에 JSON 텍스트로 표시됩니다.

표준 워크플로의 경우 DescribeExecution 작업과 같은 외부 호출자를 사용하여 실행 내역에서 실행 결과를 검색할 수 있습니다. Step Functions 콘솔에서 실행 결과를 볼 수 있습니다.

Express Workflows의 경우 로깅을 활성화한 경우 CloudWatch 로그에서 결과를 검색하거나 Step Functions 콘솔에서 실행을 보고 디버그할 수 있습니다. 자세한 내용은 Step Functions에서 CloudWatch 로그를 사용하여 실행 기록 기록Step Functions 콘솔에서 실행 보기 및 디버깅 단원을 참조하세요.

상태 시스템과 관련된 할당량도 고려해야 합니다. 자세한 내용은 Step Functions 서비스 할당량 단원을 참조하세요.

상태 입/출력

각 상태의 입력은 이전 상태의 JSON 텍스트 또는 상태의 경우 실행에 StartAt 대한 입력으로 구성됩니다. 특정 흐름 제어 상태는 입력을 출력으로 그대로 보냅니다.

다음 예에서는 상태 머신이 두 개의 수를 함께 추가합니다.

  1. AWS Lambda 함수를 정의합니다.

    function Add(input) { var numbers = JSON.parse(input).numbers; var total = numbers.reduce( function(previousValue, currentValue, index, array) { return previousValue + currentValue; }); return JSON.stringify({ result: total }); }
  2. 상태 시스템을 정의합니다.

    { "Comment": "An example that adds two numbers together.", "StartAt": "Add", "Version": "1.0", "TimeoutSeconds": 10, "States": { "Add": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Add", "End": true } } }
  3. 다음 JSON 텍스트로 실행을 시작합니다.

    { "numbers": [3, 4] }

    Add상태는 JSON 텍스트를 수신하여 Lambda 함수로 전달합니다.

    Lambda 함수에서 계산 결과를 상태에 반환합니다.

    상태가 출력에 다음 값을 반환합니다.

    { "result": 7 }

    [Add] 또한 상태 머신의 마지막 상태이므로 이 값이 상태 머신의 출력으로 반환됩니다.

    마지막 상태에서 출력이 반환되지 않는 경우 상태 머신이 빈 객체({})를 반환합니다.

자세한 내용은 Step Functions에서 입력 및 출력 처리하기 단원을 참조하십시오.

다른 서비스에서 호출 AWS Step Functions

상태 시스템을 간접적으로 호출하도록 다른 여러 서비스를 구성할 수 있습니다. 상태 시스템의 워크플로 유형에 따라 상태 시스템을 비동기적이나 동기적으로 간접 호출할 수 있습니다. 상태 머신을 동기적으로 호출하려면 호출 또는 Express StartSyncExecution API Workflows와의 Amazon API Gateway 통합을 사용하십시오. 비동기 호출을 사용하면 Step Functions는 작업 토큰이 반환될 때까지 워크플로 실행을 일시 중지합니다. 하지만 작업 토큰을 기다리면 워크플로가 동기화됩니다.

Step Functions를 간접적으로 호출하도록 구성할 수 있는 서비스는 다음과 같습니다.

Step Functions 간접 호출에는 StartExecution 할당량이 적용됩니다. 자세한 내용은 다음을 참조하세요.

스테이트 머신의 트랜지션

새로운 상태 시스템 실행을 시작하면 시스템은 최상위 StartAt 필드에서 참조하는 상태로 시작합니다. 이 필드(문자열로 지정)는 대/소문자를 포함하여 워크플로 상태 이름과 정확하게 일치해야 합니다.

상태가 실행된 후 Next 필드의 값을 AWS Step Functions 사용하여 다음 단계로 넘어갈 상태를 결정합니다.

또한 Next 필드는 상태 이름을 문자열로 지정합니다. 이 문자열은 대소문자를 구분하며 상태 시스템 설명에 지정된 상태 이름과 정확히 일치해야 합니다.

예를 들어 다음 상태에는 NextState에 대한 전환이 포함되어 있습니다.

"SomeState" : { ..., "Next" : "NextState" }

대부분의 상태에서는 Next 필드를 통한 단일 전환 규칙만 허용합니다. 그러나 특정 흐름 제어 상태(예: Choice 상태)를 사용하면 여러 전환 규칙(각각에 자체 Next 필드 포함)을 지정할 수 있습니다. 전환 지정 방법에 대한 자세한 내용을 포함하여 사용자가 지정할 수 있는 각 상태 유형에 대한 자세한 내용은 Amazon States 언어에서 참조할 수 있습니다.

상태에는 다른 상태로부터 들어오는 전환이 여러 개 있을 수 있습니다.

터미널 상태("Type": Succeed, "Type": Fail 또는 "End": true인 상태)에 도달하거나 런타임 오류가 발생할 때까지 프로세스가 반복됩니다.

실행을 redrive하면 상태 전환으로 간주됩니다. 또한 redrive에서 재실행되는 모든 상태도 상태 전환으로 간주됩니다.

상태 시스템 내 상태에는 다음 규칙이 적용됩니다.

  • 상태는 둘러싸는 블록 내에서 어떠한 순서로도 발생할 수 있습니다. 그러나 나열된 순서는 실행 순서에는 영향을 미치지 않습니다. 이 순서는 상태의 내용에 따라 결정됩니다.

  • 상태 시스템 내에는 start 상태로 지정된 상태 하나만 있을 수 있습니다. start 상태는 최상위 구조의 StartAt 필드 값으로 정의됩니다.

  • 상태 시스템 논리에 따라(예: 상태 시스템에 논리 브랜치가 여러 개 있는 경우) end 상태 수가 하나를 넘을 수 있습니다.

  • 상태 시스템이 상태 하나로만 구성된 경우 시작 상태와 종료 상태 모두가 될 수 있습니다.

Distributed Map 상태에서 전환

분산 모드에서 Map 상태를 사용하는 경우 Distributed Map 상태가 시작하는 하위 워크플로 실행마다 상태 전환 하나에 대한 요금이 청구됩니다. 인라인 모드에서 Map 상태를 사용하는 경우 Inline Map 상태를 반복할 때마다 상태 전환 요금이 청구되지 않습니다.

분산 모드에서 Map 상태를 사용하여 비용을 최적화하고 Map 상태 정의에 중첩된 워크플로를 포함할 수 있습니다. 또한 Distributed Map 상태Express 유형의 하위 워크플로 실행을 시작할 때 더 많은 가치를 더합니다. Step Functions는 Express 하위 워크플로 실행의 응답 및 상태를 저장하므로 실행 데이터를 CloudWatch 로그에 저장할 필요가 줄어듭니다. 또한 Distributed Map 상태에서 사용할 수 있는 흐름 제어 (예: 오류 임계값 정의 또는 항목 그룹 일괄 처리)에 액세스할 수 있습니다. Step Functions 요금에 대한 자세한 내용은 AWS Step Functions 요금을 참조하세요.

Step Functions에서 읽기 일관성

에서의 상태 머신 AWS Step Functions 업데이트는 결국 일관되게 이루어집니다. 몇 초 내에 모든 StartExecution 호출이 업데이트된 정의와 roleArn (IAM역할의 Amazon 리소스 이름) 을 사용합니다. UpdateStateMachine 호출 직후 시작된 실행에서는 이전의 상태 시스템 정의 및 roleArn이 사용될 수 있습니다.

자세한 내용은 다음 자료를 참조하세요.