Step Functions를 시작하는 방법 알아보기 - AWS Step Functions

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

Step Functions를 시작하는 방법 알아보기

Step Functions 서비스를 사용하면 복잡한 애플리케이션 워크플로를 오케스트레이션할 수 있습니다. 시작하려면 Workflow Studio를 사용하여 기본 제공 Hello World 워크플로를 생성하고 실행합니다. 코드에서 자동 생성된 Amazon States Language (ASL) 정의를 검토합니다. 마지막으로 drag-and-drop 감성 분석을 수행하기 위한 서비스 통합을 수행합니다.

이 자습서를 완료하면 Workflow Studio를 사용하여 설계 모드와 코드 모드를 모두 사용하여 워크플로를 생성, 구성, 실행 및 업데이트하는 방법을 알 수 있습니다.

예상 소요 시간: 20~30분

빌드할 항목

첫 번째 상태 머신은 흐름 상태로 시작합니다. 흐름 상태는 워크플로를 지시하고 제어하는 데 사용됩니다. 워크플로를 실행하는 방법을 학습한 후 작업을 추가하여 Amazon Comprehend 서비스를 작업 상태와 통합합니다.

다음 다이어그램은 빌드할 전체 상태 시스템의 시각적 객체를 보여줍니다. Hello World 상태 머신을 처음 생성할 때 실행하는 데 추가 리소스가 필요하지 않습니다. Step Functions 콘솔은 클릭 한 번으로 모든 상태와 IAM 역할을 생성합니다. 나중에 서비스 통합을 추가할 때 사용자 지정 권한 정책을 사용하여 역할을 생성해야 합니다.

Hello World 워크플로의 시각적 표현입니다.

1단계 - 상태 시스템 생성

Step Functions에서는 워크플로상태 머신이라고 합니다. 두 용어를 서로 바꿔 사용할 것입니다. 워크플로에는 작업을 수행하거나 상태 시스템의 흐름을 제어하는 상태가 포함됩니다.

  1. Step Functions 콘솔로 이동합니다.

  2. Step Functions 콘솔의 왼쪽 상단 탐색 또는 이동 탐색기에서 'Step Functions'를 선택한 다음 시작하기를 선택합니다.

    Hello World 워크플로를 시작하는 방법을 보여주는 그림 스크린샷
  3. 옵션에서 Hello World 실행을 선택합니다.

    Hello World 워크플로를 선택하는 방법을 보여주는 그림 스크린샷
작은 정보

UI에 익숙해지기 위해 콘솔 내 짧은 연습을 단계별로 진행하는 것이 좋습니다.

Workflow Studio 개요

Step Functions용 Workflow Studio를 사용하면 캔버스에 시각적 drag-and-drop으로 상태를 지정하여 워크플로를 구축할 수 있습니다.

상태를 추가 및 편집하고, 단계를 구성하고, 결과를 변환하고, 오류 처리를 설정할 수 있습니다. 다음 스크린샷은 상태 시스템을 빌드하는 데 사용할 인터페이스의 네 가지 중요한 영역을 보여줍니다.

Workflow Studio 인터페이스의 네 가지 중요 영역에 대한 그림 스크린샷

모드 - Workflow Studio는 세 가지 작업 모드를 제공하며 기본적으로 시각적 설계 모드입니다.

  • 디자인 - 워크플로에 상태를 지정할 수 drag-and-drop 있는 시각적 편집 모드입니다.

  • 코드 - ASL 코드라고도 하는 Amazon States Language 코드에 초점을 맞춘 모드입니다. ASL 코드를 직접 편집하고 시각적 디자인에 반영된 변경 사항을 볼 수 있습니다.

  • Config - 상태 시스템(Standard 또는 Express)의 이름 및 유형, 워크플로 실행 시 할당된 역할, 로깅, 추적, 버전 관리, 암호화 및 태그를 포함한 구성 옵션입니다.

상태 브라우저에는 다음 세 가지 탭이 포함되어 있습니다.

  • 작업 - 워크플로에 포함할 수 drag-and-drop 있는 목록 AWS APIs입니다. 각 작업은 작업 워크플로 상태를 나타냅니다.

  • 흐름 - 워크플로의 단계 순서를 제어하는 흐름 상태입니다.

  • 패턴 - Amazon S3 버킷에서 데이터를 반복적으로 처리하는 등 ready-to-use재사용 가능한 구성 요소입니다.

캔버스 및 워크플로 그래프는 워크플로 그래프의 상태를 지정하고, 상태 순서를 변경하고, 구성 및 테스트할 상태를 선택하는 곳입니다 drag-and-drop.

검사기 패널은 캔버스에서 선택한 모든 상태의 속성을 보고 편집하는 곳입니다. 정의 토글을 켜서 현재 선택한 상태의 코드를 표시할 수 있습니다.

상태 시스템 개요

Hello World 워크플로는 작업을 수행하지 않고 출력을 전달하는 통과 상태로 시작합니다. 전달 상태는 데이터를 다음 상태로 전달하기 전에 정적 JSON 출력을 생성하거나 JSON 입력을 변환하는 데 사용할 수 있습니다. 전달 상태는 상태 시스템을 구성하고 디버깅할 때 유용합니다.

다음 상태인 선택 상태는의 데이터를 사용하여 워크플로의 다음 브랜치를 IsHelloWorldExample 선택합니다. 첫 번째 규칙이 일치하면 워크플로가 대기 상태에서 일시 중지된 다음는 체크포인트로 이동하고 워크플로가 성공적으로 종료되기 전에 병렬 상태에서 두 작업을 실행합니다. 일치 항목이 없으면 워크플로는 상태 머신을 중지하기 전에 기본적으로 실패 상태로 설정됩니다.

대기 상태는 더 많은 작업을 수행하기 전에 지연하려는 경우에 유용할 수 있습니다. 아마도 워크플로는 주문 입력 후 30초를 기다릴 것이므로 고객은 잘못된 배송 주소를 확인하고 수정할 시간이 있습니다.

병렬 상태는 데이터에서 여러 프로세스를 실행할 수 있습니다. 워크플로가 주문 티켓을 인쇄하고, 인벤토리를 업데이트하고, 일일 판매 보고서를 동시에 늘릴 수 있습니다.

시작 Hello World 워크플로의 그림 이미지

워크플로 코드 보기(ASL)

첫 번째 상태 머신은 실제로 매우 세부적이므로 코드를 검토하여 자세히 알아봅니다.

상태 머신은 상태 머신을 선언적으로 설명하는 JSON기반 언어를 설명하는 오픈 소스 사양인 Amazon States Language(ASL)를 사용하여 정의됩니다.

전체 상태 시스템 정의를 보려면

  1. 코드를 보려면 { } ASL 코드 버튼을 선택합니다.

  2. 왼쪽의 코드를 보고 오른쪽의 상태 머신 그래프와 비교합니다.

  3. 캔버스에서 검토할 몇 가지 상태를 선택합니다. 예를 들어 선택 상태를 선택합니다.

코드 보기의 그림 이미지

코드 보기에서 상태 정의가 어떻게 강조 표시되는지 알고 계셨나요?

Inspector에서 코드를 보려면

  1. 다시 디자인 모드로 전환합니다.

  2. 오른쪽의 Inspector 패널을 확장합니다.

  3. Canvas의 워크플로 그래프에서 선택 상태를 선택합니다.

  4. 검사기 패널에서 정의 토글을 선택합니다.

다른 상태를 선택하세요. 선택한 각 상태의 ASL 코드가 어떻게 보기로 스크롤되고 강조 표시되는지 확인합니다.

(실제) 상태 시스템 생성

경고: 지금 상태 시스템의 이름을 지정하세요!

상태 머신을 생성한 후에는 이름을 바꿀 수 없습니다. 상태 머신을 저장하기 전에 이름을 선택합니다.

지금까지는 상태 시스템의 초안을 작업해 왔습니다. 아직 생성된 리소스가 없습니다.

상태 시스템의 이름을 바꾸고 생성하려면

  1. 구성 모드를 선택합니다.

  2. 상태 시스템 이름에를 입력합니다. MyFirstStateMachine

  3. 권한의 경우 기본값인 새 역할 생성을 수락합니다.

  4. 생성 버튼을 선택하여 실제로 상태 시스템을 생성합니다.

상태 시스템과 새 IAM 역할이 생성되었다는 알림이 표시됩니다.

상태 시스템을 시작하는 옵션이 자동으로 표시됩니다. 다음 단계에서이 작업을 수행합니다.

시작 Hello World 워크플로의 그림 이미지
워크플로 생성 완료!

Step Functions에서 워크플로와 IAM 역할을 생성했습니다. 이제 상태 시스템을 시작할 준비가 되었습니다.

2단계 - 상태 시스템 시작

상태 머신이 생성된 후 워크플로 실행을 시작할 수 있습니다.

워크플로는 선택적으로 상태에서 사용되어 통합 서비스로 전송되고 다음 상태로 전달될 수 있는 입력을 사용합니다.

Hello World 상태 머신은 독립형이며 입력이 필요하지 않습니다.

시작하기의 그림 이미지

상태 머신을 시작하려면

  1. 실행 hello001 이름에를 입력합니다.

  2. 입력 필드는 비워 둡니다.

  3. 실행 시작 버튼을 선택합니다.

워크플로 시작을 위한 그림 이미지입니다.

실행 세부 정보 검토

시작 직후 처음 두 상태가 성공한 것을 볼 수 있습니다.

잠시 기다린 후 나머지 상태 전환이 실행되어 워크플로를 완료합니다.

선택 상태(헬로 월드 예입니까?)가 X초 대기 상태로 분기하기로 결정한 방법이 궁금하십니까?

  1. 힌트: 상태 시스템의 첫 번째 단계에는 브랜치 결정에 필요한 데이터가 포함됩니다.

  2. 그래프 보기에서 실행 중 진행 상황을 모니터링하고 각 상태에 대한 세부 정보를 탐색할 수 있습니다.

  3. 첫 번째 통과 상태(변수 설정 및 상태 출력)를 선택한 다음 입력/출력 탭을 검토합니다.

상태 입력이 비어 있지만 상태 출력에는의 값을 IsHelloWorldExample로 설정하는이 포함되어 JSON 있습니다true.

실행 001

그래프 보기에서 테이블 보기로 전환하여 이름, 유형 및 상태별 상태 목록을 확인합니다.

실행 001 테이블 보기
작은 정보

이전 스크린샷의 기간타임라인 필드를 기록해 둡니다. 어떤 상태가 다른 상태보다 더 많은 시간이 걸리는지 한눈에 확인할 수 있습니다.

이 실행 세부 정보 페이지에서는 이벤트 보기와 상태 보기라는 두 가지 보기를 추가로 탐색할 수 있습니다.

이벤트 보기는 상태 간 흐름에 대한 세부적인 세부 보기입니다.

이벤트 보기 테이블의 첫 번째 PassStateEnteredPassStateExited 이벤트를 확장하여 상태가 입력을 받지 않고, CheckpointCount 값 0이라는 변수를 할당하고, 이전에 본 출력을 생성하는 방법을 확인합니다.

실행 001 이벤트 보기

마지막으로 테이블 보기와 유사한 상태 보기가 있습니다. 상태 보기 테이블에서 상태를 선택적으로 확장하여 각 상태의 입력 및 출력만 볼 수 있습니다.

실행 001 상태 보기
축하합니다! 첫 번째 Step Functions 상태 시스템을 실행했습니다.

통과 상태를 사용하여 워크플로에 정적 데이터를 추가하는 것은 특히 문제 해결에 공통적인 패턴입니다.

다음 단계에서는 상태 시스템 입력을 동적으로 설정할 수 있도록 워크플로를 업데이트합니다.

3단계 - 외부 입력 처리

워크플로 내에서 값을 IsHelloWorldExample 상수 값으로 설정하는 것은 현실적이지 않습니다. 상태 시스템이 다양한 입력 데이터에 응답할 것으로 예상해야 합니다.

이 단계에서는 외부 JSON 데이터를 워크플로에 대한 입력으로 사용하는 방법을 보여줍니다.

외부 입력 처리

하드 코딩된 입력 제거

