자습서 3: 워크플로에 if-else 조건 구현 - AWS Step Functions

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

자습서 3: 워크플로에 if-else 조건 구현

Choice 상태를 사용하여 워크플로에 if-else 조건을 구현할 수 있습니다. 지정된 조건이 true 또는 false로 평가되는지에 따라 워크플로 실행 경로를 결정합니다.

이 자습서에서는 자습서 2에서 사용된 RandomNumberforCredit Lambda 함수가 반환한 적용된 크레딧 금액이 특정 임계값 한도를 초과하는지 확인하는 조건부 논리를 추가합니다. 금액이 임계값 한도를 초과하는 경우 사람이 신청을 승인해야 합니다. 그렇지 않으면 신청이 자동 승인되고 다음 단계로 이동합니다.

작업 토큰이 반환될 때까지 워크플로 실행을 일시 중지하여 인적 상호 작용 단계를 모방합니다. 이렇게 하려면 이 자습서에서 사용할 AWS SDK 통합, 즉 Amazon Simple Notification Service에 작업 토큰을 전달합니다. SendTaskSuccess API 직접 호출을 통해 작업 토큰을 다시 수신할 때까지 워크플로 실행이 일시 중지됩니다. 작업 토큰 사용에 대한 자세한 내용은 작업 토큰을 사용하여 콜백 대기를 참조하세요.

워크플로 프로토타입에 사람의 승인 및 자동 승인 단계를 이미 정의했으므로 이 자습서에서는 먼저 콜백 토큰을 수신하는 Amazon SNS 주제를 만듭니다. 그런 다음 Lambda 함수를 만들어 콜백 기능을 구현합니다. 마지막으로 이러한 AWS 서비스 통합의 세부 정보를 추가하여 워크플로 프로토타입을 업데이트합니다.

1단계: 콜백 토큰을 수신하는 Amazon SNS 주제 만들기

인적 상호 작용 단계를 구현하려면 Amazon Simple Notification Service 주제에 게시하고 콜백 작업 토큰을 이 주제에 전달합니다. 콜백 작업은 작업 토큰이 페이로드와 함께 반환될 때까지 워크플로 실행을 일시 중지합니다.

  1. Amazon SNS 콘솔을 열고 표준 주제 유형을 만듭니다. 주제를 만드는 방법은 Amazon Simple Notification Service 개발자 가이드Amazon SNS 주제 생성을 참조하세요.

  2. 주제 이름을 TaskTokenTopic으로 지정합니다.

  3. 주제 ARN을 복사하여 텍스트 파일로 저장해야 합니다. 사용자 Wait for human approval 상태에 대한 서비스 통합을 지정하는 동안에 주제 ARN이 필요합니다. 주제 ARN 예제는 다음과 같습니다.

    arn:aws:sns:us-east-2:123456789012:TaskTokenTopic
  4. 주제에 대한 이메일 기반 구독을 만든 다음 구독을 확인합니다. 주제 구독 방법은 Amazon Simple Notification Service 개발자 안내서주제 구독 생성을 참조하세요.

2단계: Lambda 함수를 만들어 콜백 처리

콜백 기능을 처리하려면 Lambda 함수를 정의하고 1단계에서 만든 Amazon SNS 주제를 이 함수의 트리거로 추가합니다. 작업 토큰을 사용하여 Amazon SNS 주제에 게시하면 Lambda 함수가 게시된 메시지의 페이로드와 함께 간접적으로 호출됩니다.

2.1단계: Lambda 함수를 만들어 콜백 처리

이 함수에서는 크레딧 한도 승인 요청을 처리하고 SendTaskSuccess API 직접 호출을 사용하여 요청 결과를 성공으로 반환합니다. 이 Lambda 함수는 Amazon SNS 주제로부터 받은 작업 토큰도 반환합니다.

간소화되도록 인적 상호 작용 단계에 사용된 Lambda 함수는 모든 작업을 자동으로 승인하고 SendTaskSuccess API 직접 호출을 사용하여 작업 토큰을 반환합니다. Lambda 함수 이름을 callback-human-approval로 지정할 수 있습니다.

  1. 새 탭이나 창에서 Lambda 콘솔을 열고 callback-human-approval이라는 Node.js 16.x Lambda 함수를 만듭니다. 콘솔을 사용하여 Lambda 함수를 만드는 방법은 AWS Lambda 개발자 안내서콘솔에서 Lambda 함수 생성을 참조하세요.

  2. callback-human-approval 페이지에서 코드 소스 영역의 기존 코드를 다음 코드로 바꿉니다.

    // Sample Lambda function that will automatically approve any task whenever a message is published to an Amazon SNS topic by Step Functions. console.log('Loading function'); const AWS = require('aws-sdk'); const resultMessage = "Successful"; exports.handler = async (event, context) => { const stepfunctions = new AWS.StepFunctions(); let message = JSON.parse(event.Records[0].Sns.Message); let taskToken = message.TaskToken; console.log('Message received from SNS:', message); console.log('Task token: ', taskToken); // Return task token to Step Functions let params = { output: JSON.stringify(resultMessage), taskToken: taskToken }; console.log('JSON Returned to Step Functions: ', params); let myResult = await stepfunctions.sendTaskSuccess(params).promise(); console.log('State machine - callback completed..'); return myResult; };
  3. 이 창을 열어 두고 다음 섹션의 단계를 수행하여 추가 작업을 수행합니다.

2.2단계: Amazon SNS 주제를 Lambda 함수의 트리거로 추가

이 자습서의 1단계에서 만든 Amazon SNS 주제를 이 자습서의 2.1단계에서 만든 Lambda 함수의 트리거로 추가하면 Amazon SNS 주제에 게시할 때마다 Lambda 함수가 트리거됩니다. 작업 토큰을 사용하여 Amazon SNS 주제에 게시하면 Lambda 함수가 게시된 메시지의 페이로드와 함께 간접적으로 호출됩니다. Lambda 함수의 트리거 구성에 대한 자세한 내용은 AWS Lambda 개발자 안내서트리거 구성을 참조하세요.

  1. callback-human-approval Lambda 함수의 함수 개요 섹션에서 트리거 추가를 선택합니다.

  2. 트리거 드롭다운 목록에서 SNS를 트리거로 선택합니다.

  3. SNS 주제이 자습서의 1단계에서 만든 Amazon SNS 주제 이름을 입력하고 나타나는 드롭다운 목록에서 주제를 선택합니다.

  4. 추가(Add)를 선택합니다.

  5. 이 창을 열어 두고 다음 섹션의 단계를 수행하여 추가 작업을 수행합니다.

2.3단계: Lambda 함수 IAM 역할에 필요한 권한 제공

SendTaskSucess API 직접 호출을 사용하여 작업 토큰을 반환할 수 있도록 Step Functions에 액세스할 수 있는 권한을 callback-human-approval Lambda 함수에 제공해야 합니다.

  1. callback-human-approval 페이지에서 구성 탭을 선택한 다음 권한을 선택합니다.

  2. 실행 역할에서 역할 이름을 선택하여 AWS Identity and Access Management 콘솔의 역할 페이지로 이동합니다.

  3. 필수 권한을 추가하라면 권한 추가, 정책 연결을 차례로 선택합니다.

  4. 검색 상자에 AWSStepFunctions을 입력한 다음 Enter 키를 누릅니다.

  5. AWSStepFunctionsFullAccess를 선택한 다음 아래로 스크롤하여 정책 연결을 선택합니다. 그러면 callback-human-approval Lambda 함수 역할에 필요한 권한이 포함된 정책이 추가됩니다.

3단계: 워크플로 업데이트 - Choice 상태에 if-else 조건부 논리 추가

Step Functions 콘솔에서 Choice 상태를 사용하여 워크플로의 조건부 논리를 정의합니다. RandomNumberforCredit Lambda 함수에서 반환한 출력이 5000 미만이면 요청된 크레딧이 자동 승인됩니다. 반환된 출력이 5000보다 크거나 같으면 워크플로 실행은 크레딧 한도 승인을 위한 인적 상호 작용 단계로 진행됩니다.

Choice 상태에서는 비교 연산자를 사용하여 입력 변수를 특정 값과 비교합니다. 상태 시스템 실행을 시작하는 동안 입력 변수를 실행 입력으로 지정하거나 이전 단계의 출력을 현재 단계의 입력으로 사용할 수 있습니다. 기본적으로 단계 출력은 Payload 변수에 저장됩니다. Payload 변수 값을 사용하여 Choice 상태를 비교하려면 다음 절차와 같이 $ 구문을 사용합니다.

