Step Functions의 Lambda 함수를 사용하여 루프를 반복합니다. - AWS Step Functions

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

Step Functions의 Lambda 함수를 사용하여 루프를 반복합니다.

이 자습서에서는 스테이트 머신과 다음을 사용하는 디자인 패턴을 구현합니다. AWS Lambda 루프를 특정 횟수만큼 반복하는 함수입니다.

상태 머신에서 루프 횟수를 추적해야 하는 경우 언제든 이 디자인 패턴을 사용하십시오. 이것을 실행하면 대형 작업 또는 장시간 실행을 작은 덩어리로 나누거나 정해진 수의 이벤트 후에 실행을 종료할 수 있습니다. 비슷한 구현을 사용하여 장기 실행 실행을 주기적으로 종료하고 다시 시작하여 서비스 할당량을 초과하지 않도록 할 수 있습니다. AWS Step Functions, AWS Lambda또는 기타 AWS 서비스.

시작하기 전에 Lambda를 사용하는 Step Functions 상태 시스템 만들기 자습서를 살펴보고 Lambda와 Step Functions를 함께 사용하는 방법을 숙지해야 합니다.

1단계: 계산을 반복하는 Lambda 함수 만들기

Lambda 함수를 사용하면 상태 시스템에서 루프의 반복 수를 추적할 수 있습니다. 다음 Lambda 함수는 count, indexstep에 대한 입력값을 수신합니다. 그런 다음 이들 값을 업데이트된 indexcontinue라는 부울 값과 함께 반환합니다. Lambda 함수는 indexcount 미만인 경우에 continuetrue로 설정합니다.

그러면 상태 머신이 continuetrue일 경우 일부 애플리케이션 로직을 실행하고 false일 경우 종료되는 Choice 상태를 구현합니다.

Lambda 함수를 생성하려면

  1. Lambda 콘솔에 로그인한 다음 함수 생성을 선택합니다.

  2. 함수 생성 페이지에서 처음부터 새로 작성을 선택합니다.

  3. 기본 정보 섹션에서 다음과 같이 Lambda 함수를 구성합니다.

    1. [함수 이름]에 Iterator을 입력합니다.

    2. 런타임에서 Node.js 를 선택합니다.

    3. 기본 실행 역할 변경에서 기본 Lambda 권한을 사용하여 새 역할 생성을 선택합니다.

    4. 함수 생성(Create function)을 선택합니다.

  4. Lambda 함수의 다음 코드를 코드 소스에 복사합니다.

    export const handler = function (event, context, callback) { let index = event.iterator.index let step = event.iterator.step let count = event.iterator.count index = index + step callback(null, { index, step, count, continue: index < count }) }

    이 코드는 count, indexstep에 대한 입력값을 수신합니다. 이 코드는 indexstep 값만큼 증가시키고 이들 값과 부울 continue을 반환합니다. indexcount보다 작으면 continue 값이 true입니다.

  5. 배포(Deploy)를 선택합니다.

2단계: Lambda 함수 테스트

숫자 값으로 Lambda 함수를 실행하여 작동하는지 확인합니다. 반복을 모방하는 Lambda 함수에 입력 값을 제공할 수 있습니다.

Lambda 함수 테스트하기

  1. 테스트를 선택합니다.

  2. 테스트 이벤트 구성 대화 상자에서 이벤트 이름 상자에 TestIterator를 입력합니다.

  3. 예제 데이터를 다음으로 바꿉니다.

    { "Comment": "Test my Iterator function", "iterator": { "count": 10, "index": 5, "step": 1 } }

    이러한 값은 반복 도중에 상태 머신에서 얻게 되는 내용처럼 보입니다. Lambda 함수는 인덱스를 증가시키고 인덱스가 다음보다 작을 때 값을 true 반환합니다continue. count 이 테스트에서는 인덱스가 이미 5까지 증가한 상태입니다. 테스트는 로 증가하고 index 로 설정됩니다. 6 continue true

  4. 생성(Create)을 선택합니다.

  5. Lambda 함수를 테스트하려면 [테스트] 를 선택합니다.

    테스트 결과는 실행 결과 탭에 표시됩니다.

  6. 실행 결과 탭을 선택하여 출력을 확인합니다.

    { "index": 6, "step": 1, "count": 10, "continue": true }
    참고

    index9 설정하고 다시 테스트하면 index 증분은 로10, 그리고 continue 계속 증가할 것입니다. false

