Amazon Web Services 한국 블로그
AWS Step Functions – Amazon States Languages 기능 업데이트 (서울 리전 포함)
AWS Step Functions를 사용하여 AWS Lambda, AWS Fargate, Amazon SageMaker 등의 서비스를 풍부한 애플리케이션에 연결하는 워크플로를 설계하고 실행할 수 있습니다. 워크플로는 연속적인 단계로 구성되는데, 한 단계의 출력이 다음 단계의 입력이 되는 구조입니다. AWS Step Functions를 사용하면 애플리케이션 개발이 더욱 직관적으로 되며, 개발자들은 AWS Lambda 함수와 같은 연속적 함수나 상태를 저장하지 않는 상태들의 집합으로 개발된 컨테이너의 함수로 각 애플리케이션을 구성할 수 있습니다.
오늘은 Amazon States Language(ASL) 업데이트로 AWS Step Functions가 개선되었다는 소식을 알려드립니다. ASL은 JSON 기반 구조화 언어로, 상태 머신과 작업을 수행할 수 있는 상태 컬렉션을 정의하고(작업 상태), 어느 상태를 다음 상태로 전환할지 결정하며(선택 상태), 오류 발생 시 실행을 정지합니다(실패 상태). 오늘 업데이트를 통해 고객들은 단순화된 워크플로 애플리케이션을 개발하고, 상태 머신 정의 내에서 유연성을 높이며, lambda 호출과 상태 전환을 줄여 비용을 절약할 수 있습니다.
AWS Step Functions 관리 콘솔에 액세스하면 정의 단계에서 새로운 코드 조각을 확인할 수 있습니다.
선택 상태 업데이트
기본적으로 선택 상태는 분기 로직을 상태 머신에 추가합니다. 이번 업데이트는 몇 가지 새로운 연산자를 추가하고, 연산자가 기존의 정의를 단순화하거나 상태 머신 정의에 동적 동작을 추가할 수 있는 추가적 선택권을 제공합니다.
- 비교 연산자 – 아래 값에 대한 테스트 지원
IsNull – null
IsString – 문자열
IsNumeric – 숫자
IsBoolean – 부울
IsTimestamp – timestamp
{
"Variable": "$.foo",
"IsNull|IsString|IsNumeric|IsBoolean|IsTimestamp": true|false
} - 존재 테스트 – 특정 필드의 존재 여부에 대한 테스트 지원.
{
"Variable": "$.foo",
"IsPresent": true|false
}
- 와일드카드 – 셸 “glob” 스타일 와일드카드를 지원하여 고객들이 log-*.txt 또는 *LATEST*에 대한 테스트 가능.
{
"Variable": "$.foo",
"StringMatches": "log-*.txt"
} - 변수 간 비교 – 입력 필드와 다른 입력 필드 비교 가능. 현재 선택 상태에서는 고정값과 비교할 수 있습니다.
{
"Variable": "$.foo",
"StringEqualsPath": "$.bar"
}
컨텍스트 객체에 대한 전역 액세스
이전에는 파라미터 블록에서만 컨텍스트 객체에 액세스할 수 있었지만 이번 업데이트로 제한이 해제되어 파라미터 블록 밖에서도 유연하게 컨텍스트 객체를 참조할 수 있게 되었습니다. ASL이 JSON 참조 경로를 허용할 경우에는 항상 컨텍스트 객체에 액세스할 수 있습니다. 따라서 다음의 필드에서 컨텍스트 객체에 액세스할 수 있게 됩니다.
- InputPath
- OutputPath
- ItemsPath(맵 상태)
- Variable(선택 상태)
- ResultSelector
- 변수 간 비교 연산자
컨텍스트 객체에 대한 전역 액세스로 인해 기존의 설명이 얼마나 간단해졌는지 보여주는 예시는 다음과 같습니다.
동적 시간 초과
ASL은 이번 업데이트 전에는 두 개의 시간 초과 파라미터, 즉 “TimeoutSeconds”와 “HeartbeatSeconds”를 선택적으로 지원했습니다. “TimeoutSeconds”는 작업이 지정된 시간(초)보다 길게 실행되면 오류를 반환하고 “HeartbeatSeconds”는 작업의 하트비트 간격이 지정된 시간(초)보다 길어지면 오류를 반환합니다. 어떤 애플리케이션에서는 시간에 따라 이 파라미터들이 동적으로 변동하도록 설정하기를 원합니다. 이제 새로운 파라미터인 “TimeoutSecondsPath”와 “HeartBeatSecondsPath”를 사용하면 그러한 설정이 가능합니다.
{
"Type": "Task",
"Resource": "arn:aws:states:::glue:startJobRun.sync",
"Parameters": {
"JobName": "GlueJob-JTrRO5l98qMG"
},
"TimeoutSecondsPath": "$.params.maxTime",
"HeartbeatSecondsPath": "$.params.heartBeat"
}
결과 선택기
실행 결과에는 페이로드와 함께 메타데이터가 포함될 수 있습니다. 예를 들어 lambda 함수를 호출하는 작업 상태는 페이로드를 반환하지만 일부 서비스 통합 프레임워크를 통한 호출은 경로 상태를 사용하여 페이로드를 반환하기 때문에 고객에게 필요한 메타데이터가 다시 필터링될 수 있습니다. 이전에는 메타데이터가 필요하지 않으면 다른 상태를 사용하여 조정해야 했습니다. 이 새로운 기능을 사용하면 그럴 필요가 없어서 페이로드 크기를 줄일 수 있습니다. 파라미터 스타일 객체를 추가하여 고객이 작업 상태 출력을 필터링하고 관심 있는 필더를 결과 경로에 전달하도록 도울 수 있습니다.
{
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
"Parameters": {
...
},
"ResultSelector": {
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
},
"ResultPath": "$.EMRoutput"
}
문자열 구성
이번 업데이트로 입력 값을 보완하고문자열을 연결할 수 있게 되었습니다. 또한, 문자열 구성기를 추가하면 고객이 입력에서 필드 값을구축할 수 있습니다.
{
"Parameters": {
"foo.$": "States.Format('Hello, {} {}', $.firstName, $.lastName)"
}
}
허용 가능한 데이터 유형으로만 문자열을 사용할 수 있습니다.
JSON의 문자열 변환 및 StringToJSON
고객이 입력값을 DynamoDB에 제출하면 객체 내에서 객체를 문자열로 변환할 방법이 없어서 JSON 객체를 직접 제출하지 못하고 Lambda 함수를 사용해야 했습니다. 이번 업데이트로 객체 내에서 JSON을 문자열로 직접 변환할 수 있게 되었습니다.
{
"Type": "Task",
"Resource": "arn:aws:states:::some.future.integration:run.sync",
"Parameters": {
"FieldThatNeedsToBeAString.$": "States.JsonToString($.JSONInputField)",
}
}
이 기능은 다른 방식으로도 작동하는데, 고객이 외부 Lambda 함수를 호출하지 않고도 문자열을 JSON으로 변환할 수 있습니다.
{
"Type": "Task",
"Resource": "arn:aws:states:::some.future.integration:run.sync",
"Parameters": {
"FieldThatNeedsToBeJSON.$": "States.stringToJson($.EscapedInputField)"
}
}
상태 배열
이제 상태를 배열로 설정하여 동일한 정의에 속한 여러 상태를 처리할 수 있습니다.
"X": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloWorld",
"Parameters": {
"PayloadString.$": "States.Format('[[{}]]', States.JsonToString($.in.summary))",
"CmdLine.$": "States.Array('--maxp', $.params.maxpr, '--minp', $.params.minpr)",
"ControlBlock.$": "States.StringToJson($.output.control)"
},
"Next": "AllDone"
}
지금 이용 가능
이번 업데이트는 오늘부터 중국 리전을 제외하고 AWS Step Functions를 사용할 수 있는 모든 AWS 리전에 제공됩니다. 자세한 내용은 설명서를 참조하세요.
– Kame;