Amazon SWF에서 활동 작업자 개발 - Amazon Simple Workflow Service

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

Amazon SWF에서 활동 작업자 개발

활동 작업자는 하나 이상의 작업 유형을 구현합니다. 활동 작업자는 Amazon SWF와 통신하여 활동 작업을 수신하고 수행합니다. 동일한 활동 유형의 활동 작업을 수행하는 활동 작업자가 여러 개 있을 수 있습니다.

Amazon SWF는 결정자가 활동 작업을 예약할 때 활동 작업자가 사용할 수 있습니다. 결정자는 활동 작업을 예약할 때 활동 작업자가 활동 작업을 수행하는 데 필요한 데이터 (사용자가 판단) 를 제공합니다. Amazon SWF는 활동 작업에 이러한 데이터를 삽입하여 활동 작업자에게 보냅니다.

활동 작업자는 사용자가 관리합니다. 활동 작업자는 모든 언어로 작성이 가능하고, API를 통해 Amazon SWF와 통신할 수 있는 한 어디에서나 작업자를 실행할 수 있습니다. Amazon SWF는 활동 작업을 수행하는 데 필요한 모든 정보를 제공하기 때문에 모든 활동 작업자는 상태 비저장일 수 있습니다. 상태 비저장 방식에서는 워크플로의 확장 가능성이 매우 커지므로, 증가한 필요 용량을 처리하려면 활동 작업자를 더 추가하기만 하면 됩니다.

이 단원에서는 활동 작업자를 구현하는 방법을 설명합니다. 활동 작업자는 반복적으로 다음 작업을 수행해야 합니다.

  1. 활동 작업을 위해 Amazon SWF 폴링합니다.

  2. 작업 수행을 시작합니다.

  3. 작업이 오래 실행되는 경우 Amazon SWF에 정기적으로 하트비트를 보고합니다.

  4. 작업이 완료 또는 실패했는지 보고하고 결과를 Amazon SWF에 반환합니다.

활동 작업 폴링

활동 작업을 수행하기 위해 각 활동 작업자는 를 정기적으로 호출해 Amazon SWF 폴링해야 합니다.PollForActivityTaskaction.

다음 예에서 활동 작업자 ChargeCreditCardWorker01은 작업 목록 ChargeCreditCard-v0.1에서 작업을 폴링합니다. 사용 가능한 활동 작업이 없으면 60초 후 Amazon SWF는 빈 응답을 다시 보냅니다. 빈 응답은 Task 구조로, 여기서 taskToken의 값이 빈 문자열입니다.

https://swf.us-east-1.amazonaws.com PollForActivityTask { "domain" : "867530901", "taskList" : { "name": "ChargeCreditCard-v0.1" }, "identity" : "ChargeCreditCardWorker01" }

활동 작업을 사용할 수 있게 되면 는 작업을 활동 작업자에게 반환합니다. 이 작업에는 결정자가 활동을 예약할 때 지정한 데이터가 들어 있습니다.

활동 작업자가 이 활동 작업을 받으면 작업을 수행할 준비가 된 것입니다. 다음 단원에서는 활동 작업 수행에 대한 정보를 제공합니다.

활동 작업 수행

활동 작업을 수신하면 활동 작업자가 작업을 수행할 준비가 된 것입니다.

활동 작업을 수행하려면

  1. 작업의 입력 필드에 있는 내용을 해석하도록 활동 작업자를 프로그래밍합니다. 이 필드에는 작업 예약 시 결정자가 지정한 데이터가 들어 있습니다.

  2. 데이터 처리 및 로직 실행을 시작하도록 활동 작업자를 프로그래밍합니다.

다음 섹션에서는 오래 실행되는 활동에 대해 Amazon SWF에 상태 업데이트를 제공하도록 활동 작업자를 프로그래밍하는 방법에 대해 설명합니다.

활동 작업 하트비트 보고

활동 유형에 하트비트 제한 시간이 등록되면 활동 작업자는 하트비트 제한 시간이 초과되기 전에 하트비트를 기록해야 합니다. 활동 작업이 제한 시간 안에 하트비트를 제공하지 못하면 작업 시간이 초과되고, Amazon SWF는 작업을 닫고 새 결정 작업을 예약해 결정자에게 시간 초과 사실을 알립니다. 그러면 결정자는 활동 작업을 다시 예약하거나 다른 조치를 취할 수 있습니다.

