Task 워크플로 상태 - AWS Step Functions

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

Task 워크플로 상태

상태 관리 및 데이터 변환

Step Functions는 최근에 상태 및 변환 데이터를 관리하기 JSONata 위해 변수 및를 추가했습니다.

변수를 사용하여 데이터 전달를 사용하여 데이터 변환에 JSONata대해 알아봅니다.

Task 상태("Type": "Task")는 상태 머신에 의해 수행되는 하나의 작업 단위를 나타냅니다. 작업은 활동 또는 AWS Lambda 함수를 사용하거나, 지원되는 AWS 서비스 다른와 통합하거나API, Stripe과 같은 HTTPS를 호출하여 작업을 수행합니다.

Amazon States Language는 상태 유형을 로 설정하고 작업에 활동, Lambda 함수 또는 HTTPS API 엔드포인트의 Amazon 리소스 이름(ARN)을 Task 제공하여 작업을 나타냅니다.

JSONata 인수를 사용하여 함수 호출

다음 태스크 상태 정의(JSONata)는 라는 Lambda 함수를 호출합니다priceWatcher.

표현JSONata식을 사용하여 인수에 사용할 입력 데이터를 쿼리하고 할당 필드에 작업 결과를 기록합니다.

"Get Current Price": { "Type": "Task", "QueryLanguage" : "JSONata", "Resource": "arn:aws:states:::lambda:invoke", "Next": "Check Price", "Arguments": { "Payload": { "product": "{% $states.context.Execution.Input.product %}" }, "FunctionName": "arn:aws:lambda:<region>:123456789012:function:priceWatcher:$LATEST" }, "Assign": { "currentPrice": "{% $states.result.Payload.current_price %}" } }

JSONPath 파라미터를 사용하여 함수 호출

다음 태스크 상태 정의(JSONPath)는 라는 Lambda 함수를 호출합니다HelloFunction.

"Lambda Invoke": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:HelloFunction:$LATEST" }, "End": true }

Task 유형

Step Functions는 Task 상태 정의에 지정할 수 있는 다음 작업 유형을 지원합니다.

태스크 상태 정의의 ARN Resource 필드에 태스크 유형을 제공하여 태스크 유형을 지정합니다. 다음 예제에서는 Resource 필드 구문을 보여줍니다. 를 호출하는를 제외한 모든 태스크 유형은 다음 구문을 HTTPS API사용합니다. HTTP 태스크의 구문에 대한 자세한 내용은 섹션을 참조하세요Step FunctionsHTTPSAPIs에서 호출 워크플로.

작업 상태 정의에서 다음 구문의 기울임꼴 텍스트를 AWS 리소스별 정보로 바꿉니다.

arn:partition:service:region:account:task_type:name

다음 목록에서는 이 구문의 개별 구성 요소를 설명합니다.

  • partition는 사용할 AWS Step Functions 파티션으로, 가장 일반적으로 입니다aws.

  • service는 작업을 실행하는 데 AWS 서비스 사용되는를 나타내며 다음 값 중 하나일 수 있습니다.

    • 활동용 states

    • Lambda 함수lambda. Amazon SNS 또는 Amazon DynamoDB AWS 서비스와 같은 다른와 통합하는 경우 sns 또는를 사용합니다dynamodb.

  • region는 Step Functions 활동 또는 상태 시스템 유형, Lambda 함수 또는 기타 AWS 리소스가 생성된 AWS 리전 코드입니다.

  • account는 리소스를 정의한 AWS 계정 ID입니다.

  • task_type은 실행할 작업 유형입니다. 다음 값 중 하나일 수 있습니다.

  • name는 등록된 리소스 이름(활동 이름, Lambda 함수 이름 또는 서비스 API 작업)입니다.

참고

Step Functions는 파티션 또는 리전 ARNs 간 참조를 지원하지 않습니다. 예를 들어 aws-cnaws 파티션에서 작업을 간접적으로 호출할 수 없으며 그 반대의 경우에는 마찬가지입니다.

다음 단원에서는 각 작업 유형에 대한 자세한 내용이 제공됩니다.

활동

활동은 사용자가 구현하고 호스팅하며 특정 작업을 수행하는 작업자(프로세스나 스레드)를 나타냅니다. 이러한 활동은 표준 워크플로에서만 지원되며 Express 워크플로에서는 지원되지 않습니다.

활동은 다음 구문을 Resource ARNs 사용합니다.

arn:partition:states:region:account:activity:name
참고

Step Functions를 처음 사용하기 전에 Step Functions를 사용하여 활동(, CreateActivity API 작업 또는 Step Functions 콘솔 사용)을 생성해야 합니다.

활동 생성 및 작업자 구현에 대한 자세한 내용은 활동을 참조하십시오.

Lambda 함수

Lambda 태스크는를 사용하여 함수를 실행합니다 AWS Lambda. Lambda 함수를 지정하려면 Resource 필드에서 Lambda 함수ARN의를 사용합니다.

Lambda 함수를 지정하는 데 사용하는 통합 유형(최적화된 통합 또는 AWS SDK 통합)에 따라 Lambda 함수 Resource 필드의 구문이 달라집니다.

다음 Resource 필드 구문은 Lambda 함수와 최적화된 통합의 예제입니다.

"arn:aws:states:::lambda:invoke"

다음 Resource 필드 구문은 Lambda 함수와의 통합의 AWS SDK 예입니다.

"arn:aws:states:::aws-sdk:lambda:invoke"

다음 Task 상태 정의에서는 HelloWorld라는 Lambda 함수와 최적화된 통합의 예제를 보여줍니다.

"LambdaState": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "OutputPath": "$.Payload", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-1:function:HelloWorld:$LATEST" }, "Next": "NextState" }

Resource 필드에 지정된 Lambda 함수가 완료되면 해당 출력이 Next 필드에 식별된 상태('NextState')로 전송됩니다.

지원되는 AWS 서비스

연결된 리소스를 참조할 때 Step Functions는 지원되는 서비스의 API 작업을 직접 호출합니다. Resource 필드에서 서비스와 작업을 지정합니다.

연결된 서비스는 다음 구문을 Resource ARNs 사용합니다.

arn:partition:states:region:account:servicename:APIname
참고

연결된 리소스에 대한 동기 연결을 생성하려면 .syncAPIname 항목에를 추가합니다ARN. 자세한 내용은 서비스 통합 단원을 참조하십시오.

예시:

{ "StartAt": "BATCH_JOB", "States": { "BATCH_JOB": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "preprocessing", "JobName": "PreprocessingBatchJob", "JobQueue": "SecondaryQueue", "Parameters.$": "$.batchjob.parameters", "RetryStrategy": { "attempts": 5 } }, "End": true } } }

Task 상태 필드

Task 상태에서는 일반 상태 필드 외에도 다음 필드가 있습니다.

Resource(필수)

URI, 특히 실행할 특정 작업을 ARN 고유하게 식별하는 .

Arguments (선택 사항, JSONata 전용)

연결된 리소스의 API 작업에 정보를 전달하는 데 사용됩니다. 값에는 JSONata 표현식이 포함될 수 있습니다. 자세한 내용은 를 사용하여 Step FunctionsJSONata에서 데이터 변환 단원을 참조하십시오.

Output (선택 사항, JSONata 만 해당)

상태로부터 출력을 지정하고 변환하는 데 사용됩니다. 지정된 경우 값은 상태 출력 기본값을 재정의합니다.

출력 필드는 모든 JSON 값(객체, 배열, 문자열, 숫자, 부울, null)을 허용합니다. 객체 또는 배열 내부의 문자열 값을 포함한 모든 문자열 값은 {% %}자로 둘러싸인 JSONata 것처럼 평가됩니다.

출력은 'Output': '{% jsonata expression %}'와 같은 JSONata 표현식도 직접 수락합니다.

자세한 내용은 입/출력 처리를 참조하십시오.

Parameters (선택 사항, JSONPath 만 해당)

연결된 리소스의 API 작업에 정보를 전달하는 데 사용됩니다. 파라미터는 정적 JSON 및의 혼합을 사용할 수 있습니다JsonPath. 자세한 내용은 Step FunctionsAPI의 서비스에 파라미터 전달 단원을 참조하십시오.

Credentials(선택 사항)

지정된 Resource 역할을 간접적으로 호출하기 전에 상태 시스템의 실행 역할이 간주되어야 하는 대상 역할을 지정합니다. 또는 실행 입력을 기반으로 런타임 ARN 시 IAM 역할로 확인되는 JSONPath 값 또는 내장 함수를 지정할 수도 있습니다. JSONPath 값을 지정하는 경우 $. 표기법으로 접두사를 지정해야 합니다.

Task 상태에서 이 필드 사용에 대한 예제는 Task 상태의 보안 인증 정보 필드 예제 섹션을 참조하세요. 이 필드를 사용하여 상태 시스템에서 교차 계정 AWS 리소스에 액세스하는 예제는 섹션을 참조하세요Step Functions에서 크로스 계정 AWS 리소스 액세스.

참고

이 필드는 Lambda 함수와 지원되는 서비스를 사용하는 Task 유형에서 지원됩니다. AWS

ResultPath (선택 사항, JSONPath 만 해당)

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

ResultSelector (선택 사항, JSONPath 만 해당)

키 값 페어 컬렉션을 전달합니다. 여기서 값은 정적이거나 결과에서 선택됩니다. 자세한 내용은 ResultSelector 단원을 참조하십시오.

Retry(선택 사항)

상태에 런타임 오류가 발생하는 경우 사용될 재시도 정책을 정의하는 객체 배열(Retrier). 자세한 내용은 Retry 및 Catch를 사용하는 상태 시스템 예제 단원을 참조하십시오.

Catch(선택 사항)

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

TimeoutSeconds(선택 사항)

States.Timeout 오류로 인해 제한 시간이 초과되어 실패하기 전에 활동이나 작업이 실행될 수 있는 최대 시간을 지정합니다. 제한 시간 값은 0이 아닌 양의 정수여야 합니다. 기본값은 99999999입니다.

작업이 시작된 후에(예: ActivityStarted 또는 LambdaFunctionStarted 이벤트가 실행 이벤트 기록에 로깅될 때) 제한 시간 카운트가 시작합니다. 활동의 경우 GetActivityTask에서 토큰을 받고 ActivityStarted가 실행 이벤트 기록에서 로깅될 때 카운트가 시작합니다.

작업이 시작되면 Step Functions는 지정된 TimeoutSeconds 기간 내에 작업이나 활동 작업자의 성공 또는 실패 응답을 기다립니다. 작업이나 활동 작업자가 이 시간 내에 응답하지 않으면 Step Functions는 워크플로 실행을 실패로 표시합니다.

참고

HTTP가 해당 제한을 TimeoutSeconds 초과하더라도 작업 제한 시간은 최대 60초입니다. HTTP 작업과 관련된 할당량 부분 참조

TimeoutSecondsPath (선택 사항, JSONPath 만 해당)

참조 경로를 사용하여 상태 입력에서 시간 제한 값을 동적으로 제공하려면 TimeoutSecondsPath를 사용합니다. 확인되면 참조 경로에서 값이 양의 정수인 필드를 선택해야 합니다.

참고

Task 상태는 TimeoutSeconds 및를 모두 포함할 수 없습니다TimeoutSecondsPath. TimeoutSecondsPath 값이 해당 제한을 초과하더라도 HTTP 작업 제한 시간은 최대 60초입니다.

HeartbeatSeconds(선택 사항)

작업 실행 중에 활동 작업자가 하트비트 신호를 보내는 빈도를 결정합니다. 하트비트는 작업이 계속 실행 중이며 완료되는 데 시간이 더 필요하다는 것을 나타냅니다. 하트비트는 TimeoutSeconds 기간 내에 활동이나 작업의 제한 시간이 초과되지 않도록 합니다.

HeartbeatSeconds는 0이 아닌 양의 정수 값이고 TimeoutSeconds 필드 값보다 작아야 합니다. 기본값은 99999999입니다. 작업의 하트비트 사이에서 지정된 시간(초)보다 많은 시간이 경과하면 Task 상태가 실패하고 States.Timeout 오류가 표시됩니다.

활동의 경우 GetActivityTask에서 토큰을 받고 ActivityStarted가 실행 이벤트 기록에서 로깅될 때 카운트가 시작합니다.

HeartbeatSecondsPath (선택 사항, JSONPath 전용)

참조 경로를 사용하여 상태 입력에서 하트비트 값을 동적으로 제공하려면 HeartbeatSecondsPath를 사용합니다. 확인되면 참조 경로에서 값이 양의 정수인 필드를 선택해야 합니다.

참고

Task 상태에는 HeartbeatSecondsHeartbeatSecondsPath 모두 포함될 수 없습니다.

Task 상태가 End 필드를 true로 설정해야 하거나(상태가 실행을 끝내는 경우), Task 상태의 완료 시에 실행되는 Next 필드에 상태를 제공해야 합니다.

Task 상태 정의 예제

다음 예제에서는 요구 사항에 따라 Task 상태 정의를 지정하는 방법을 보여줍니다.

Task 상태 제한 시간 및 하트비트 간격

실행 시간이 긴 활동의 경우 시간 초과 값 및 하트비트 간격을 설정하는 것이 좋습니다. 제한 시간 및 하트비트 값을 지정하거나 동적으로 설정하여 수행할 수 있습니다.

정적 제한 시간 및 하트비트 알림 예제

HelloWorld가 완료되면 다음 단계(NextState)가 실행됩니다.

이 작업이 300초 내에 완료되지 않거나 60초 간격으로 하트비트 알림을 전송하지 않으면 작업이 failed로 표시됩니다.

"ActivityState": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:HelloWorld", "TimeoutSeconds": 300, "HeartbeatSeconds": 60, "Next": "NextState" }

동적 작업 제한 시간 및 하트비트 알림 예제

이 예제에서는 AWS Glue 작업이 완료되면 다음 상태가 실행됩니다.

이 작업이 AWS Glue 작업에서 동적으로 설정한 간격 내에 완료되지 못하면 작업은 failed로 표시됩니다.

"GlueJobTask": { "Type": "Task", "Resource": "arn:aws:states:::glue:startJobRun.sync", "Parameters": { "JobName": "myGlueJob" }, "TimeoutSecondsPath": "$.params.maxTime", "Next": "NextState" }

Task 상태의 보안 인증 정보 필드 예제

하드 코딩된 IAM 역할 지정 ARN

다음 예제에서는 라는 교차 계정 Lambda 함수에 액세스하기 위해 상태 시스템의 실행 역할이 수임해야 IAM 하는 대상 역할을 지정합니다Echo. 이 예제에서 대상 역할은 하드 코딩된 값으로 지정ARN됩니다.

{ "StartAt": "Cross-account call", "States": { "Cross-account call": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn": "arn:aws:iam::111122223333:role/LambdaRole" }, "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:Echo" }, "End": true } } }

IAM 역할JSONPath로 지정 ARN

다음 예제에서는 런타임 ARN 시 IAM 역할로 확인되는 JSONPath 값을 지정합니다.

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "$.roleArn" }, ... } } }

내장 함수를 IAM 역할로 지정 ARN

다음 예제에서는 실행 ARN 시간에 IAM 역할로 확인되는 States.Format 내장 함수를 사용합니다.

{ "StartAt": "Lambda", "States": { "Lambda": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Credentials": { "RoleArn.$": "States.Format('arn:aws:iam::{}:role/ROLENAME', $.accountId)" }, ... } } }