기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Step Functions의 상태 시스템에 대해 알아봅니다.
Step Functions는 워크플로라고도 하는 상태 시스템을 기반으로 합니다. 워크플로는 일련의 이벤트 기반 단계로 구성됩니다.
라고도 하는 Amazon States Language를 사용하여 워크플로를 정의합니다ASL. 선택적으로 시각적 워크플로 디자이너인 Workflow Studio를 사용하여 워크플로를 빌드하고 편집할 수 있습니다.
워크플로의 각 단계를 상태라고 합니다. 상태는 흐름 상태 및 작업 상태라는 두 가지 유형이 있습니다.
- 흐름 상태
-
흐름 상태는 단계의 실행 흐름을 제어합니다. 예를 들어 Choice 상태는 조건부 로직을 제공하고, Wait 상태는 워크플로 실행을 일시 중지하고, Map 상태는 데이터 세트의 각 항목에 대해 하위 워크플로를 실행하고, Parallel 상태는 워크플로에 별도의 브랜치를 생성합니다.
- 작업 상태
-
작업 상태는 다른 AWS 서비스 또는 호출과 같이 다른 AWS 서비스가 수행하는 작업 단위를 나타냅니다API. 작업 상태는 작업이라고도 합니다. 수백 개의 작업을 선택하여 AWS 및 외부 서비스에서 작업을 수행할 수 있습니다. (참고: Step Functions 외부에서 실행되는 작업자를 사용하여 작업을 수행할 수도 있습니다. 자세한 내용은 섹션을 참조하세요활동.)
![Step Functions 워크플로 구성 요소의 예제입니다.](images/state-machine-conceptual-jsonata.png)
실행 및 처리 오류
워크플로를 실행할 때 Step Functions는 실행이라는 워크플로 인스턴스를 생성합니다. 워크플로 실행 상태를 모니터링할 수 있습니다. 실행에 오류가 발생하면 워크플로가 오류를 포착할 수 있습니다. 사용 사례에 따라 나중에 실행을 재구동하여 워크플로를 재개할 수 있습니다.
데이터 전달
선택적으로 JSON 텍스트 형식의 입력 데이터를 워크플로에 제공할 수 있습니다. 각 단계는 변수 및 상태 출력을 사용하여 후속 단계에 데이터를 전달할 수 있습니다. 변수에 저장된 데이터는 이후 단계에서 사용할 수 있습니다. 상태 출력은 다음 단계의 입력이 됩니다. 데이터 전달에 대한 자세한 내용은 섹션을 참조하세요변수를 사용하여 상태 간에 데이터 전달.
워크플로가 끝나면 상태 머신이 선택적으로 출력을 생성할 수도 있습니다JSON.
데이터 변환
상태 및 상태 머신은 쿼리 언어를 사용하여 데이터를 변환할 수 있습니다. 권장되는 쿼리 언어는 이지만 re:Invent 2024 이전에 생성된 JSONata상태 머신은를 사용합니다JSONPath. 이전 버전과의 호환성을 위해 상태 시스템 또는 개별 상태는 쿼리 언어JSONata에를 사용하도록 옵트인해야 합니다.
"JSONata"로 설정된 QueryLanguage
필드를 사용하여 JSONata 상태 시스템 및 개별 상태를 인식할 수 있습니다. 를 사용하는 상태 시스템 및 상태에는 QueryLanguage
필드가 JSONPath없습니다.
를 사용하는 상태에JSONPath는 Parameters InputPath, ResultSelector ResultPath, 등의 상태 필드가 있습니다 OutputPath. JSONPath 상태 시스템 정의에는 로 끝나는 필드 이름과 .$
및 접두사가 붙은 값도 표시되며$.
$$.
, 둘 다 경로를 나타냅니다. 경로에는와 같은 다양한 내장 함수가 표시될 수 있습니다States.MathAdd
. 내장 함수는 에서만 사용됩니다JSONPath.
JSONata 상태는 인수 및 출력 필드를 사용합니다. 이러한 선택적 필드에는 다음과 같은 JSONata 표현식이 표시될 수 있습니다"{% $type = 'local' %}"
. 에서는 표현식JSONata, 연산자 및 함수를 사용할 수 있습니다. 자세한 내용은 Step Functions에서 JSONata로 데이터 변환을 참조하십시오.
참고
상태당 하나의 쿼리 언어만 사용할 수 있습니다. 단일 단계 JSONata 내에서 JSONPath 및를 혼합할 수 없습니다.
주요 개념
다음은 컨텍스트에 대한 주요 Step Functions 용어의 개요를 제공합니다.
용어 | 설명 |
---|---|
워크플로 | 비즈니스 프로세스를 자주 반영하는 일련의 단계입니다. |
상태 |
상태 시스템의 개별 단계는 입력을 기반으로 결정하고 입력에서 작업을 수행하며 출력을 다른 상태로 전달할 수 있습니다. 자세한 내용은 Step Functions에서 사용할 워크플로 상태 알아보기 단원을 참조하십시오. |
Workflow Studio |
더 빠르게 워크플로 프로토타입을 제작하고 워크플로를 빌드할 수 있도록 도와주는 시각적 워크플로 디자이너입니다. 자세한 내용은 Step Functions Workflow Studio에서 워크플로 개발 단원을 참조하십시오. |
상태 시스템 | , 및와 같은 필드와 함께 워크플로의 개별 상태 또는 단계를 나타내는 JSON 텍스트를 사용하여 정의된 워크플로입니다 자세한 내용은 Step Functions 워크플로를 위한 Amazon States Language의 상태 시스템 구조 단원을 참조하십시오. |
Amazon States Language |
상태 머신을 정의하는 데 사용되는 JSON기반의 구조화된 언어입니다. 를 사용하면 작업을 수행할 수 있는 상태 모음(Task 상태)을 정의하고, 다음 상태로 전환할 상태(Choice 상태)를 결정하고ASL, 오류(Fail 상태)와 함께 실행을 중지할 수 있습니다. 자세한 내용은 Amazon States Language를 사용하여 Step Functions 워크플로 정의 단원을 참조하십시오. |
입력 및 출력 구성 |
워크플로의 상태는 JSON 데이터를 입력으로 수신하고 일반적으로 JSON 데이터를 출력으로 다음 상태로 전달합니다. Step Functions는 상태 간 데이터 흐름을 제어하는 필터를 제공합니다. 자세한 내용은 Step Functions에서 입력 및 출력 처리 단원을 참조하십시오. |
서비스 통합 |
워크플로에서 AWS 서비스 API 작업을 호출할 수 있습니다. 자세한 내용은 Step Functions에서 서비스 통합 단원을 참조하십시오. |
서비스 통합 유형 |
|
서비스 통합 패턴 | 를 호출 AWS 서비스할 때 다음 서비스 통합 패턴 중 하나를 사용합니다.
|
Execution |
상태 시스템 실행은 워크플로를 실행하여 작업을 수행하는 인스턴스입니다. 자세한 내용은 Step Functions에서 상태 시스템 실행 시작 단원을 참조하십시오. |
상태 머신 데이터
상태 머신 데이터는 다음과 같은 양식을 사용합니다.
-
상태 머신에의 초기 입력
-
상태 간 전송되는 데이터
-
상태 머신의 출력
이 섹션에서는 AWS Step Functions에서 상태 머신 데이터의 형식 지정 및 사용 방법에 대해 설명합니다.
데이터 형식
상태 시스템 데이터는 JSON 텍스트로 표시됩니다. 에서 지원하는 모든 데이터 유형을 사용하여 상태 시스템에 값을 제공할 수 있습니다JSON.
참고
-
JSON 텍스트 형식의 숫자는 JavaScript 의미 체계를 따릅니다. 이러한 숫자는 일반적으로 이중 정밀도 IEEE-854
값에 해당합니다. -
다음은 유효한 JSON 텍스트입니다.
-
따옴표로 구분된 독립형 문자열
-
Objects
-
배열
-
숫자
-
부울 값
-
null
-
-
상태 출력이 다음 상태의 입력이 됩니다. 그러나 입력 및 출력 처리를 사용하면 입력 데이터의 하위 집합에서 작업할 상태를 제한할 수 있습니다.
상태 머신 입/출력
두 가지 방법 중 하나로 AWS Step Functions 상태 시스템에 초기 입력 데이터를 제공할 수 있습니다. 실행을 시작할 때 데이터를 StartExecution
작업에 전달할 수 있습니다. Step Functions 콘솔StartAt
상태에 전달됩니다. 아무 입력도 제공되지 않으면 빈 객체({}
)가 기본값이 됩니다.
마지막 상태(terminal
)에 따라 실행의 출력이 반환됩니다. 이 출력은 실행 결과에 JSON 텍스트로 표시됩니다.
표준 워크플로의 경우 DescribeExecution
작업과 같은 외부 호출자를 사용하여 실행 내역에서 실행 결과를 검색할 수 있습니다. Step Functions 콘솔
Express Workflows의 경우 로깅을 활성화한 경우 CloudWatch 로그에서 결과를 검색하거나 Step Functions 콘솔에서 실행을 보고 디버깅할 수 있습니다. 자세한 내용은 CloudWatch 로그를 사용하여 Step Functions에서 실행 기록 로깅 및 Step Functions 콘솔에서 실행 세부 정보 보기 단원을 참조하세요.
상태 시스템과 관련된 할당량도 고려해야 합니다. 자세한 내용은 Step Functions 서비스 할당량 단원을 참조하세요.
상태 입/출력
각 상태의 입력은 이전 상태의 JSON 텍스트 또는 StartAt
상태의 경우 실행에 대한 입력으로 구성됩니다. 특정 흐름 제어 상태는 입력을 출력으로 그대로 보냅니다.
다음 예에서는 상태 머신이 두 개의 수를 함께 추가합니다.
-
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 }); }
-
상태 시스템을 정의합니다.
{ "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 } } }
-
다음 JSON 텍스트로 실행을 시작합니다.
{ "numbers": [3, 4] }
Add
상태는 JSON 텍스트를 수신하여 Lambda 함수로 전달합니다.Lambda 함수에서 계산 결과를 상태에 반환합니다.
상태가 출력에 다음 값을 반환합니다.
{ "result": 7 }
[
Add
] 또한 상태 머신의 마지막 상태이므로 이 값이 상태 머신의 출력으로 반환됩니다.마지막 상태에서 출력이 반환되지 않는 경우 상태 머신이 빈 객체(
{}
)를 반환합니다.
자세한 내용은 Step Functions에서 입력 및 출력 처리 단원을 참조하십시오.
다른 서비스 AWS Step Functions 에서 호출
상태 시스템을 간접적으로 호출하도록 다른 여러 서비스를 구성할 수 있습니다. 상태 시스템의 워크플로 유형에 따라 상태 시스템을 비동기적이나 동기적으로 간접 호출할 수 있습니다. 상태 시스템을 동기적으로 호출하려면 StartSyncExecution
API 호출 또는 Amazon API Gateway와 Express Workflows 통합을 사용합니다. 비동기 호출을 사용하면 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
이 사용될 수 있습니다.
자세한 내용은 다음 자료를 참조하세요.
-
UpdateStateMachine
AWS Step Functions API 참조의