시간 초과 후 활동 작업자가 Amazon SWF에 접속하려고 하면 (예:RespondActivityTaskCompleted, Amazon SWF SWF는UnknownResource결함.

이 단원에서는 활동 하트비트를 제공하는 방법을 설명합니다.

활동 작업 하트비트를 기록하려면 RecordActivityTaskHeartbeat 작업을 호출하도록 활동 작업자를 프로그래밍합니다. 또한 이 작업은 애플리케이션에 대한 작업 진행 상황을 정량화하기 위해 자유 형식의 데이터를 저장하는 데 사용할 수 있는 문자열 필드를 제공합니다.

이 예에서 활동 작업자는 Amazon SWF에 하트비트를 보고하고 세부 정보 필드를 사용해 활동 작업이 40% 완료되었음을 보고합니다. 하트비트를 보고하려면 활동 작업자가 활동 작업의 작업 토큰을 지정해야 합니다.

https://swf.us-east-1.amazonaws.com RecordActivityTaskHeartbeat { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "details" : "40" }

이 작업은 워크플로 실행 내역에 이벤트를 생성하지 않지만 작업 시간이 초과되면 워크플로 실행 내역에 ActivityTaskTimedOut 이벤트가 포함됩니다. 이 이벤트에는 활동 작업자가 생성한 마지막 하트비트의 정보가 들어 있습니다.

활동 작업 완료 또는 실패

작업 실행 후 활동 작업자는 활동 작업을 완료했는지 아니면 작업에 실패했는지 보고해야 합니다.

활동 작업 완료

활동 작업을 완료하려면 활동 작업을 성공적으로 완료한 후 작업 토큰을 지정하는 RespondActivityTaskCompleted 작업을 호출하도록 활동 작업자를 프로그래밍해야 합니다.

이 예에서 활동 작업자는 작업이 성공적으로 완료되었음을 나타냅니다.

https://swf.us-east-1.amazonaws.com RespondActivityTaskCompleted { "taskToken": "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "results": "40" }

활동이 완료되면 Amazon SWF는 활동이 연결된 워크플로 실행을 위한 새 결정 작업을 예약합니다.

수중에 있는 작업을 완료하면 다른 활동 작업을 폴링하도록 활동 작업자를 프로그래밍합니다. 이렇게 하면 활동 작업자가 작업을 계속해서 폴링 및 완료하는 루프가 생성됩니다.

활동이 다음 내에서 응답하지 않는 경우시작클로즈타임아웃기간, 또는스케줄록클로스타임아웃이 (가) 초과되었습니다. Amazon SWF가 활동 작업 기간을 초과하고 결정 작업을 예약합니다. 따라서 결정자가 작업 다시 예약 등과 같은 적절한 조치를 취할 수 있습니다.

예를 들어, Amazon EC2 인스턴스가 활동 작업을 실행 중인데 작업이 완료되기 전에 인스턴스가 실패하면 결정자는 워크플로 실행 내역에 시간 초과 이벤트를 수신합니다. 활동 작업이 하트비트를 사용하는 경우 결정자는 Amazon EC2 인스턴스 실패 후 작업이 다음 하트비트 전달에 실패할 때 이 이벤트를 수신합니다. 그렇지 않은 경우 결정자는 전체 제한 시간 값 중 하나에 도달하기 전에 활동 작업을 완료하는 데 실패한 경우 이 이벤트를 수신합니다. 실패한 작업을 다시 할당하거나 다른 조치를 취하는 것은 결정자의 몫입니다.

활동 작업 실패

활동 작업자가 어떤 이유로 활동 작업을 수행할 수 없는데 Amazon SWF와 계속 통신할 수 있는 경우 작업에 실패하도록 활성 작업자를 프로그래밍할 수 있습니다.

활동 작업에 실패하도록 활동 작업자를 프로그래밍하려면 작업의 토큰을 지정하는 RespondActivityTaskFailed 작업을 호출하도록 활동 작업자를 프로그래밍합니다.

https://swf.us-east-1.amazonaws.com RespondActivityTaskFailed { "taskToken" : "12342e17-80f6-FAKE-TASK-TOKEN32f0223", "reason" : "CC-Invalid", "details" : "Credit Card Number Checksum Failed" }

개발자는 사유 및 세부 정보 필드에 저장할 값을 정의합니다. 이러한 문자열은 자유 형식 문자열인데, 애플리케이션에서 지원하는 모든 오류 코드 규칙을 사용할 수 있습니다. Amazon SWF는 이러한 값을 처리하지 않습니다. 하지만 Amazon SWF는 콘솔에 이러한 값을 표시할 수는 있습니다.

활동 작업이 실패하면 Amazon SWF는 활동 작업이 연결된 워크플로 실행을 위한 결정 작업을 예약해 결정자에게 실패를 알립니다. 실패의 특성에 따라 실패한 활동을 활동 다시 예약 또는 워크플로 실행 실패 등으로 처리하도록 결정자를 프로그래밍합니다.

활동 작업자 시작

활동 작업자를 시작하려면 활동 작업자 플랫폼에서 사용할 수 있는 실행 파일로 로직을 패키징합니다. 예를 들어, Linux 및 Windows 서버 양쪽 모두에서 실행되는 Java 실행 파일로 활동 코드를 패키징할 수 있습니다.

시작된 작업자는 작업을 폴링하기 시작합니다. 그러나 결정자가 활동 작업을 예약할 때까지는 작업 없이 폴링 시간이 초과되고, 그래도 작업자는 폴링을 계속합니다.

폴은 아웃바운드 요청이기 때문에 Amazon SWF 엔드포인트에 액세스할 수 있는 모든 네트워크에서 활동 작업자를 실행할 수 있습니다.

원하는 수만큼의 활동 작업자를 시작할 수 있습니다. 결정자가 활동 작업을 예약하면 Amazon SWF는 활동 작업을 폴링 활동 작업자에게 자동으로 분배합니다.