통합 AWS Lambda SQS아마존과 아마존이 있는 Step Functions 스테이트 머신에서 SNS - AWS Step Functions

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

통합 AWS Lambda SQS아마존과 아마존이 있는 Step Functions 스테이트 머신에서 SNS

이 샘플 프로젝트는 통합 방법을 보여줍니다. AWS Lambda Step Functions 스테이트 머신의 함수

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

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

참고

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

새 제품용 AWS 사용자에게는 프리 티어가 제공됩니다. 이 계층에서 특정 사용 수준 미만의 서비스는 무료입니다. 에 대한 자세한 내용은 AWS 비용 및 프리 티어는 요금을 참조하십시오.

1단계: 상태 시스템 만들기

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

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

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

  4. 데모 실행을 선택하여 읽기 전용 및 ready-to-deploy 워크플로를 생성하거나 Build on it를 선택하여 빌드하고 나중에 배포할 수 있는 편집 가능한 상태 머신 정의를 생성합니다.

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

    • 5 Lambda 함수

    • 원래 요청 ping에 대한 Amazon Simple Queue Service 대기열

    • 원래 요청 ping에 대한 Amazon Simple Notification Service 주제

    • 원래 요청 ping에 대한 AWS Step Functions 상태 시스템

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

    다음 이미지는 Orchestrate의 워크플로 그래프를 보여줍니다.Lambda 함수 샘플 프로젝트:

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

다음 단계는 이전 선택에 따라 달라집니다.

  1. 데모 실행 — 에서 배포한 리소스로 읽기 전용 프로젝트를 만들기 전에 상태 머신을 검토할 수 있습니다. AWS CloudFormation 다음 주소로 AWS 계정.

    상태 머신 정의를 볼 수 있으며 준비가 되면 Deploy and run을 선택하여 프로젝트를 배포하고 리소스를 생성할 수 있습니다.

    배포하는 데 리소스 및 권한을 생성하는 데 최대 10분이 걸릴 수 있습니다. Stack ID 링크를 사용하여 진행 상황을 모니터링할 수 있습니다. AWS CloudFormation.

    배포가 완료되면 콘솔에서 새 상태 머신을 확인할 수 있습니다.

  2. 기반 구축 — 워크플로 정의를 검토하고 편집할 수 있습니다. 사용자 지정 워크플로를 실행하기 전에 샘플 프로젝트에서 자리 표시자의 값을 설정해야 할 수도 있습니다.

참고

계정에 배포된 서비스에는 표준 요금이 적용될 수 있습니다.

2단계: 상태 시스템 실행

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

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

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

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

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

      ASCII비이름 및 로깅

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

    2. (선택 사항) 입력 상자에 입력 값을 로 입력합니다JSON. 데모를 실행 중인 경우 이 단계를 건너뛸 수 있습니다.

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

    Step Functions 콘솔은 그래프 보기에서 상태를 선택하여 단계 세부 정보 창에서 관련 정보를 탐색할 수 있는 실행 세부 정보 페이지로 안내합니다.

상태 시스템 및 실행 정보

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

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

참고

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

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

다음 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 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를 다른 기능과 함께 사용할 IAM 때 구성하는 방법에 대한 자세한 내용은 AWS 서비스는 을 참조하십시오Step Functions가 통합 서비스를 위한 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를 다른 기능과 함께 사용할 IAM 때 구성하는 방법에 대한 자세한 내용은 AWS 서비스는 을 참조하십시오Step Functions가 통합 서비스를 위한 IAM 정책을 생성하는 방법.