정보가 한 상태에서 다른 상태로 이동하는 방식과 워크플로에 입력과 출력을 지정하는 방법은 자습서 7: 입력 및 출력 구성Step Functions에서 입력 및 출력 처리를 참조하세요.

참고

Choice 상태에서 비교하기 위해 상태 시스템 실행 입력에 지정된 입력 변수를 사용하는 경우 $.variable_name 구문을 사용하여 비교를 수행합니다. 예를 들어 변수를 비교하려면(예: myAge) $.myAge 구문을 사용합니다.

이 단계에서 Choice 상태는 Get credit limit 상태로부터 입력을 수신하므로 Choice 상태 구성에 $ 구문을 사용합니다. Choice 상태 구성의 $.variable_name 구문을 사용하여 이전 단계의 출력을 참조할 때 상태 시스템 실행 결과가 어떻게 달라지는지 살펴보려면 자습서 8잘못된 경로 Choice 상태 오류 디버깅 섹션을 참조하세요.

Choice 상태를 사용하여 if-else 조건부 논리 추가하기
  1. 자습서 1: 상태 시스템의 프로토타입 만들기에서 만든 워크플로 프로토타입이 포함된 Step Functions 콘솔 창을 엽니다.

  2. Credit applied >= 5000? 상태를 선택하고 구성 탭에서 다음과 같이 조건부 로직을 지정합니다.

    1. 선택 규칙규칙 #1 타일에서 편집 아이콘을 선택하여 첫 번째 선택 규칙을 정의합니다.

    2. 조건 추가를 선택합니다.

    3. 규칙 #1 조건 대화 상자의 변수$를 입력합니다.

    4. 연산자미만을 선택합니다.

    5. 숫자 상수를 선택한 다음 드롭다운 목록 옆에 있는 필드에 5000을 입력합니다.

    6. 조건 저장을 선택합니다.

    7. 다음 상태: 드롭다운 목록에 Auto-approve limit를 선택합니다.

    8. 새 선택 규칙 추가를 선택한 다음, 2.b~2.f 하위 단계를 반복하여 크레딧 금액이 5000보다 크거나 같을 때 두 번째 선택 규칙을 정의합니다. 연산자에서 크거나 같음을 선택합니다.

    9. 다음 상태: 드롭다운 목록에서 Wait for human approval을 선택합니다.

    10. 기본 규칙 상자에서 편집 아이콘을 선택하여 기본 선택 규칙을 정의한 다음 기본 상태 드롭다운 목록에서 Wait for human approval을 선택합니다. 기본 규칙을 정의하여 Choice 상태 조건 중 어느 것도 true 또는 false로 평가되지 않으면 전환할 다음 상태를 지정합니다.

  3. Wait for human approval 상태를 다음과 같이 구성합니다.

    1. 구성 탭에서 주제에 Amazon SNS 주제 이름인 TaskTokenTopic을 입력하고 드롭다운 목록에 나타나는 이름을 선택합니다.

    2. 메시지의 드롭다운 목록에서 메시지 입력을 선택합니다. 메시지 필드에서 Amazon SNS 주제에 게시할 메시지를 지정합니다. 이 자습서에서는 작업 토큰을 메시지로 게시합니다.

      작업 토큰을 사용하면 외부 프로세스가 완료되고 작업 토큰이 반환될 때까지 표준 유형 Step Functions 워크플로를 일시 중지할 수 있습니다. .waitForTaskToken 서비스 통합 패턴을 지정하여 Task 상태를 콜백 작업으로 지정하면 작업 토큰이 생성되고 작업이 시작될 때 컨텍스트 객체에 배치됩니다. 컨텍스트 객체는 실행 중에 사용할 수 있는 내부 JSON 구조로, 여기에 상태 시스템과 실행에 대한 정보가 포함됩니다. 컨텍스트 객체에 대한 자세한 내용은 컨텍스트 객체를 참조하세요.

    3. 표시되는 상자에 다음을 메시지로 입력합니다.

      { "TaskToken.$": "$$.Task.Token" }
    4. 콜백 대기 확인란을 선택합니다.

    5. 나타나는 대화 상자에서 완료를 선택합니다.

  4. 이 창을 열어 두고 다음 자습서로 진행하여 추가 작업을 수행합니다.

다음 단계

다음 자습서에서는 여러 작업을 동시에 수행하는 방법을 알아봅니다.