병렬 워크플로 상태 - AWS Step Functions

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

병렬 워크플로 상태

Parallel 상태("Type": "Parallel")를 사용하여 별도의 실행 브랜치를 상태 시스템에 추가할 수 있습니다.

Parallel 상태에는 일반 상태 필드 외에도 다음 추가 필드가 포함됩니다.

Branches(필수)

병렬로 실행할 상태 시스템을 지정하는 객체 어레이. 이러한 각 상태 시스템 객체에는 StatesStartAt이라는 필드가 들어 있습니다. 이러한 필드의 의미는 상태 시스템의 최상위에 있는 필드와 동일합니다.

ResultPath(선택 사항)

브랜치의 출력을 배치할 위치(입력에서)를 지정합니다. 그러면 OutputPath 필드(있는 경우)에 지정된 대로 입력이 필터링된 후 상태의 출력으로 사용됩니다. 자세한 내용은 입/출력 처리를 참조하십시오.

ResultSelector(선택 사항)

키 값 페어 컬렉션을 전달합니다. 여기서 값은 정적이거나 결과에서 선택됩니다. 자세한 내용은 ResultSelector 단원을 참조하십시오.

Retry(선택 사항)

상태에 런타임 오류가 발생하는 경우 사용될 재시도 정책을 정의하는 Retriers라는 객체 어레이. 자세한 내용은 Retry 및 Catch를 사용하는 상태 시스템 예제 단원을 참조하십시오.

Catch(선택 사항)

상태에 런타임 오류가 발생하고 해당 재시도 정책이 소진되었거나 정의되지 않은 경우 실행되는 폴백 상태를 정의하는 Catcher라는 객체 배열. 자세한 내용은 폴백 상태를 참조하십시오.

Parallel상태는 AWS Step Functions 해당 브랜치의 StartAt 필드에 이름이 지정된 상태에서 시작하여 각 브랜치를 최대한 동시에 실행하고 모든 브랜치가 종료 (최종 상태에 도달) 될 때까지 기다렸다가 Parallel 상태 Next 필드를 처리합니다.

Parallel 상태 예제

{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:PhoneFinder", "End": true } } } ] } } }

이 예제에서는 LookupAddressLookupPhone 브랜치가 병렬로 실행됩니다. 다음은 워크플로가 Step Functions 콘솔에서 어떻게 표시되는지를 보여줍니다.

예제 Parallel 워크플로의 시각적 그래프.

각 브랜치는 독립적이어야 합니다. Parallel 상태의 한 브랜치에 있는 상태에는 해당 브랜치의 외부 필드를 대상으로 하는 Next 필드가 있을 수 없으며 해당 브랜치로의 브랜치 전환 외부의 다른 상태도 있을 수 없습니다.

Parallel 상태의 입/출력 처리

Parallel 상태는 각 브랜치에 자체 입력 데이터의 사본을 제공합니다(InputPath 필드의 수정 작업에 따라 달라질 수 있음). 이 상태는 해당 브랜치의 출력을 포함하는 각 브랜치의 요소 하나가 있는 배열인 출력을 생성합니다. 모든 요소의 형식이 동일해야 하지는 않습니다. 일반적인 방법으로 ResultPath 필드를 사용하여 출력 배열을 입력 데이터에 삽입할 수 있습니다(전체는 Parallel 상태 출력으로 전송됨, 입/출력 처리 참조).

{ "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": { "FunWithMath": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Add", "States": { "Add": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:Subtract", "End": true } } } ] } } }

FunWithMath 상태에서 어레이 [3, 2]를 입력으로 제공한 경우, AddSubtract 상태는 모두 입력으로 해당 어레이를 받습니다. AddSubtract 작업의 출력은 배열 요소 3과 2의 합계와 차이(즉, 51)인 반면 Parallel 상태 출력은 배열입니다.

[ 5, 1 ]
작은 정보

상태 시스템에서 사용하는 Parallel 또는 Map 상태가 배열을 반환하는 경우 ResultSelector 필드를 사용하여 배열을 평면 배열로 변환할 수 있습니다. 자세한 내용은 배열의 배열 평면화 단원을 참조하십시오.

오류 처리

오류가 처리되지 않거나 Fail 상태로 전환되는 등의 이유로 브랜치에 오류가 발생하면 전체 Parallel 상태가 오류 발생으로 간주되고 모든 브랜치가 중지됩니다. Parallel 상태 자체에서 오류를 처리하지 않으면 Step Functions가 실행을 중지하고 오류를 표시합니다.

참고

병렬 상태가 무너지면 간접적으로 호출된 Lambda 함수가 계속 실행되며 작업 토큰을 실행하는 활동 작업자는 중지되지 않습니다.

  • 장시간 실행되는 활동을 중지하려면 하트비트를 사용하여 Step Functions에서 브랜치를 중지했는지 확인하고 작업을 실행하고 있는 작업자를 중지하세요. 상태가 실패한 경우 SendTaskHeartbeat, SendTaskSuccess 또는 SendTaskFailure를 호출하면 오류가 뱔생합니다. 하트비트 오류를 참조하십시오.

  • 실행 중인 Lambda 함수를 중지할 수 없습니다. 대비책을 구현했으면 Lambda 함수가 완료된 후 정리 작업이 실행되도록 Wait 상태를 사용하세요.