AWS Step Functions
개발자 안내서

Parallel

Parallel 상태("Type": "Parallel")를 사용하면 상태 시스템에 병렬 실행 브랜치를 생성할 수 있습니다.

Parallel 상태에는 일반 상태 필드 외에 다음 추가 필드가 있을 수 있습니다.

Branches (필수)

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

ResultPath (선택)

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

Retry (선택)

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

Catch (선택)

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

Parallel 상태는 AWS Step Functions이 각 브랜치가 가능한 동시에 실행되도록 하는데, 해당 브랜치의 StartAt 필드에서 이름이 지정된 상태부터 시작해 모든 브랜치가 종료(터미널 상태 도달)될 때까지 기다린 후 Parallel 상태의 Next 필드를 처리합니다.

예를 들면, 다음과 같습니다.

{ "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 상태의 한 브랜치에 있는 상태에는 해당 브랜치의 외부 필드를 대상으로 하는 Next 필드가 있을 수 없으며 해당 브랜치로의 브랜치 전환 외부의 다른 상태도 있을 수 없습니다.

병렬 상태 출력

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:swf:us-east-1:123456789012:task:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:swf:us-east-1:123456789012:task:Subtract", "End": true } } } ] } } }

FunWithMath 상태에서 어레이 [3, 2]를 입력으로 제공한 경우, AddSubtract 상태는 모두 입력으로 해당 어레이를 받습니다. Add의 출력은 5가 되고, Subtract의 출력은 1이 되며, Parallel 상태의 출력은 배열이 됩니다.

[ 5, 1 ]

오류 처리

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

참고

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

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

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

이 페이지에서: