기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
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 스테이트 머신과 같은 계정.
-
Step Functions 콘솔
왼쪽에 있는 탐색 창에서 활동을 선택합니다. -
활동 생성을 선택합니다.
-
활동 이름(예:
)을 입력한 다음 활동 생성을 선택합니다.get-greeting
-
액티비티 태스크가 생성되면 다음 예와 같이 해당 ARN 태스크를 기록해 두세요.
arn:aws:states:us-east-1:123456789012:activity:get-greeting
2단계: 상태 시스템 만들기
활동 호출 시기 및 작업자가 주요 작업을 수행하고 결과를 수집하고 이를 반환해야 하는 시기를 결정하는 상태 머신을 생성합니다. 상태 시스템을 만들려면 Workflow Studio의 코드 편집기를 사용합니다.
-
Step Functions 콘솔
왼쪽에 있는 탐색 창에서 상태 시스템을 선택합니다. -
상태 시스템 페이지에서 상태 시스템 생성을 선택합니다.
-
템플릿 선택 대화 상자에서 공백을 선택합니다.
-
선택을 선택하여 워크플로 스튜디오를 에서 엽니다디자인 모드.
-
이 자습서에서는 코드 편집기에서 상태 머신의 Amazon States Language (ASL) 정의를 작성합니다. 이렇게 하려면 코드를 선택합니다.
-
기존 보일러플레이트 코드를 제거하고 다음 코드를 붙여넣습니다. 이 코드의 예제를 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
상태를 정의합니다. 자세한 내용은 상태 머신 구조를 참조하십시오. -
에서 추가한 그래프 시각화 ASL 정의의 워크플로 그래프가 다음 그래프와 비슷한지 확인하십시오.
-
상태 시스템 이름을 지정합니다. 이렇게 하려면 기본 상태 머신 이름 옆에 있는 편집 아이콘을 선택합니다 MyStateMachine. 그런 다음 상태 머신 구성에서 상태 머신 이름 상자에 이름을 지정합니다.
이 튜토리얼에서는 이름
ActivityStateMachine
를 입력합니다. -
(선택 사항) 상태 머신 구성에서 상태 시스템 유형 및 실행 역할과 같은 기타 워크플로 설정을 지정합니다.
이 자습서의 경우 상태 머신 설정의 모든 기본 선택 항목을 그대로 둡니다.
이전에 상태 컴퓨터에 대한 올바른 권한을 가진 IAM 역할을 생성한 후 이를 사용하려면 권한에서 기존 역할 선택을 선택한 다음 목록에서 역할을 선택합니다. 또는 역할 입력을 선택한 다음 해당 IAM 역할에 ARN ARN 대한 역할을 제공하십시오.
-
역할 생성 확인 대화 상자에서 확인을 선택하여 계속합니다.
역할 설정 보기를 선택하여 상태 머신 구성으로 돌아갈 수도 있습니다.
참고
Step IAM Functions가 생성하는 역할을 삭제하면 Step Functions에서 해당 역할을 나중에 다시 생성할 수 없습니다. 마찬가지로 역할을 수정하는 경우 (예: IAM 정책의 보안 주체에서 Step Functions 제거) Step Functions가 나중에 원래 설정을 복원할 수 없습니다.
3단계: 작업자 구현
작업자를 생성합니다. 작업자는 다음을 수행하는 프로그램입니다.
-
GetActivityTask
API작업을 사용하는 활동을 위한 폴링 Step Functions. -
코드를 사용하여 활동 작업 수행(예: 다음 코드의
getGreeting()
메서드). -
SendTaskSuccess
SendTaskFailure
, 및SendTaskHeartbeat
API 액션을 사용하여 결과를 반환합니다.
참고
활동 작업자의 보다 완벽한 예제는 예: Ruby의 액티비티 워커를 참조하십시오. 이 예제는 사용자가 활동 작업자에 대한 참조로 사용할 수 있는 모범 사례를 기반으로 한 구현을 제공합니다. 이 코드는 폴러 및 활동 작업자용 스레드 수를 구성할 수 있는 소비자-생산자 패턴을 구현합니다.
작업자를 구현하려면
-
GreeterActivities.java
이라는 이름의 파일을 만듭니다. -
파일에 다음 코드를 추가합니다.
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초로 설정하십시오. -
GetActivityTaskRequest().withActivityArn()
생성자의 매개 변수 목록에서ACTIVITY_ARN
값을 이전에 만든 액티비티 ARN 작업의 값으로 바꿉니다.
4단계: 상태 시스템 실행
상태 시스템 실행을 시작하면 작업자가 활동에 대해 Step Functions를 폴링하고 작업을 수행(제공한 입력 사용)하고 결과를 반환합니다.
-
에서
ActivityStateMachine
페이지에서 실행 시작을 선택합니다.실행 시작 대화 상자가 표시됩니다.
-
실행 시작 대화 상자에서 다음을 수행합니다.
-
(선택 사항) 생성된 기본값을 재정의하려면 사용자 지정 실행 이름을 입력합니다.
ASCII비이름 및 로깅
Step Functions는 ASCII -자가 아닌 문자를 포함하는 상태 머신, 실행, 액티비티 및 레이블의 이름을 허용합니다. CloudWatchAmazon에서는 이러한 문자를 사용할 수 없으므로 지표를 추적할 수 있도록 ASCII 문자만 사용하는 것이 좋습니다 CloudWatch.
-
입력 상자에 다음 JSON 입력을 입력하여 워크플로를 실행합니다.
{ "who": "AWS Step Functions" }
-
실행 시작을 선택합니다.
-
Step Functions 콘솔은 실행 ID가 제목인 페이지로 이동합니다. 이 페이지를 실행 세부 정보 페이지라고 합니다. 실행이 진행되는 동안 또는 완료된 후에 이 페이지에서 실행 결과를 검토할 수 있습니다.
실행 결과를 검토하려면 그래프 보기에서 개별 상태를 선택한 다음 단계 세부 정보 창에서 개별 탭을 선택하여 입력, 출력 및 정의가 포함된 각 상태의 세부 정보를 각각 봅니다. 실행 세부 정보 페이지에서 볼 수 있는 실행 정보에 대한 자세한 내용은 실행 세부 정보 개요 섹션을 참조하세요.
-
5단계: 작업자 실행 및 중지
작업자가 활동을 위해 상태 머신을 폴링하도록 하려면 작업자를 실행해야 합니다.
-
명령줄에서
GreeterActivities.java
를 생성한 디렉터리로 이동합니다. -
사용하려면 AWS SDK
lib
및third-party
디렉토리의 전체 경로를 빌드 파일의 종속 항목과 Java에 추가하십시오.CLASSPATH
자세한 내용은 다운로드 및 추출을 참조하십시오. SDK AWS SDK for Java 개발자 가이드. -
파일을 컴파일합니다.
$ javac GreeterActivities.java
-
파일을 실행합니다.
$ java GreeterActivities
-
Step Functions 콘솔
에서 실행 세부 정보 페이지로 이동합니다. -
실행이 완료되면 실행 결과를 검사합니다.
-
작업자를 중지합니다.