Lambda 오케스트레이션 예제 - AWS Step Functions

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

Lambda 오케스트레이션 예제

이 샘플 프로젝트는 Step Functions 상태 머신에서 AWS Lambda 함수를 통합하는 방법을 보여줍니다.

이 프로젝트에서 Step Functions는 Lambda 함수를 사용하여 주가를 확인하고 추천 매수 또는 매도 거래를 결정합니다. 그런 다음 사용자에게 이 추천이 제공되고 사용자는 주식을 매수 또는 매도할지 선택할 수 있습니다. 거래 결과는 SNS 주제를 통해 반환됩니다.

Step Functions 서비스 통합에 대한 자세한 내용은 다음을 참조하세요.

참고

이 샘플 프로젝트를 사용할 때 요금이 발생할 수 있습니다.

신규 AWS 사용자의 경우 프리 티어를 사용할 수 있습니다. 이 계층에서 특정 사용 수준 미만의 서비스는 무료입니다. AWS 비용 및 프리 티어에 대한 자세한 내용은 요금을 참조하십시오.

1단계: 상태 시스템 만들기 및 리소스 프로비저닝

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

  2. 검색 상자에 Orchestrate Lambda functions를 입력한 다음 반환된 검색 결과에서 Lambda 함수 오케스트레이션을 선택합니다.

  3. 다음을 선택하여 계속 진행합니다.

  4. Step Functions는 선택한 샘플 프로젝트에 AWS 서비스 사용된 항목을 나열합니다. 또한 샘플 프로젝트의 워크플로 그래프도 보여줍니다. 이 프로젝트를 사용자 프로젝트에 AWS 계정 배포하거나 자체 프로젝트를 빌드하기 위한 출발점으로 사용하세요. 진행하려는 방식에 따라 데모 실행 또는 이를 기반으로 구축을 선택합니다.

    이 샘플 프로젝트는 다음 리소스를 배포합니다.

    • Lambda 함수 5개

    • Amazon Simple Queue Service 대기열

    • Amazon Simple Notification Service 주제

    • AWS Step Functions 상태 머신

    • 관련된 AWS Identity and Access Management(IAM) 역할

    다음 이미지에서는 Lambda 함수 오케스트레이션 샘플 프로젝트의 워크플로 그래프를 보여줍니다.

    Lambda 함수 오케스트레이션 샘플 프로젝트의 워크플로 그래프입니다.
  5. 템플릿 사용을 선택하여 계속 선택합니다.

  6. 다음 중 하나를 수행하십시오.

    • 이를 기반으로 구축을 선택한 경우 Step Functions는 선택한 샘플 프로젝트의 워크플로 프로토타입을 만듭니다. Step Functions는 워크플로 정의에 나열된 리소스를 배포하지 않습니다.

      Workflow Studio의 디자인 모드에서 상태 브라우저의 상태를 끌어서 놓아 워크플로 프로토타입을 계속 빌드합니다. 또는 VS Code와 유사한 통합 코드 편집기를 제공하는 코드 모드로 전환하여 Step Functions 콘솔 내에서 상태 시스템의 Amazon States Language(ASL) 정의를 업데이트합니다. Workflow Studio를 사용하여 상태 시스템 빌드에 대한 자세한 내용은 Workflow Studio 사용 섹션을 참조하세요.

      중요

      워크플로를 실행하기 전에 샘플 프로젝트에 사용된 리소스의 자리 표시자 Amazon 리소스 이름(ARN)을 업데이트해야 합니다.

    • 데모 실행을 선택한 경우 Step Functions는 템플릿을 사용하여 해당 AWS CloudFormation 템플릿에 나열된 AWS 리소스를 사용자에게 배포하는 읽기 전용 샘플 프로젝트를 만듭니다. AWS 계정

      작은 정보

      샘플 프로젝트의 상태 시스템 정의를 보려면 코드를 선택하세요.

      준비가 되면 배포 및 실행을 선택하여 샘플 프로젝트를 배포하고 리소스를 만듭니다.

      이러한 리소스 및 관련 IAM 권한을 만드는 데 최대 10분이 걸릴 수 있습니다. 리소스를 배포하는 동안 CloudFormation Stack ID 링크를 열어 프로비저닝되는 리소스를 확인할 수 있습니다.

      샘플 프로젝트의 모든 리소스가 생성된 후에 상태 시스템 페이지에 새 샘플 프로젝트가 나열됩니다.

      중요

      템플릿에서 사용되는 각 서비스에는 표준 요금이 적용될 수 있습니다. CloudFormation

