Step Functions를 사용하여 Activity 상태 시스템 만들기 - AWS Step Functions

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

Step Functions를 사용하여 Activity 상태 시스템 만들기

이 자습서에서는 Java를 사용하여 활동 기반 상태 머신을 생성하는 방법을 보여줍니다. AWS Step Functions. 액티비티를 사용하면 스테이트 머신의 다른 곳에서 실행되는 워커 코드를 제어할 수 있습니다. 개요는 Step Functions에서 스테이트 머신에 대해 알아보기Step Functions의 활동에 대해 알아보기 단원을 참조하십시오.

이 튜토리얼을 완료하려면 다음이 필요합니다.

  • SDKJava용. 이 자습서의 예제 활동은 다음을 사용하는 Java 애플리케이션입니다. AWS SDK for Java 다음과 통신하려면 AWS.

  • AWS 환경 또는 표준에서의 자격 증명 AWS 구성 파일. 자세한 내용은 설정을 참조하십시오. AWS의 자격 증명 AWS SDK for Java 개발자 가이드.

1단계: 활동 생성

Step Functions가 만들려는 작업자(프로그램)의 활동을 인식하게 해야 합니다. Step Functions는 활동에 대한 ID를 설정하는 Amazon 리소스 이름 (ARN) 으로 응답합니다. 이 자격 증명을 사용하면 상태 머신 및 작업자 사이에서 전달되는 정보를 조정할 수 있습니다.

중요

액티비티 태스크가 동일한 태스크에 속하는지 확인하세요. AWS 스테이트 머신과 같은 계정.

  1. Step Functions 콘솔 왼쪽에 있는 탐색 창에서 활동을 선택합니다.

  2. 활동 생성을 선택합니다.

  3. 활동 이름(예: get-greeting)을 입력한 다음 활동 생성을 선택합니다.

  4. 액티비티 태스크가 생성되면 다음 예와 같이 해당 ARN 태스크를 기록해 두세요.

    arn:aws:states:us-east-1:123456789012:activity:get-greeting

2단계: 상태 시스템 만들기

활동 호출 시기 및 작업자가 주요 작업을 수행하고 결과를 수집하고 이를 반환해야 하는 시기를 결정하는 상태 머신을 생성합니다. 상태 시스템을 만들려면 Workflow Studio의 코드 편집기를 사용합니다.

  1. Step Functions 콘솔 왼쪽에 있는 탐색 창에서 상태 시스템을 선택합니다.

  2. 상태 시스템 페이지에서 상태 시스템 생성을 선택합니다.

  3. 템플릿 선택 대화 상자에서 공백을 선택합니다.

  4. 선택을 선택하여 워크플로 스튜디오를 에서 엽니다디자인 모드.

  5. 이 자습서에서는 코드 편집기에서 상태 머신의 Amazon States Language (ASL) 정의를 작성합니다. 이렇게 하려면 코드를 선택합니다.

  6. 기존 보일러플레이트 코드를 제거하고 다음 코드를 붙여넣습니다. 이 코드의 예제를 ARN Resource 필드에서 앞서 만든 액티비티 ARN 태스크의 예제로 바꿔야 한다는 점을 잊지 마세요.

    { "Comment": "An example using a Task state.", "StartAt": "getGreeting", "Version": "1.0", "TimeoutSeconds": 300, "States": { "getGreeting": { "Type": "Task", "Resource": "arn:aws:states:us-east-1:123456789012:activity:get-greeting", "End": true } } }

    다음은 Amazon States Language (ASL) 를 사용하는 스테이트 머신의 설명입니다. 이 예에서는 getGreeting라는 하나의 Task 상태를 정의합니다. 자세한 내용은 상태 머신 구조를 참조하십시오.

  7. 에서 추가한 그래프 시각화 ASL 정의의 워크플로 그래프가 다음 그래프와 비슷한지 확인하십시오.

    RunActivity 작업 상태를 포함한 상태 머신의 그래프 시각화.
  8. 상태 시스템 이름을 지정합니다. 이렇게 하려면 기본 상태 머신 이름 옆에 있는 편집 아이콘을 선택합니다 MyStateMachine. 그런 다음 상태 머신 구성에서 상태 머신 이름 상자에 이름을 지정합니다.

    이 튜토리얼에서는 이름 ActivityStateMachine를 입력합니다.

  9. (선택 사항) 상태 머신 구성에서 상태 시스템 유형 및 실행 역할과 같은 기타 워크플로 설정을 지정합니다.

    이 자습서의 경우 상태 머신 설정의 모든 기본 선택 항목을 그대로 둡니다.

    이전에 상태 컴퓨터에 대한 올바른 권한을 가진 IAM 역할을 생성한 후 이를 사용하려면 권한에서 기존 역할 선택을 선택한 다음 목록에서 역할을 선택합니다. 또는 역할 입력을 선택한 다음 해당 IAM 역할에 ARN ARN 대한 역할을 제공하십시오.

  10. 역할 생성 확인 대화 상자에서 확인을 선택하여 계속합니다.

    역할 설정 보기를 선택하여 상태 머신 구성으로 돌아갈 수도 있습니다.

    참고

    Step IAM Functions가 생성하는 역할을 삭제하면 Step Functions에서 해당 역할을 나중에 다시 생성할 수 없습니다. 마찬가지로 역할을 수정하는 경우 (예: IAM 정책의 보안 주체에서 Step Functions 제거) Step Functions가 나중에 원래 설정을 복원할 수 없습니다.

