Choice - AWS Step Functions

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

Choice

Choice 상태("Type": "Choice")는 조건부 논리를 상태 시스템에 추가합니다.

Choice 상태에는 대부분의 일반 상태 필드 외에도 다음과 같은 필드가 추가로 포함되어 있습니다.

Choices(필수)

상태 시스템이 다음으로 전환하는 상태를 결정하는 선택 규칙의 어레이. 선택 규칙의 비교 연산자를 사용하여 입력 변수를 특정 값과 비교할 수 있습니다. 예를 들어 선택 규칙을 사용하면 입력 변수가 100보다 큰지 또는 작은지 비교할 수 있습니다.

Choice 상태가 실행되면 각 선택 규칙을 true 또는 false로 평가합니다. 이 평가 결과에 따라 Step Functions는 워크플로의 다음 상태로 전환됩니다.

Choice 상태에 규칙을 최소 하나 이상 정의해야 합니다.

Default(선택 사항, 권장됨)

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

중요

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

작은 정보

Choice 상태를 사용하는 워크플로 예제를 AWS 계정에 배포하려면 AWS Step Functions 워크숍모듈 5 - 선택 상태 및 Map 상태를 참조하세요.

선택 규칙

Choice 상태에는 값이 비어 있지 않은 배열인 Choices 필드가 있어야 합니다. 이 배열의 각 요소는 선택 규칙이라는 객체이며, 이 객체에는 다음이 포함됩니다.

  • 비교값 - 비교할 입력 변수, 비교 유형 및 변수와 비교할 값을 지정하는 필드 2개. 선택 규칙에서는 두 변수를 비교할 수 있습니다. 선택 규칙 내에서 Path를 지원되는 비교 연산자 이름에 추가하여 변수 값을 상태 입력의 다른 값과 비교할 수 있습니다. 비교할 때 Variable 및 경로 필드의 값은 유효한 참조 경로여야 합니다.

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

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

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

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

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

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

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

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

{ "Variable": "$.possiblyNullValue", "IsNull": true }

다음 예제에서는 이전 IsPresent 선택 규칙으로 인해 $.keyThatMightNotExist가 존재하는 경우에만 StringEquals가 평가되는 방식을 보여줍니다.

"And": [ { "Variable": "$.keyThatMightNotExist", "IsPresent": true }, { "Variable": "$.keyThatMightNotExist", "StringEquals": "foo" } ]

다음은 와일드카드가 있는 패턴이 일치하는지 여부를 검사하는 예제입니다.

{ "Variable": "$.foo", "StringMatches": "log-*.txt" }

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

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

다음은 변수를 상태 입력의 다른 값과 비교하는 예제입니다.

{ "Variable": "$.foo", "StringEqualsPath": "$.bar" }

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

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

  • And

  • BooleanEquals,BooleanEqualsPath

  • IsBoolean

  • IsNull

  • IsNumeric

  • IsPresent

  • IsString

  • IsTimestamp

  • Not

  • NumericEquals,NumericEqualsPath

  • NumericGreaterThan,NumericGreaterThanPath

  • NumericGreaterThanEquals,NumericGreaterThanEqualsPath

  • NumericLessThan,NumericLessThanPath

  • NumericLessThanEquals,NumericLessThanEqualsPath

  • Or

  • StringEquals,StringEqualsPath

  • StringGreaterThan,StringGreaterThanPath

  • StringGreaterThanEquals,StringGreaterThanEqualsPath

  • StringLessThan,StringLessThanPath

  • StringLessThanEquals,StringLessThanEqualsPath

  • StringMatches

  • TimestampEquals,TimestampEqualsPath

  • TimestampGreaterThan,TimestampGreaterThanPath

  • TimestampGreaterThanEquals,TimestampGreaterThanEqualsPath

  • TimestampLessThan,TimestampLessThanPath

  • TimestampLessThanEquals,TimestampLessThanEqualsPath

이러한 연산자마다 해당 값이 적절한 유형(문자열, 숫자, 부울 또는 타임스탬프)이어야 합니다. 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 필드는 최상위 선택 규칙에만 표시될 수 있습니다.

StringMatches 비교 연산자를 사용하여 문자열을 와일드카드(“*”)가 하나 이상 있는 패턴과 비교할 수 있습니다. 와일드카드 문자는 \\ (Ex: “\\*”) 표준을 통해 이스케이프됩니다. 매칭 중에는 “*” 이외의 어떠한 문자도 특별한 의미를 갖지 않습니다.

Choice 상태 예제

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

참고

[$.type] 필드를 지정해야 합니다. 상태 입력에 $.type 필드가 들어 있지 않으면 실행이 실패하고 실행 기록에 오류가 표시됩니다. 리터럴 값과 일치하는 문자열만 StringEquals 필드에 지정할 수 있습니다. 예: "StringEquals": "Buy".

"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 상태가 지정되어 있지 않으면 오류가 표시되며 실행이 실패합니다.