2단계: 상태 시스템 실행

모든 리소스가 프로비저닝되고 배포되면 실행 시작 대화 상자가 표시됩니다.

  1. 상태 시스템 페이지에서 샘플 프로젝트를 선택합니다.

  2. 샘플 프로젝트 페이지에서 실행 시작을 선택합니다.

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

    1. (선택 사항) 실행을 식별하려면 이름 상자에 해당 실행의 이름을 지정하면 됩니다. 기본적으로 Step Functions는 고유한 실행 이름을 자동으로 생성합니다.

      참고

      Step Functions를 사용하면 상태 머신, 실행 및 활동의 이름과 ASCII가 아닌 문자가 포함된 레이블을 만들 수 있습니다. 이러한 비 ASCII 이름은 Amazon에서 사용할 수 없습니다. CloudWatch CloudWatch 지표를 추적할 수 있도록 하려면 ASCII 문자만 사용하는 이름을 선택하십시오.

    2. (선택 사항) 입력 상자에 입력 값을 JSON 형식으로 입력하여 워크플로를 실행합니다.

      데모 실행을 선택한 경우에는 실행 입력을 제공할 필요가 없습니다.

      참고

      배포한 데모 프로젝트에 미리 채워진 실행 입력 데이터가 포함되어 있는 경우 해당 입력을 사용하여 상태 시스템을 실행하세요.

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

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

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

상태 시스템 및 실행 정보

이 샘플 프로젝트의 상태 머신은 파라미터를 해당 리소스에 직접 AWS Lambda 전달하여 와 통합하고, Amazon SQS 대기열을 사용하여 사람의 승인 요청을 관리하고, Amazon SNS 주제를 사용하여 쿼리 결과를 반환합니다.

Step Functions 실행에서 JSON 텍스트를 입력으로 수신하고 해당 입력을 워크플로의 첫 번째 상태에 전달합니다. 개별 상태는 JSON 데이터를 입력으로 수신하고 일반적으로 JSON 데이터를 출력으로 다음 상태로 전달합니다. 이 샘플 프로젝트에서는 각 단계의 출력이 입력으로 워크플로의 다음 단계에 전달됩니다. 예를 들어 구매/판매 추천 생성 단계에서는 주가 확인 단계 출력을 입력으로 수신합니다. 또한 구매/판매 추천 생성 단계 출력은 입력으로 사람의 승인 단계를 모방한 다음 단계인 사람 승인 요청으로 전달됩니다.

참고

단계에서 반환한 출력과 단계에 전달된 입력을 보려면 워크플로 실행에 대한 실행 세부 정보 페이지를 여세요. 단계 세부 정보 섹션에는 보기 모드에서 선택한 각 단계의 입력 및 출력이 표시됩니다.

사람 승인 단계를 구현하려면 일반적으로 작업 토큰이 반환될 때까지 워크플로 실행을 일시 중지합니다. 이 샘플 프로젝트에서는 메시지가 Amazon SQS 대기열로 전달되며 이 대기열은 콜백 기능을 처리하도록 정의된 Lambda 함수의 트리거로 사용됩니다. 메시지에는 작업 토큰과 이전 단계에서 반환한 출력이 포함됩니다. Lambda 함수는 메시지의 페이로드와 함께 간접적으로 호출됩니다. SendTaskSuccess API 직접 호출을 통해 작업 토큰을 다시 수신할 때까지 워크플로 실행이 일시 중지됩니다. 작업 토큰에 대한 자세한 내용은 작업 토큰을 사용하여 콜백 대기 섹션을 참조하세요.

다음 StepFunctionsSample-HelloLambda-ApproveSqsLambda 함수 코드에서는 Step Functions 상태 시스템을 통해 Amazon SQS 대기열에서 제출한 모든 작업을 자동으로 승인하도록 정의되는 방식을 보여줍니다.

exports.lambdaHandler = (event, context, callback) => { const stepfunctions = new aws.StepFunctions(); // For every record in sqs queue for (const record of event.Records) { const messageBody = JSON.parse(record.body); const taskToken = messageBody.TaskToken; const params = { output: "\"approved\"", taskToken: taskToken }; console.log(`Calling Step Functions to complete callback task with params ${JSON.stringify(params)}`); // Approve stepfunctions.sendTaskSuccess(params, (err, data) => { if (err) { console.error(err.message); callback(err.message); return; } console.log(data); callback(null); }); } };

이 예제 상태 시스템을 살펴보고 Step Functions에서 Lambda 및 Amazon SQS를 제어하는 방법을 확인합니다.

다른 AWS 서비스를 제어할 AWS Step Functions 수 있는 방법에 대한 자세한 내용은 을 참조하십시오. 다른 서비스와 AWS Step Functions 함께 사용

{ "StartAt": "Check Stock Price", "States": { "Check Stock Price": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Next": "Generate Buy/Sell recommendation" }, "Generate Buy/Sell recommendation": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "ResultPath": "$.recommended_type", "Next": "Request Human Approval" }, "Request Human Approval": { "Type": "Task", "Resource": "arn:aws:states:::sqs:sendMessage.waitForTaskToken", "Parameters": { "QueueUrl": "https://sqs.us-west-1.amazonaws.com/111122223333/StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-777788889999", "MessageBody": { "Input.$": "$", "TaskToken.$": "$$.Task.Token" } }, "ResultPath": null, "Next": "Buy or Sell?" }, "Buy or Sell?": { "Type": "Choice", "Choices": [ { "Variable": "$.recommended_type", "StringEquals": "buy", "Next": "Buy Stock" }, { "Variable": "$.recommended_type", "StringEquals": "sell", "Next": "Sell Stock" } ] }, "Buy Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-000000000000", "Next": "Report Result" }, "Sell Stock": { "Type": "Task", "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-111111111111", "Next": "Report Result" }, "Report Result": { "Type": "Task", "Resource": "arn:aws:states:::sns:publish", "Parameters": { "TopicArn": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Message": { "Input.$": "$" } }, "End": true } } }

Step Functions를 다른 AWS 서비스와 함께 사용할 때 IAM을 구성하는 방법에 대한 자세한 내용은 을 참조하십시오통합 서비스용 IAM 정책.

IAM 예제

샘플 프로젝트에서 생성된 이러한 예제 AWS Identity and Access Management (IAM) 정책에는 스테이트 머신 및 관련 리소스를 실행하는 데 필요한 최소 권한이 포함되어 있습니다. IAM 정책에 필요한 정책만 포함시키는 것이 좋습니다.

{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLam-CheckStockPriceLambda-444455556666", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-Hello-GenerateBuySellRecommend-123456789012", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-BuyStockLambda-777788889999", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-1:111122223333:function:StepFunctionsSample-HelloLambda-SellStockLambda-000000000000", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sqs:SendMessage*" ], "Resource": "arn:aws:sqs:us-west-1:111122223333:StepFunctionsSample-HelloLambda4444-5555-6666-RequestHumanApprovalSqs-111111111111", "Effect": "Allow" } ] }
{ "Statement": [ { "Action": [ "sns:Publish" ], "Resource": "arn:aws:sns:us-west-1:111122223333:StepFunctionsSample-HelloLambda1111-2222-3333-ReportResultSnsTopic-222222222222", "Effect": "Allow" } ] }

Step Functions를 다른 AWS 서비스와 함께 사용할 때 IAM을 구성하는 방법에 대한 자세한 내용은 을 참조하십시오통합 서비스용 IAM 정책.