3단계: 작업자 구현

작업자를 생성합니다. 작업자는 다음을 수행하는 프로그램입니다.

  • GetActivityTaskAPI작업을 사용하는 활동을 위한 폴링 Step Functions.

  • 코드를 사용하여 활동 작업 수행(예: 다음 코드의 getGreeting() 메서드).

  • SendTaskSuccessSendTaskFailure, 및 SendTaskHeartbeat API 액션을 사용하여 결과를 반환합니다.

참고

활동 작업자의 보다 완벽한 예제는 예: Ruby의 액티비티 워커를 참조하십시오. 이 예제는 사용자가 활동 작업자에 대한 참조로 사용할 수 있는 모범 사례를 기반으로 한 구현을 제공합니다. 이 코드는 폴러 및 활동 작업자용 스레드 수를 구성할 수 있는 소비자-생산자 패턴을 구현합니다.

작업자를 구현하려면

  1. GreeterActivities.java이라는 이름의 파일을 만듭니다.

  2. 파일에 다음 코드를 추가합니다.

    import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.EnvironmentVariableCredentialsProvider; import com.amazonaws.regions.Regions; import com.amazonaws.services.stepfunctions.AWSStepFunctions; import com.amazonaws.services.stepfunctions.AWSStepFunctionsClientBuilder; import com.amazonaws.services.stepfunctions.model.GetActivityTaskRequest; import com.amazonaws.services.stepfunctions.model.GetActivityTaskResult; import com.amazonaws.services.stepfunctions.model.SendTaskFailureRequest; import com.amazonaws.services.stepfunctions.model.SendTaskSuccessRequest; import com.amazonaws.util.json.Jackson; import com.fasterxml.jackson.databind.JsonNode; import java.util.concurrent.TimeUnit; public class GreeterActivities { public String getGreeting(String who) throws Exception { return "{\"Hello\": \"" + who + "\"}"; } public static void main(final String[] args) throws Exception { GreeterActivities greeterActivities = new GreeterActivities(); ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSocketTimeout((int)TimeUnit.SECONDS.toMillis(70)); AWSStepFunctions client = AWSStepFunctionsClientBuilder.standard() .withRegion(Regions.US_EAST_1) .withCredentials(new EnvironmentVariableCredentialsProvider()) .withClientConfiguration(clientConfiguration) .build(); while (true) { GetActivityTaskResult getActivityTaskResult = client.getActivityTask( new GetActivityTaskRequest().withActivityArn(ACTIVITY_ARN)); if (getActivityTaskResult.getTaskToken() != null) { try { JsonNode json = Jackson.jsonNodeOf(getActivityTaskResult.getInput()); String greetingResult = greeterActivities.getGreeting(json.get("who").textValue()); client.sendTaskSuccess( new SendTaskSuccessRequest().withOutput( greetingResult).withTaskToken(getActivityTaskResult.getTaskToken())); } catch (Exception e) { client.sendTaskFailure(new SendTaskFailureRequest().withTaskToken( getActivityTaskResult.getTaskToken())); } } else { Thread.sleep(1000); } } } }
    참고

    이 예제의 EnvironmentVariableCredentialsProvider 클래스는 AWS_ACCESS_KEY_ID(또는 AWS_ACCESS_KEY) 및 AWS_SECRET_KEY(또는 AWS_SECRET_ACCESS_KEY) 환경 변수가 설정되어 있다고 가정합니다. 필수 자격 증명을 공장에 제공하는 방법에 대한 자세한 내용은 다음을 참조하십시오 AWSCredentialsProvider. AWS SDK for Java API참조 설정 AWS 개발을 위한 자격 증명 및 지역 AWS SDK for Java 개발자 가이드.

    기본적으로 AWS SDK모든 작업에 대해 서버로부터 데이터를 수신할 때까지 최대 50초 동안 기다립니다. GetActivityTask 작업은 사용 가능한 다음 작업에 대해 최대 60초 동안 대기하는 긴 폴링 작업입니다. SocketTimeoutException오류 수신을 SocketTimeout 방지하려면 70초로 설정하십시오.

  3. GetActivityTaskRequest().withActivityArn()생성자의 매개 변수 목록에서 ACTIVITY_ARN 값을 이전에 만든 액티비티 ARN 작업의 값으로 바꿉니다.

