AWS Step Functions
개발자 안내서

다양한 선택

Choice 상태("Type": "Choice")는 상태 시스템에 브랜치 논리를 추가합니다.

일반 상태 필드 외에, Choice 상태에는 다음 추가 필드가 있습니다.

Choices (필수)

상태 시스템이 다음으로 전환하는 상태를 결정하는 선택 규칙의 어레이.

Default(선택 사항, 권장됨)

Choices의 전환 중 하나도 수행되지 않는 경우 전환될 상태의 이름.

중요

Choice 상태는 End 필드를 지원하지 않습니다. 또한, NextChoices 필드 내에서만 사용됩니다.

다음은 전환될 Choice 상태 및 다른 상태의 예입니다.

참고

[$.type] 필드를 지정해야 합니다. 상태 입력에 $.type 필드가 들어 있지 않으면 실행이 실패하고 실행 기록에 오류가 표시됩니다.

"ChoiceStateX": { "Type": "Choice", "Choices": [ { "Not": { "Variable": "$.type", "StringEquals": "Private" }, "Next": "Public" }, { "Variable": "$.value", "NumericEquals": 0, "Next": "ValueIsZero" }, { "And": [ { "Variable": "$.value", "NumericGreaterThanEquals": 20 }, { "Variable": "$.value", "NumericLessThan": 30 } ], "Next": "ValueInTwenties" } ], "Default": "DefaultState" }, "Public": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Foo", "Next": "NextState" }, "ValueIsZero": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Zero", "Next": "NextState" }, "ValueInTwenties": { "Type" : "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Bar", "Next": "NextState" }, "DefaultState": { "Type": "Fail", "Cause": "No Matches!" }

이 예제에서 상태 시스템은 다음 입력 값으로 시작됩니다.

{ "type": "Private", "value": 22 }

Step Functions는 value 필드를 기반으로 ValueInTwenties 상태로 전환됩니다.

Choice 상태의 Choices에 일치하는 상태가 없으면 Default 필드에 제공된 상태가 대신 실행됩니다. Default 상태가 지정되어 있지 않으면 오류가 표시되며 실행이 실패합니다.

선택 규칙

Choice 상태에는 값이 비어 있지 않은 어레이이고 모든 요소가 선택 규칙이라는 객체인 Choices 필드가 있어야 합니다. 선택 규칙에는 다음 요소가 포함됩니다.

  • 비교값 – 비교할 입력 변수, 비교 유형 및 변수와 비교할 값을 지정하는 두 개의 필드.

  • Next 필드 – 이 필드 값은 상태 시스템의 상태 이름과 일치해야 합니다.

다음은 숫자 값이 1과 동일한지 여부를 검사하는 예제입니다.

{ "Variable": "$.foo", "NumericEquals": 1, "Next": "FirstMatchState" }

다음은 문자열이 MyString과 동일한지 여부를 검사하는 예제입니다.

{ "Variable": "$.foo", "StringEquals": "MyString", "Next": "FirstMatchState" }

다음은 문자열이 MyStringABC보다 큰 지 여부를 검사하는 예제입니다.

{ "Variable": "$.foo", "StringGreaterThan": "MyStringABC", "Next": "FirstMatchState" }

다음은 타임스탬프가 2001-01-01T12:00:00Z과 동일한지 여부를 검사하는 예제입니다.

{ "Variable": "$.foo", "TimestampEquals": "2001-01-01T12:00:00Z", "Next": "FirstMatchState" }

Step Functions는 Choices 필드에 나열된 순서대로 각 선택 규칙을 검사하고, 비교 연산자에 따라 변수가 값과 일치하는 첫 번째 선택 규칙의 Next 필드에 지정된 상태로 전환합니다.

다음 비교 연산자가 지원됩니다.

  • And

  • BooleanEquals

  • Not

  • NumericEquals

  • NumericGreaterThan

  • NumericGreaterThanEquals

  • NumericLessThan

  • NumericLessThanEquals

  • Or

  • StringEquals

  • StringGreaterThan

  • StringGreaterThanEquals

  • StringLessThan

  • StringLessThanEquals

  • TimestampEquals

  • TimestampGreaterThan

  • TimestampGreaterThanEquals

  • TimestampLessThan

  • TimestampLessThanEquals

이러한 연산자 각각에 대해, 해당하는 값이 적절한 유형이어야 합니다(문자열, 숫자, 부울 또는 타임스탬프). Step Functions는 숫자 필드가 문자열 값과 매치하도록 시도하지 않는다. 단, 타임스탬프 필드는 논리적으로 문자열이므로 타임스탬프로 간주되는 필드는 StringEquals 연산자와 연결될 수 있습니다.

참고

상호 운영성을 위해, IEEE 754-2008 binary64 데이터 유형에 표시되는 크기나 정밀도를 넘는 값을 사용하여 수 비교를 수행하지 마십시오. 특히, [-253+1, 253-1] 범위를 넘는 정수를 사용하면 예상되는 방식으로 비교가 수행되지 않을 수 있습니다.

타임스탬프(예: 2016-08-18T17:33:00Z)는 RFC3339 프로필 ISO 8601을 준수하되 다음과 같은 추가 제한도 따라야 합니다.

  • 대문자 T로 날짜와 시간 부분을 구분해야 합니다.

  • 대문자 Z로 숫자로 된 시간대 오프셋이 없음을 표기해야 합니다.

문자열 비교 동작을 이해하려면 Java compareTo 설명서를 참조하십시오.

AndOr 연산자는 비어 있지 않은 선택 규칙 어레이여야 하며 Next 필드를 자체적으로 포함하지 않아야 합니다. 마찬가지로, Not 연산자는 단일 선택 규칙이어야 하며 Next 필드를 포함하지 않아야 합니다.

And, NotOr를 사용하면 복잡한 중첩 선택 규칙을 생성할 수 있습니다. 단, Next 필드는 최상위 선택 규칙에만 표시될 수 있습니다.

이 페이지에서: