서비스 통합 패턴 - AWS Step Functions

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

서비스 통합 패턴

AWS Step FunctionsAmazon States Language로 서비스와 직접 통합 세 가지 서비스 통합 패턴을 사용하여 이러한 AWS 서비스를 제어할 수 있습니다

  • 서비스를 호출하고 HTTP 응답을 받은 후 즉시 Step Functions가 다음 상태로 진행되도록 합니다.

  • 서비스를 호출하고 Step Functions 작업이 완료될 때까지 기다리도록 합니다.

  • 태스크 토큰으로 서비스를 호출하고 Step Functions 해당 토큰이 페이로드와 함께 반환될 때까지 기다리도록 합니다.

이러한 각 서비스 통합 패턴은 에서 URI를 생성하는 방법에 따라 제어됩니다."Resource"당신의 필드작업 정의.

구성에 대한 자세한 내용은AWS Identity and Access Management통합 서비스의 경우 (IAM), 참조통합 서비스를 위한 IAM 정책.

요청 및 응답

에서 서비스를 지정하는 경우"Resource"작업 상태 문자열 및 사용자리소스를 제공합니다. Step Functions Functions는 HTTP 응답을 기다린 후 다음 상태로 진행합니다. Step Functions Functions는 작업이 완료될 때까지 기다리지 않습니다.

다음 예는 Amazon SNS 주제를 게시하는 방법을 보여줍니다.

"Send message to SNS":{ "Type":"Task", "Resource":"arn:aws:states:::sns:publish", "Parameters":{ "TopicArn":"arn:aws:sns:us-east-1:123456789012:myTopic", "Message":"Hello from Step Functions!" }, "Next":"NEXT_STATE" }

이 예제에서는게시Amazon SNS SNS의 API. 워크플로는 Publish API를 호출한 후 다음 상태로 진행합니다.

작업 실행(.sync)

다음과 같은 통합 서비스의 경우AWS BatchAmazon ECS, Step Functions Functions는 다음 상태로 진행하기 전에 요청이 완료되도록 대기해야 할 수 있습니다. Step Functions 대기하도록 하려면 다음을 지정하십시오."Resource"작업 상태 정의의 필드를 사용하여.sync리소스 URI 뒤에 접미사가 추가됩니다.

예를 들어, 제출하는 경우AWS Batch직업, 사용"Resource"다음 예와 같이 상태 시스템 정의의 필드입니다.

"Manage Batch task": { "Type": "Task", "Resource": "arn:aws:states:::batch:submitJob.sync", "Parameters": { "JobDefinition": "arn:aws:batch:us-east-2:123456789012:job-definition/testJobDefinition", "JobName": "testJob", "JobQueue": "arn:aws:batch:us-east-2:123456789012:job-queue/testQueue" }, "Next": "NEXT_STATE" }

갖는.sync리소스 Amazon 리소스 이름 (ARN) 에 추가된 부분은 Step Functions 작업이 완료될 때까지 대기한다는 의미입니다. AWS Batch submitJob을 호출한 후 워크플로가 일시 중지됩니다. 작업이 완료되면 Step Functions Functions가 다음 상태로 이동합니다. 자세한 내용은 AWS Batch 샘플 프로젝트인 Batch Job 관리 (AWS Batch, Amazon SNS)을 참조하십시오.

이것을 사용하는 태스크인 경우 (.sync) 서비스 통합 패턴이 중단되고 Step Functions Functions가 작업을 취소할 수 없는 경우 통합 서비스에서 추가 요금이 부과될 수 있습니다. 다음과 같은 경우 작업이 중단될 수 있습니다.

  • 상태 머신 실행이 중지되었습니다.

  • Parallel 상태의 다른 분기가 실패하고 포착되지 않은 오류가 발생합니다.

  • 맵 상태의 반복이 실패하고 포착되지 않는 오류가 발생합니다.

Step Functions Functions는 최선을 다해 작업 취소를 시도합니다. 예를 들어, Step Functions 기능하는 경우states:startExecution.sync작업이 중단되면 Step Functions Functions를 호출합니다.StopExecutionAPI 작업. 하지만 Step Functions가 작업을 취소하지 못할 수도 있습니다. 그 이유는 다음을 포함하지만 이에 국한되지 않습니다.

  • IAM 실행 역할에 해당 API 호출을 수행할 권한이 없습니다.

  • 일시적인 서비스 중단이 발생했습니다.

작업이 완료될 때까지 대기(.sync)를 지원하는 통합 서비스 목록을 보려면 Step Functions 위한 최적화된 통합 단원을 참조하십시오.

참고

를 사용하는 서비스 통합.sync패턴에는 추가 IAM 권한이 필요합니다. 자세한 정보는 통합 서비스를 위한 IAM 정책을 참조하세요.

작업 토큰을 사용하여 콜백 대기

콜백 작업은 작업 토큰이 반환될 때까지 워크플로를 일시 중지하는 방법을 제공합니다. 작업은 사람의 승인을 대기하거나, 타사와 통합하거나 레거시 시스템을 호출해야 할 수 있습니다. 이와 같은 작업의 경우 Step Functions 무기한으로 일시 중지하고 외부 프로세스 또는 워크플로가 완료될 때까지 기다릴 수 있습니다. 이러한 상황에서 Step Functions Functions를 사용하면 작업 토큰을AWSSDK 서비스 통합 및 일부 최적화 서비스 통합 작업은 SendTaskSuccess 또는 SendTaskFailure 호출을 통해 해당 작업 토큰을 다시 수신할 때까지 일시 중지됩니다.

만약Task콜백 태스크 토큰을 사용하는 상태 제한 시간이 초과되면 새 랜덤 토큰이 생성됩니다. 작업 토큰은 에서 액세스할 수 있습니다.컨텍스트 객체.

참고

작업 토큰은 1자 이상, 1024자를 초과할 수 없습니다.

사용.waitForTaskToken와 함께AWSSDK 통합: 사용하는 API에는 작업 토큰을 배치할 매개 변수 필드가 있어야 합니다.

참고

보안 주체의 태스크 토큰을 동일한 항목 내에 전달해야 합니다.AWS계정. 다른 주체로부터 토큰을 보내면 토큰이 작동하지 않습니다.AWS계정.

작업 토큰 대기(.waitForTaskToken)를 지원하는 통합 서비스 목록은 Step Functions 위한 최적화된 통합 단원을 참조하십시오.

작업 토큰 예제

이 예시에서는 Step Functions 워크플로를 외부 마이크로서비스와 통합하여 승인 워크플로의 일부로 크레딧 확인을 수행해야 합니다. Step Functions Functions는 메시지의 일부로 작업 토큰을 포함하는 Amazon SQS 메시지를 게시합니다. 외부 시스템이 Amazon SQS와 통합되어 메시지를 대기열에서 가져옵니다. 완료되면 결과와 원래 작업 토큰이 반환됩니다. 그러면 Step Functions Functions가 워크플로를 계속


            작업 토큰이 반환될 때까지 대기하는 SQS 작업

"Resource"Amazon SQS를 참조하는 작업 정의 필드에는 다음이 포함됩니다..waitForTaskToken끝에 추가됩니다.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

그러면 Step Functions Functions가 작업 토큰을 일시 중지하고 기다리도록 지시 .waitForTaskToken을 사용하여 리소스를 지정하면 특정 경로 지정($$.Task.Token)이 있는 상태 정의의 "Parameters" 필드에서 작업 토큰에 액세스할 수 있습니다. 처음 $$.는 경로가 컨텍스트 객체에 액세스하고 진행 중인 실행에서 현재 작업에 대한 작업 토큰을 가져오도록 지정합니다

작업이 완료되면 외부 서비스가 호출됩니다.SendTaskSuccess또는SendTaskFailure와 함께taskToken포함. 그런 다음에만 워크플우는 다음 상태로 계속합니다.

참고

프로세스가 SendTaskSuccess 또는 SendTaskFailure와 함께 작업 토큰을 전달하는 데 실패하는 경우 무기한 대기하지 않도록 하려면 대기 작업에 대한 하트비트 시간 제한 구성 단원을 참조하십시오.

컨텍스트 객체에서 토큰 가져오기