4단계: 상태 시스템 실행

상태 시스템 실행을 시작하면 작업자가 활동에 대해 Step Functions를 폴링하고 작업을 수행(제공한 입력 사용)하고 결과를 반환합니다.

  1. 에서 ActivityStateMachine페이지에서 실행 시작을 선택합니다.

    실행 시작 대화 상자가 표시됩니다.

  2. 실행 시작 대화 상자에서 다음을 수행합니다.

    1. (선택 사항) 생성된 기본값을 재정의하려면 사용자 지정 실행 이름을 입력합니다.

      ASCII비이름 및 로깅

      Step Functions는 ASCII -자가 아닌 문자를 포함하는 상태 머신, 실행, 액티비티 및 레이블의 이름을 허용합니다. CloudWatchAmazon에서는 이러한 문자를 사용할 수 없으므로 지표를 추적할 수 있도록 ASCII 문자만 사용하는 것이 좋습니다 CloudWatch.

    2. 입력 상자에 다음 JSON 입력을 입력하여 워크플로를 실행합니다.

      { "who": "AWS Step Functions" }
    3. 실행 시작을 선택합니다.

    4. Step Functions 콘솔은 실행 ID가 제목인 페이지로 이동합니다. 이 페이지를 실행 세부 정보 페이지라고 합니다. 실행이 진행되는 동안 또는 완료된 후에 이 페이지에서 실행 결과를 검토할 수 있습니다.

      실행 결과를 검토하려면 그래프 보기에서 개별 상태를 선택한 다음 단계 세부 정보 창에서 개별 탭을 선택하여 입력, 출력 및 정의가 포함된 각 상태의 세부 정보를 각각 봅니다. 실행 세부 정보 페이지에서 볼 수 있는 실행 정보에 대한 자세한 내용은 실행 세부 정보 개요 섹션을 참조하세요.

5단계: 작업자 실행 및 중지

작업자가 활동을 위해 상태 머신을 폴링하도록 하려면 작업자를 실행해야 합니다.

  1. 명령줄에서 GreeterActivities.java를 생성한 디렉터리로 이동합니다.

  2. 사용하려면 AWS SDKlibthird-party 디렉토리의 전체 경로를 빌드 파일의 종속 항목과 Java에 추가하십시오. CLASSPATH 자세한 내용은 다운로드 및 추출을 참조하십시오. SDK AWS SDK for Java 개발자 가이드.

  3. 파일을 컴파일합니다.

    $ javac GreeterActivities.java
  4. 파일을 실행합니다.

    $ java GreeterActivities
  5. Step Functions 콘솔에서 실행 세부 정보 페이지로 이동합니다.

  6. 실행이 완료되면 실행 결과를 검사합니다.

  7. 작업자를 중지합니다.