먼저 첫 번째 통과 상태의 출력에서 하드 코딩된 값을 바꿉니다.

  1. 페이지 오른쪽 상단에 있는 상태 시스템 편집 버튼을 선택하여 Hello World 상태 시스템을 편집합니다.

  2. 시작 후 첫 번째 통과 상태(변수 설정 및 상태 출력)를 선택한 다음 출력 탭을 선택합니다.

  3. 출력을 JSON다음 로 바꿉니다.

    { "IsHelloWorldExample": "{% $states.input.hello_world %}", "ExecutionWaitTimeInSeconds": "{% $states.input.wait %}" }
  4. 상태 머신을 저장합니다.

업데이트된 상태 출력은 JSONata 표현식을 사용하여 예약된 $states 변수에서 입력 데이터를 가져옵니다. 이러한 값은 다음 상태의 입력이 되도록 출력으로 다음 상태로 전달됩니다.

입력 데이터로 업데이트된 워크플로 실행

그런 다음 워크플로를 실행하고 외부 입력 데이터를 로 제공합니다JSON.

  1. 실행 버튼을 선택하여 워크플로를 실행합니다.

  2. 이름에는 무작위로 생성된 ID를 사용합니다.

  3. JSON 입력 필드에 다음을 사용합니다.

    { "wait" : 20, "hello_world": true }
  4. 실행 시작 버튼을 선택합니다.

상태 시스템 실행은 훨씬 더 오래(20초) 대기해야 하지만, 결국 입력한 입력을 사용하여 성공해야 합니다.

그래프 보기에서 첫 번째 통과 상태의 입력/출력을 검토합니다. 입력한 입력이 출력으로 변환된 방법을 확인합니다. 또한 실행 세부 정보 페이지 상단의 실행 입력 및 출력을 살펴보십시오. 두 위치 모두 실행을 시작하는 데 사용한 입력을 표시합니다.

작은 정보

hello_worldfalse로 설정된 새 실행을 실행하면 어떻게 되나요? 사용해보기!

워크플로 실행 검토

이제 워크플로를 몇 번 실행했으므로 실행 세부 정보를 검토하여 워크플로 실행을 검토합니다.

실행 세부 정보를 검토하려면

  1. 탐색 이동 탐색기 또는 왼쪽 메뉴에서 상태 머신을 선택합니다.

  2. 상태 머신을 선택합니다.

실행 탭에는 다음 스크린샷과 유사한 실행 목록이 표시됩니다.

hello 워크플로 실행의 샘플 목록을 보여주는 예시 스크린샷입니다.

마지막 참고 사항: 워크플로 실행 이름은 고유해야 하며 재사용할 수 없습니다. 이 자습서에서는 짧은 이름(hello001)을 제안했지만 항상 프로덕션 워크로드에 고유한 명명 규칙을 사용하는 것이 좋습니다.

작은 정보

축하합니다! 워크플로를 실행할 때마다 달라질 수 있는 외부 입력을 처리하도록 워크플로를 수정했습니다.

4단계 - 서비스 통합

Step Functions 상태 머신은 통합을 사용하여 220개 이상의 AWS 서비스를 호출할 수 있습니다. AWS 서비스는 상태 머신에 대해 10,000개 이상의 잠재적 API 작업을 제공합니다. AWS SDK

이 단계에서는 감정 분석을 위한 Amazon Comprehend 작업을 통합하여 상태 시스템 입력을 처리합니다.

서비스 통합은 다음 세 가지 서비스 통합 패턴 중 하나를 사용합니다.

  1. 응답 요청(기본값) - HTTP 응답을 기다린 다음 즉시 다음 상태로 진행합니다.

  2. 작업 실행(.sync) - 다음 단계로 이동하기 전에 작업이 완료될 때까지 기다립니다.

  3. 콜백 대기(.waitForTaskToken) - 외부 프로세스에서 작업 토큰을 반환할 때까지 워크플로를 일시 중지합니다.

서비스 통합을 보여주는 그림 스크린샷.

첫 번째 통합의 경우 요청 응답(기본값) 통합 패턴을 사용합니다.

통합은 어떻게 작동하나요?

작업 상태는 상태 시스템에서 수행하는 단일 작업 단위를 나타냅니다. 상태 머신에서의 모든 작업은 작업에 의해 수행됩니다.

태스크는 일반적으로 다른 서비스의 API 작업에 입력을 전달하여 작업을 수행한 다음 자체 작업을 수행합니다. , , Credentials, 등의 여러 필드를 사용하여 작업 수행 방식을 지정할 수 Retry Catch TimeoutSeconds있습니다. 에서 작업에 대해 자세히 알아볼 수 있습니다Task 워크플로 상태.

통합을 사용하려면 AWS SDK 호출API서비스 이름 및를 지정합니다. 일부 통합에는 파라미터도 필요합니다.

Amazon States Language를 사용하여 작업 상태의 리소스 필드에 작업을 지정할 AWS API 수 있습니다. 선택적으로 서비스 이름에 서비스 통합 유형을 추가할 수 있습니다.

API 작업을 지정하려면 다음 리소스 이름 템플릿을 사용합니다.

arn:aws:states:::aws-sdk:serviceName:apiAction.[serviceIntegrationPattern]
파라미터 이름 대/소문자

API 작업은 camelCase (소문자 이니셜)이지만 Pascal 사례(대문자 이니셜)ParameterNames입니다.

리소스 이름의 예

  • arn:aws:states:::aws-sdk:ec2:describeInstances는 Amazon를 호출한 결과를 반환합니다EC2 describeInstances API.

  • arn:aws:states:::aws-sdk:s3:listBuckets는 Amazon S3 listBuckets API를 호출한 결과를 반환합니다.

  • arn:aws:states:::aws-sdk:sfn:startExecution는 중첩된 Step Functions 상태 시스템 실행을 시작하고 해당 워크플로의 결과를 반환합니다.

Step Functions가 Task 상태를 사용하여 다른 서비스를 호출할 때 기본 패턴은 요청 응답입니다. Step Functions는 요청 응답 통합 패턴을 사용하여 서비스를 호출하고 응답을 수신한 후 즉시 다음 상태로 진행합니다.

감정 감지 통합

4.1단계 - 감정 분석 상태 추가

  1. MyFirstStateMachine 상태 머신을 편집합니다.

  2. 상태 브라우저작업 패널에서를 검색합니다DetectSentiment.

  3. Comprehend DetectSentiment선택 상태의 기본 브랜치로 끌어서 놓습니다.

  4. 실패 상태를 선택하고 삭제합니다.

  5. 상태 브라우저흐름 탭에서 다음 성공 상태를 드래그합니다DetectSentiment.

4.2단계 - 감정 분석 상태 구성

  1. Comprehend 단계를 선택하여 Inspector 패널에서 구성합니다.

  2. 인수 및 출력 탭을 선택한 다음 인수를 다음 로 바꿉니다. JSON

    { "LanguageCode": "en", "Text": "{% %}" }
  3. 백분율 기호: {% %} 및 유형 사이에 커서를 놓습니다. $

  4. 편집기에서 자동 완성을 사용하여 states,

    그런 다음 .를 입력하고 context를 선택합니다.

    그런 다음 .를 입력하고 Execution를 선택합니다.

    그런 다음 .를 입력하고 Input를 선택합니다.

    마지막으로 .feedback_comment를 입력하여 컨텍스트 객체에서 초기 입력을 검색합니다.

이러한 자동 완료 옵션을 선택한 후에는 상태 인수에 JSON 대해 다음 사항이 있어야 합니다.

{ "LanguageCode": "en", "Text": "{% $states.context.Execution.Input.feedback_comment %}" }
편집기 자동 완성 사용

편집기 자동 완성을 사용하면 옵션을 탐색할 수 있습니다.

자동 완성은 변수, 컨텍스트 객체가 포함된 예약된 $states 변수, 정의가 포함된 사용 가능한 함수를 나열합니다.

4.3단계 - 자격 증명 정책 구성

워크플로를 실행하려면 먼저 상태 머신이 외부 서비스에 대한 API 호출을 수행할 수 있도록 역할과 정책을 생성해야 합니다.

Step Functions에 대한 IAM 역할을 생성하려면

  1. 새 탭의 IAM 콘솔로 이동하여 역할을 선택합니다.

  2. [Create a new role]을 선택합니다.

  3. 신뢰할 수 있는 엔터티 유형에서를 선택합니다AWS Service.

  4. 사용 사례에서를 선택합니다Step Functions.

  5. 권한 추가에서 다음을 선택하여 기본 정책을 수락합니다. 역할을 생성한 후 Comprehend에 대한 정책을 추가합니다.

  6. 이름HelloWorldWorkflowRole을 입력합니다.

  7. 역할 생성을 선택합니다.

Amazon ComprehendHelloWorldWorkflowRole용에 정책을 추가하려면

  1. HelloWorldWorkflowRole 역할을 선택하고 편집합니다.

  2. 권한 추가를 선택한 다음 인라인 정책 생성을 선택합니다.

  3. 서비스에 대해 Comprehend를 선택합니다.

  4. 읽기에서 DetectSentiment를 선택한 다음 다음을 선택합니다.

  5. 정책 이름DetectSentimentPolicy를 입력한 다음 정책 생성을 입력합니다. 다음과 JSON비슷한 정책을 로 생성했어야 합니다.

    { "Version": "2012-10-17", "Statement": [ { "Action": [ "comprehend:DetectSentiment" ], "Resource": [ "*" ], "Effect": "Allow" } ] }

Step Functions 상태 시스템에 IAM 역할을 연결하려면

  1. 상태 시스템 편집으로 돌아가서 구성 탭을 선택합니다.

  2. 실행 역할 드롭다운에서를 선택합니다HelloWorldWorkflowRole.

  3. 상태 머신을 저장합니다.

4.4단계 - 상태 시스템 실행

입력을 JSON 위해 다음을 사용하여 상태 시스템 실행을 시작합니다.

{ "hello_world": false, "wait": 42, "feedback_comment" : "This getting started with Step Functions workshop is a challenge!" }

올바른 정책이 없으면 다음과 비슷한 권한 오류가 발생합니다.

User: arn:aws:sts::123456789012:assumed-role/StepFunctions-MyStateMachine-role is not authorized to perform: comprehend:DetectSentiment because no identity-based policy allows the comprehend:DetectSentiment action (Service: Comprehend, Status Code: 400, Request ID: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)

이전 오류 메시지는 상태 시스템에 외부 서비스를 사용할 권한이 없음을 알려줍니다. 단계로 돌아가서 자격 증명 정책을 구성했는지 확인합니다.

학습한 내용을 연습하세요!

더 복잡한 워크플로를 살펴보기 전에 다음 작업으로 학습한 내용을 연습합니다.

  • DetectSentiment 단계를 검토합니다. 다양한 보기에서 입력/출력을 살펴보고 감정 감지 결과를 확인합니다.

  • 테이블 보기에서 DetectSentiment 상태의 지속 시간을 찾습니다.

  • JSON 입력에서 주석을 변경한 다음 상태 머신을 다시 실행합니다.

감정 분석 결과에 대한 자세한 내용은 Amazon Comprehend - 감정을 참조하세요.

요청 응답 통합에 대해 생각할 수 있는 한 가지 방법은 응답은 일반적으로 요청의 승인만 나타냅니다. 그러나 감정 분석과 같은 일부 통합에서는 확인이 실제로 작업 완료를 나타냅니다.

키 학습은 Task 상태가 요청 응답 통합에서 기본 작업을 기다리지 않는다는 것입니다. 응답을 기다리려면 작업 실행(.sync) 서비스 통합 패턴을 탐색해야 합니다.

축하합니다!

첫 번째 상태 시스템을 생성하고 요청 응답 패턴을 사용하여 감정 분석 작업을 통합했습니다.

리소스 정리

다음 단계에 따라 생성한 리소스를 정리합니다.

  1. AWS 콘솔의 Step Functions 페이지로 이동합니다.

  2. 왼쪽의 탐색 창에서 상태 시스템을 선택합니다.

  3. MyFirstStateMachine 선택

  4. IAM 역할을 삭제하려면

    1 - IAM 역할의 링크를 따라 새 탭의 IAM 역할 페이지로 이동합니다. 사용자 지정 관련 역할을 삭제합니다.

    2 - IAM 역할에서가 포함된 자동 생성된 역할을 검색합니다MyFirstStateMachine. 자동 생성된 역할을 삭제합니다.

  5. Step Functions 콘솔 탭으로 돌아가 작업 드롭다운을 선택한 다음 삭제를 선택하여 상태 시스템을 삭제합니다.

이제 상태 시스템 및 관련 역할이 성공적으로 삭제되어야 합니다.