3단계: 상태 머신 생성

Lambda 콘솔을 종료하기 전에...

Lambda ARN 함수를 복사합니다. 메모에 붙여넣습니다. 다음 단계에서 이 정보를 사용할 것입니다.

다음으로 다음과 같은 상태를 가진 스테이트 머신을 생성합니다.

  • ConfigureCountcountindex, 및 의 기본값을 설정합니다step.

  • Iterator— 이전에 생성한 Lambda 함수를 참조하여 에 구성된 값을 전달합니다. ConfigureCount

  • IsCountReached— 함수에서 반환된 값을 기반으로 루프를 계속하거나 Done 상태로 진행하는 선택 상태입니다. Iterator

  • ExampleWork— 수행해야 하는 작업을 위한 스텁입니다. 이 예시에서는 워크플로에 Pass 상태가 있지만 실제 솔루션에서는 a를 사용하는 경우가 많습니다. Task

  • Done— 워크플로의 종료 상태.

콘솔에서 상태 머신을 만들려면:

  1. Step Functions 콘솔을 열고 상태 시스템 생성을 선택합니다.

    중요

    스테이트 머신은 동일한 위치에 있어야 합니다. AWS 계정 및 지역을 Lambda 함수로 사용하십시오.

  2. 템플릿을 선택합니다.

  3. 코드 창에서 상태 머신을 JSON 정의하는 다음을 붙여넣습니다.

    Amazon States Language에 대한 자세한 내용은 상태 시스템 구조를 참조하세요.

    { "Comment": "Iterator State Machine Example", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "count": 10, "index": 0, "step": 1 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:Iterate", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "ExampleWork" } ], "Default": "Done" }, "ExampleWork": { "Comment": "Your application logic, to run a specific number of times", "Type": "Pass", "Result": { "success": true }, "ResultPath": "$.result", "Next": "Iterator" }, "Done": { "Type": "Pass", "End": true } } }
  4. Iterator Resource필드를 이전에 생성한 Iterator Lambda ARN 함수용 로 바꾸십시오.

  5. Config를 선택하고 상태 머신의 이름 (예:) 을 입력합니다. IterateCount

    참고

    상태 머신, 실행 및 활동 태스크의 이름은 80자를 초과하면 안 됩니다. 이러한 이름은 계정별로 고유해야 하며 AWS 지역이며 다음 중 어느 것도 포함해서는 안 됩니다.

    • 공백

    • 와일드카드 문자 (? *)

    • 괄호 문자(< > { } [ ])

    • 특수 문자 (" # % \ ^ | ~ ` $ & , ; : /)

    • 제어 문자(\\u0000 - \\u001f 또는 \\u007f - \\u009f).

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

  6. 유형에는 기본값인 Standard를 그대로 사용합니다. 권한에서 새 역할 생성을 선택합니다.

  7. [Create] 를 선택한 다음 역할 생성을 확인합니다.

4단계: 새로운 실행 시작

상태 머신을 생성했으면 실행을 시작할 수 있습니다.

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

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

    ASCII비이름 및 로깅

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

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

    상태 머신의 신규 실행이 시작되면서 작동 중인 실행이 나타납니다.

    진행 상태를 나타내는 파란색 이터레이터 상태를 보여주는 상태 머신 그래프입니다.

    실행은 단계적으로 증가하며 Lambda 함수를 사용하여 횟수를 추적합니다. 각 반복에서는 상태 머신의 ExampleWork 상태에서 참조한 예시 작업을 수행합니다.

    카운트가 상태 머신의 ConfigureCount 상태에서 지정된 횟수에 도달하면 실행이 반복을 중지하고 종료합니다.

    이터레이터와 완료 상태가 녹색으로 표시되어 둘 다 성공했음을 나타내는 상태 머신 그래프입니다.