컨텍스트 객체는 실행에 대한 정보가 포함된 내부 JSON 객체입니다. 상태 입력과 마찬가지로, 실행 중에 "Parameters" 필드의 경로를 사용하여 이 객체에 액세스할 수 있습니다. 작업 정의 내에서 액세스하는 경우 작업 토큰을 포함하여 특정 실행에 대한 정보가 포함됩니다.

{ "Execution": { "Id": "arn:aws:states:us-east-1:123456789012:execution:stateMachineName:executionName", "Input": { "key": "value" }, "Name": "executionName", "RoleArn": "arn:aws:iam::123456789012:role...", "StartTime": "2019-03-26T20:14:13.192Z" }, "State": { "EnteredTime": "2019-03-26T20:14:13.192Z", "Name": "Test", "RetryCount": 3 }, "StateMachine": { "Id": "arn:aws:states:us-east-1:123456789012:stateMachine:stateMachineName", "Name": "name" }, "Task": { "Token": "h7XRiCdLtd/83p1E0dMccoxlzFhglsdkzpK9mBVKZsp7d9yrT1W" } }

작업 정의의 "Parameters" 필드 내부에서 특정 경로를 사용하여 작업 토큰에 액세스할 수 있습니다. 입력 또는 컨텍스트 객체에 액세스하려면 먼저 .$를 파라미터 이름에 추가하여 파라미터가 경로가 되도록 지정합니다. 다음은 "Parameters" 지정에서 입력 및 컨텍스트 객체의 노드를 지정합니다.

"Parameters": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" },

두 경우 모두 첨부.$파라미터 이름에 를 입력하면 Step Functions Functions가 경로를 예상하도록 지시합니다. 첫 번째 경우 "$"는 전체 입력이 포함된 경로입니다. 두 번째 경우, $$.는 경로가 컨텍스트 객체에 액세스하도록 지정하고 $$.Task.Token은 파라미터를 진행 중인 실행의 컨텍스트 객체에 있는 작업 토큰의 값으로 설정합니다.

Amazon SQS 예제에서는.waitForTaskToken에서"Resource"필드는 작업 토큰이 반환될 때까지 대기하도록 Step Functions Functions에 지시합니다. 이"TaskToken.$": "$$.Task.Token"파라미터는 해당 토큰을 Amazon SQS 메시지의 일부로 전달합니다.

"Send message to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-east-2.amazonaws.com/123456789012/myQueue", "MessageBody": { "Message": "Hello from Step Functions!", "TaskToken.$": "$$.Task.Token" } }, "Next": "NEXT_STATE" }

컨텍스트 객체에 대한 자세한 내용은 이 가이드의 컨텍스트 객체 단원에 있는 입/출력 처리 항목을 참조하십시오.

대기 작업에 대한 하트비트 시간 제한 구성

작업 토큰을 대기하고 있는 작업은 실행이 1년 서비스 할당량에 도달할 때까지 대기합니다(상태 제한과 관련된 할당량 참조). 실행 멈춤을 방지하기 위해 상태 머신 정의에서 하트비트 제한 시간 간격을 구성할 수 있습니다. HeartbeatSeconds 필드를 사용항 제한 시간 간격을 지정합니다.

{ "StartAt": "Push to SQS", "States": { "Push to SQS": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "HeartbeatSeconds": 600, "Parameters": { "MessageBody": { "myTaskToken.$": "$$.Task.Token" }, "QueueUrl": "https://sqs.us-east-1.amazonaws.com/123456789012/push-based-queue" }, "ResultPath": "$.SQS", "End": true } } }

이 상태 머신 정의에서 작업은 Amazon SQS로 메시지를 푸시하고 제공된 작업 토큰으로 외부 프로세스가 콜백되기를 기다립니다. "HeartbeatSeconds": 600 필드는 하트비트 제한 시간 간격을 10분으로 설정합니다. 이 작업은 이러한 API 작업 중 하나를 사용하여 작업 토큰이 반환될 때까지 대기합니다.

대기 중인 작업이 10분 기간 이내에 유효한 작업 토큰을 수신하지 않으면 이 작업은 States.Timeout 오류 이름과 함께 실패합니다.

자세한 내용은 콜백 작업 샘플 프로젝트인 콜백 패턴 예제 (Amazon SQS, Amazon SNS, Lambda) 를 참조하십시오.