기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Step Functions의 JSONPath 상태에 대한 내장 함수
상태 관리 및 데이터 변환
Step Functions는 최근에 상태 및 변환 데이터를 관리하기 JSONata 위해 변수 및를 추가했습니다.
변수를 사용하여 데이터 전달 및 를 사용하여 데이터 변환에 JSONata대해 알아봅니다.
주의
내장 함수는 JSONPath 쿼리 언어를 사용하는 상태에서만 사용할 수 있습니다. JSONata의 경우 를 사용하여 Step FunctionsJSONata에서 데이터 변환 섹션을 참조하세요.
Amazon States Language는를 허용하는 필드에 사용할 수 있도록 내장 함수라고도 하는 여러 내장 함수를 제공합니다JSONPath. 내장을 사용하면 Task
상태를 사용하지 않고도 기본 데이터 처리 작업을 수행할 수 있습니다.
내장은 프로그래밍 언어의 함수와 비슷합니다. 이는 페이로드 빌더가 JSONPath 쿼리 언어를 사용하는 Task
상태의 Resource
필드로 송수신되는 데이터를 처리하는 데 사용할 수 있습니다.
Amazon States Language에서 내장 함수는 수행하려는 데이터 처리 작업의 유형에 따라 다음과 같은 범주로 그룹화됩니다.
내장 함수를 사용하려면 다음 예제.$
와 같이 상태 시스템 정의의 키 값에를 지정해야 합니다.
"KeyId.$": "States.Array
($.Id)"
워크플로의 필드 내에 내장 함수를 최대 10개까지 중첩할 수 있습니다. 다음 예제에서는 중첩된 내장 함수 9개가 포함된
이라고 하는 필드를 보여줍니다.myArn
"myArn.$
": "States.Format('{}.{}.{}', States.ArrayGetItem(States.StringSplit(States.ArrayGetItem(States.StringSplit($.ImageRecipe.Arn
, '/'), 2), '.'), 0), States.ArrayGetItem(States.StringSplit(States.ArrayGetItem(States.StringSplit($.ImageRecipe.Arn
, '/'), 2), '.'), 1))"
QueryLanguage 내장 함수에 필요
내장 함수를 사용하려면 상태 머신이 JSONPath 쿼리 언어를 사용해야 합니다.
를 사용하는 상태는 내장 함수를 사용할 JSONata 수 없지만, JSONata 및 Step Functions는 동등한 옵션을 제공합니다.
내장 함수를 지원하는 필드
다음 상태는 다음 필드에서 내장 함수를 지원합니다.
-
Pass 상태: Parameters
-
작업 상태: 파라미터, ResultSelector, 자격 증명
-
병렬 상태: 파라미터, ResultSelector
-
맵 상태: 파라미터, ResultSelector
배열의 내장 함수
배열을 조작할 때 다음 내장 함수를 사용하세요.
States.Array
-
States.Array
내장 함수는 인수를 0개 이상 사용합니다. 인터프리터는 인수 값이 포함된 JSON 배열을 제공된 순서대로 반환합니다. 다음 입력을 예로 들어보겠습니다.{ "Id": 123456 }
다음을 사용할 수 있습니다.
"BuildId.$": "States.Array($.Id)"
그러면
응답이 반환됩니다.
“BuildId”: [123456]
States.ArrayPartition
-
States.ArrayPartition
내장 함수를 사용하여 큰 배열을 분할할 수 있습니다. 이 내장 함수를 사용하여 데이터를 분할한 다음 작은 청크의 페이로드를 전송할 수도 있습니다.이 내장 함수에서는 인수 2개를 사용합니다. 첫 번째 인수는 배열이고 두 번째 인수는 청크 크기를 정의합니다. 인터프리터는 입력 배열을 청크 크기로 지정된 크기의 여러 배열로 청크합니다. 배열에 남아 있는 항목 수가 청크 크기보다 작으면 마지막 배열 청크 길이가 이전 배열 청크 길이보다 짧을 수 있습니다.
입력 검증
-
배열을 함수의 첫 번째 인수에 대한 입력 값으로 지정해야 합니다.
-
청크 크기 값을 나타내는 두 번째 인수에는 0이 아닌 양의 정수를 지정해야 합니다.
두 번째 인수에 정수가 아닌 값을 지정하면 Step Functions에서 가장 가까운 정수로 반올림합니다.
-
입력 배열은 Step Functions의 페이로드 크기 제한인 256KiB를 초과할 수 없습니다.
다음 입력 배열을 예로 들어보겠습니다.
{"inputArray": [1,2,3,4,5,6,7,8,9] }
States.ArrayPartition
함수를 사용하여 배열을 값이 4개인 청크로 나눌 수 있습니다."inputArray.$": "States.ArrayPartition($.inputArray,4)"
그러면 다음과 같은 배열 청크가 반환됩니다.
{"inputArray": [ [1,2,3,4], [5,6,7,8], [9]] }
이전 예제에서
States.ArrayPartition
함수는 배열 3개를 출력합니다. 처음 두 배열에는 청크 크기로 정의된 대로 각각 값 4개가 포함됩니다. 세 번째 배열은 나머지 값을 포함하며 정의된 청크 크기보다 작습니다. -
States.ArrayContains
-
States.ArrayContains
내장 함수를 사용하여 배열에 특정 값이 있는지 확인할 수 있습니다. 예를 들어 이 함수를 사용하여Map
상태 반복에 오류가 있었는지 여부를 감지할 수 있습니다.이 내장 함수에서는 인수 2개를 사용합니다. 첫 번째 인수는 배열이고, 두 번째 인수는 배열 내에서 검색할 값입니다.
입력 검증
-
배열을 함수의 첫 번째 인수에 대한 입력값으로 지정해야 합니다.
유효한 JSON 객체를 두 번째 인수로 지정해야 합니다.
-
입력 배열은 Step Functions의 페이로드 크기 제한인 256KiB를 초과할 수 없습니다.
다음 입력 배열을 예로 들어보겠습니다.
{ "inputArray": [1,2,3,4,5,6,7,8,9], "lookingFor": 5 }
States.ArrayContains
함수를 사용하여inputArray
내에서lookingFor
값을 찾을 수 있습니다."contains.$": "States.ArrayContains($.inputArray, $.lookingFor)"
lookingFor
에 저장된 값이inputArray
에 포함되므로States.ArrayContains
에서 다음과 같은 결과를 반환합니다.{"contains": true }
-
States.ArrayRange
-
States.ArrayRange
내장 함수를 사용하여 특정 범위의 요소를 포함하는 새 배열을 만들 수 있습니다. 새 배열에는 요소가 최대 1,000개까지 포함될 수 있습니다.이 함수는 인수 3개를 사용합니다. 첫 번째 인수는 새 배열의 첫 번째 요소이고 두 번째 인수는 새 배열의 마지막 요소입니다. 세 번째 인수는 새 배열의 요소 간 증분 값입니다.
입력 검증
-
모든 인수에 정수 값을 지정해야 합니다.
인수에 정수가 아닌 값을 지정하면 Step Functions에서 가장 가까운 정수로 반올림합니다.
-
세 번째 인수에는 0이 아닌 값을 지정해야 합니다.
-
새로 생성된 배열에는 항목이 1,000개 넘게 포함될 수 없습니다.
예를 들어 다음
States.ArrayRange
함수를 사용하여 첫 번째 값이 1이고 최종 값이 9이며 첫 번째 값과 최종 값 사이의 값이 각 항목에 대해 2씩 증가하는 배열을 만듭니다."array.$": "States.ArrayRange(1, 9, 2)"
그러면 다음과 같은 배열이 반환됩니다.
{"array": [1,3,5,7,9] }
-
States.ArrayGetItem
-
이 내장 함수는 지정된 인덱스 값을 반환합니다. 이 함수는 인수 2개를 사용합니다. 첫 번째 인수는 값의 배열이고 두 번째 인수는 반환할 값의 배열 인덱스입니다.
예를 들어 다음
inputArray
및index
값을 사용합니다.{ "inputArray": [1,2,3,4,5,6,7,8,9], "index": 5 }
States.ArrayGetItem
함수를 사용하여 다음 값에서 배열 내index
위치 5의 값을 반환할 수 있습니다."item.$": "States.ArrayGetItem($.inputArray, $.index)"
이 예제의 경우
States.ArrayGetItem
에서 다음 결과를 반환합니다.{ "item": 6 }
States.ArrayLength
-
States.ArrayLength
내장 함수는 배열 길이를 반환합니다. 여기에는 인수 하나가 있으며 이 인수는 길이를 반환할 배열입니다.다음 입력 배열을 예로 들어보겠습니다.
{ "inputArray": [1,2,3,4,5,6,7,8,9] }
States.ArrayLength
를 사용하여inputArray
길이를 반환할 수 있습니다."length.$": "States.ArrayLength($.inputArray)"
이 예제에서
States.ArrayLength
는 배열 길이를 나타내는 다음 JSON 객체를 반환합니다.{ "length": 9 }
States.ArrayUnique
-
States.ArrayUnique
내장 함수는 배열에서 중복된 값을 제거하고 고유한 요소만 포함하는 배열을 반환합니다. 이 함수는 정렬되지 않을 수 있는 배열을 유일한 인수로 사용합니다.예를 들어 다음
inputArray
에는 일련의 중복 값이 포함되어 있습니다.{"inputArray": [1,2,3,3,3,3,3,3,4] }
States.ArrayUnique
함수를 사용하고 중복된 값을 제거하려는 배열을 지정할 수 있습니다."array.$": "States.ArrayUnique($.inputArray)"
States.ArrayUnique
함수에서 고유한 요소만 포함되어 있는 다음 배열을 반환하고 모든 중복 값을 제거합니다.{"array": [1,2,3,4] }
데이터 인코딩 및 디코딩을 위한 내장 함수
다음 내장 함수를 사용하여 Base64 인코딩 체계를 기반으로 데이터를 인코딩하거나 디코딩할 수 있습니다.
States.Base64Encode
-
States.Base64Encode
내장 함수를 사용하여 MIME Base64 인코딩 체계를 기반으로 데이터를 인코딩합니다. 함수를 사용하지 않고이 함수를 사용하여 다른 AWS 서비스에 데이터를 전달할 수 있습니다 AWS Lambda .이 함수는 최대 10,000자의 데이터 문자열을 유일한 인수로 사용하여 인코딩합니다.
예를 들어 다음
input
문자열을 고려해보겠습니다.{"input": "Data to encode" }
States.Base64Encode
함수를 사용하여input
문자열을 MIME Base64 문자열로 인코딩할 수 있습니다."base64.$": "States.Base64Encode($.input)"
States.Base64Encode
함수에서 응답으로 다음 인코딩된 데이터를 반환합니다.{"base64": "RGF0YSB0byBlbmNvZGU=" }
States.Base64Decode
-
States.Base64Decode
내장 함수를 사용하여 MIME Base64 디코딩 체계를 기반으로 데이터를 디코딩합니다. Lambda 함수를 사용하지 않고이 함수를 사용하여 다른 AWS 서비스에 데이터를 전달할 수 있습니다.이 함수는 최대 10,000자의 Base64로 인코딩된 데이터 문자열을 유일한 인수로 사용하여 디코딩합니다.
다음 입력을 예로 들어보겠습니다.
{"base64": "RGF0YSB0byBlbmNvZGU=" }
States.Base64Decode
함수를 사용하여 base64 문자열을 인간이 읽을 수 있는 문자열로 디코딩할 수 있습니다."data.$": "States.Base64Decode($.base64)"
States.Base64Decode function
에서 응답으로 다음과 같은 디코딩된 데이터를 반환합니다.{"data": "Decoded data" }
해시 계산을 위한 내장 함수
States.Hash
-
States.Hash
내장 함수를 사용하여 지정된 입력의 해시 값을 계산할 수 있습니다. 이 함수를 사용하면 Lambda 함수를 사용하지 않고도 데이터를 다른 AWS 서비스에 전달할 수 있습니다.이 함수는 인수 2개를 사용합니다. 첫 번째 인수는 해시 값을 계산하려는 데이터입니다. 두 번째 인수는 해시 계산을 수행하는 데 사용할 해싱 알고리즘입니다. 제공하는 데이터는 10,000자 이하의 객체 문자열이어야 합니다.
지정하는 해싱 알고리즘은 다음 알고리즘 중 하나일 수 있습니다.
-
MD5
-
SHA-1
-
SHA-256
-
SHA-384
-
SHA-512
예를 들어 이 함수를 사용하면 지정된
Algorithm
를 사용해Data
문자열의 해시 값을 계산할 수 있습니다.{ "Data": "input data", "Algorithm": "SHA-1" }
States.Hash
함수를 사용하여 해시 값을 계산할 수 있습니다."output.$": "States.Hash($.Data, $.Algorithm)"
States.Hash
함수에서 응답으로 다음 해시 값을 반환합니다.{"output": "aaff4a450a104cd177d28d18d7485e8cae074b7" }
-
JSON 데이터 조작을 위한 본질
이러한 함수를 사용하여 JSON 객체에 대한 기본 데이터 처리 작업을 수행합니다.
States.JsonMerge
-
States.JsonMerge
내장 함수를 사용하여 두 JSON 객체를 단일 객체로 병합합니다. 이 함수는 인수 3개를 사용합니다. 처음 두 인수는 병합하려는 JSON 객체입니다. 세 번째 인수는false
의 부울 값입니다. 이 부울 값은 심층 병합 모드가 활성화되어 있는지 여부를 결정합니다.현재 Step Functions는 단순 병합 모드만 지원합니다. 따라서 부울 값을
false
로 지정해야 합니다. 얕은 모드에서 두 JSON 객체에 동일한 키가 있는 경우 후자의 객체 키는 첫 번째 객체에서 동일한 키를 재정의합니다. 또한 객체 내에 중첩된 JSON 객체는 얕은 병합을 사용할 때 병합되지 않습니다.예를 들어
States.JsonMerge
함수를 사용하여 키를 공유하는 다음 JSON 객체를 병합할 수 있습니다a
.{ "json1": { "a": {"a1": 1, "a2": 2}, "b": 2 }, "json2": { "a": {"a3": 1, "a4": 2}, "c": 3 } }
json1 및 json2 객체를
States.JsonMerge
함수의 입력으로 지정하여 병합할 수 있습니다."output.$": "States.JsonMerge($.json1, $.json2, false)"
는 다음과 같은 병합된 JSON 객체를 결과로
States.JsonMerge
반환합니다. 병합된 JSON 객체에서json2
객체의 키output
가json1
객체의 키를a
대체합니다a
. 또한 단순 모드에서는 중첩된 객체 병합을 지원하지 않으므로json1
객체의a
키에 있는 중첩된 객체는 삭제됩니다.{ "output": { "a": {"a3": 1, "a4": 2}, "b": 2, "c": 3 } }
-
States.StringToJson
-
States.StringToJson
함수는 이스케이프된 JSON 문자열에 대한 참조 경로를 유일한 인수로 사용합니다.인터프리터는 JSON 구문 분석기를 적용하고 입력의 구문 분석된 JSON 양식을 반환합니다. 예를 들어 이 함수를 사용하여 다음 입력 문자열을 이스케이프 처리할 수 있습니다.
{ "escapedJsonString": "{\"foo\": \"bar\"}" }
States.StringToJson
함수를 사용하고escapedJsonString
을 입력 인수로 지정합니다.States.StringToJson($.escapedJsonString)
States.StringToJson
함수에서 다음과 같은 결과를 반환합니다.{ "foo": "bar" }
-
States.JsonToString
-
States.JsonToString
함수는 하나의 인수만 사용합니다.이 인수는 이스케이프되지 않은 문자열로 반환할 JSON 데이터가 포함된 경로입니다. 인터프리터는 경로에서 지정한 데이터를 나타내는 JSON 텍스트가 포함된 문자열을 반환합니다. 예를 들어 이스케이프된 값이 포함된 다음 JSON 경로를 제공할 수 있습니다.{ "unescapedJson": { "foo": "bar" } }
unescapedJson
내에 포함된 데이터와 함께States.JsonToString
함수를 제공합니다.States.JsonToString($.unescapedJson)
States.JsonToString
함수에서 다음 응답을 반환합니다.{\"foo\": \"bar\"}
수학 연산을 위한 내장 함수
다음 함수를 사용하여 수학 연산을 수행할 수 있습니다.
States.MathRandom
-
States.MathRandom
내장 함수를 사용하여 지정된 시작 번호(포함)와 끝 번호(제외) 사이의 난수를 반환할 수 있습니다.이 함수를 사용하여 특정 작업을 리소스 2개 사이에서 분산할 수 있습니다.
이 함수는 인수 3개를 사용합니다. 첫 번째 인수는 시작 번호이고, 두 번째 인수는 종료 번호이며, 마지막 인수는 선택적 시드 값을 제어합니다. 이 함수를 동일한 시드 값으로 사용하는 경우 동일한 숫자를 반환합니다.
중요
States.MathRandom
함수에서 암호로 보호되는 난수를 반환하지 않으므로 보안에 민감한 애플리케이션에는 사용하지 않는 것이 좋습니다.입력 검증
-
시작 번호 인수와 끝 번호 인수에 정수 값을 지정해야 합니다.
시작 번호 또는 끝 번호 인수에 정수가 아닌 값을 지정하면 Step Functions에서 가장 가까운 정수로 반올림합니다.
예를 들어 1~999 사이의 난수를 생성하려면 다음 입력값을 사용하면 됩니다.
{ "start": 1, "end": 999 }
난수를 생성하려면
start
및end
값을States.MathRandom
함수에 제공합니다."random.$": "States.MathRandom($.start, $.end)"
States.MathRandom
함수에서 응답으로 다음 난수를 반환합니다.{"random": 456 }
-
States.MathAdd
-
States.MathAdd
내장 함수를 사용하여 두 숫자의 합을 반환할 수 있습니다. 예를 들어 이 함수를 사용하여 Lambda 함수를 호출하지 않고도 루프 내에서 값을 증가시킬 수 있습니다.입력 검증
-
모든 인수에 정수 값을 지정해야 합니다.
인수 하나 또는 둘 다에 정수가 아닌 값을 지정하면 Step Functions에서 가장 가까운 정수로 반올림합니다.
-
-2147483648~2147483647 범위의 정수 값을 지정해야 합니다.
예를 들어 다음 값을 사용하여 111에서 1을 뺄 수 있습니다.
{ "value1": 111, "step": -1 }
그런 다음,
States.MathAdd
함수를 사용하여value1
을 시작 값으로,step
을value1
씩 증가할 값으로 정의합니다."value1.$": "States.MathAdd($.value1, $.step)"
States.MathAdd
함수에서 응답으로 다음 수를 반환합니다.{"value1": 110 }
-
문자열 작업을 위한 내장 연산
States.StringSplit
-
States.StringSplit
함수를 사용하여 문자열을 값 배열로 분할할 수 있습니다. 이 함수는 인수 2개를 사용합니다. 첫 번째 인수는 문자열이고 두 번째 인수는 함수에서 문자열을 나누는 데 사용할 구분 문자입니다.예 - 단일 구분 문자를 사용하여 입력 문자열 분할
이 예제에서는
States.StringSplit
을 사용하여 쉼표로 구분된 일련의 값이 포함된 다음inputString
을 나눕니다.{ "inputString": "1,2,3,4,5", "splitter": "," }
States.StringSplit
함수를 사용하여inputString
을 첫 번째 인수로, 구분 문자splitter
를 두 번째 인수로 정의합니다."array.$": "States.StringSplit($.inputString, $.splitter)"
States.StringSplit
함수에서 결과로 다음 문자열 배열을 반환합니다.{"array": ["1","2","3","4","5"] }
예 - 여러 구분 문자를 사용하여 입력 문자열 분할
이 예제에서는
States.StringSplit
을 사용하여 여러 구분 문자가 포함된 다음inputString
을 나눕니다.{ "inputString": "This.is+a,test=string", "splitter": ".+,=" }
States.StringSplit
함수를 다음과 같이 사용합니다.{ "myStringArray.$": "States.StringSplit($.inputString, $.splitter)" }
States.StringSplit
함수에서 결과로 다음 문자열 배열을 반환합니다.{"myStringArray": [ "This", "is", "a", "test", "string" ]}
고유 식별자 생성을 위한 내장 함수
States.UUID
-
States.UUID
내장 함수를 사용하여 난수를 사용하여 생성된 버전 4 범용 고유 식별자(v4 UUID)를 반환합니다. 예를 들어이 함수를 사용하여 UUID 파라미터가 필요한 다른 AWS 서비스 또는 리소스를 호출하거나 DynamoDB 테이블에 항목을 삽입할 수 있습니다.States.UUID
함수는 지정된 인수 없이 호출됩니다."uuid.$": "States.UUID()"
함수는 다음 예제와 UUID같이 무작위로 생성된를 반환합니다.
{"uuid": "ca4c1140-dcc1-40cd-ad05-7b4aa23df4a8" }
일반 연산을 위한 내장 함수
States.Format
-
States.Format
내장 함수를 사용하여 리터럴 값과 보간 값 모두에서 문자열을 구성할 수 있습니다. 이 함수는 인수를 하나 이상 사용합니다. 첫 번째 인수 값은 문자열이어야 하며 0개 이상의 문자 시퀀스{}
인스턴스를 포함할 수 있습니다. 내장 함수 간접 호출에 남아 있는 인수는{}
발생 횟수만큼 많아야 합니다. 인터프리터는 첫 번째 인수에 정의된 문자열을 반환합니다. 이 때 각{}
는 내장 간접 호출에서 위치적으로 해당하는 인수의 값으로 대체됩니다.예를 들어 다음과 같은 개별
name
및template
문장의 입력 값을 사용하여 이름을 삽입할 수 있습니다.{ "name": "Arnav", "template": "Hello, my name is {}." }
States.Format
함수를 사용하여template
문자열과{}
문자 대신 삽입할 문자열을 지정합니다.States.Format('Hello, my name is {}.', $.name)
or
States.Format($.template, $.name)
States.Format
함수는 이전 입력 중 하나를 사용하여 응답으로 완성된 문자열을 반환합니다.Hello, my name is Arnav.
내장 함수에 예약된 문자
'{} 및 \ 문자는 내장 함수용으로 예약되어 있으며 값에 이러한 문자를 표시하려면 백슬래시('\')로 이스케이프 처리해야 합니다.
\
문자가 이스케이프 문자로 제공되지 않고 값의 일부로 표시되어야 하는 경우에는 백슬래시로 문자를 이스케이프 처리해야 합니다. 내장 함수에서는 다음과 같은 이스케이프 처리된 문자 시퀀스가 사용됩니다.
리터럴 문자열
\'
은'
를 나타냅니다.리터럴 문자열
\{
은{
를 나타냅니다.리터럴 문자열
\}
은}
를 나타냅니다.리터럴 문자열
\\
은\
를 나타냅니다.
에서 문자열 리터럴 값에 포함된 JSON백슬래시는 다른 백슬래시로 이스케이프되어야 합니다. 에 해당하는 목록은 다음과 JSON 같습니다.
-
이스케이프 처리된 문자열
\\\'
은\'
를 나타냅니다. -
이스케이프 처리된 문자열
\\\{
은\{
를 나타냅니다. -
이스케이프 처리된 문자열
\\\}
은\}
를 나타냅니다. -
이스케이프 처리된 문자열
\\\\
은\\
를 나타냅니다.
참고
내장 간접 호출 문자열에서 열린 이스케이프 백슬래시 \
가 발견되면 인터프리터는 런타임 오류를 반환합니다.
필드 이름에 JsonPath ABNFmember-name-shorthand
정의에 포함되지 않은 문자가 포함되어 있는 경우 내부 함수에 인수로 전달되는 경로에 대괄호 표기법을 사용해야 합니다. Path에 영숫자가 아닌 문자가 포함되어 있는 경우, _
외에도 대괄호 표기법을 사용해야 합니다. 예: $.abc.['def ghi']
.