nodejs에서 AWS Step 함수 사용
8234 단어 nodeawsadonisjsstepfunctions
Google의 일부 인프라는 AWS를 사용하기 때문에, Google은 AWS Step 함수를 대기열 관리 도구로 사용합니다.코드 변환 엔진의 핵심은 EC2의 윈도우즈 기기에서 프로세스를 실행해야 하기 때문에 이 프로세스를 API 엔진에 봉인한 다음 AWS Step 함수에 연결하기로 결정했습니다.
묘사AWS Step Functions가 무엇인지 참고 자료가 많기 때문에 저는 깊이 토론하지 않겠습니다.요컨대, AWS는 정보를 대기열에 넣는 능력을 제공합니다. 메시지는 소비 프로그램이 대기열에서 삭제할 때까지 대기열에 저장됩니다.
이 자습서는 AWS Step 함수를 통합하여 웹 API에 포함된 대규모 실행 프로세스의 대기열 생성 방식으로 사용하는 방법을 중점적으로 보여 줍니다.우리의 API에 대해 우리는 매우 즐겨 사용AdonisJS한다. 이것은 매우 좋은nodejs 웹 프레임워크로 Laravel 세계의 영향을 많이 받는다.
이 강좌에 source code 다운로드할 수 있거나 기본적인 Adonis JS 프로젝트를 설정할 수 있다고 가정합니다.
AWS 활동 작성
우리의 예는 단지 시범일 뿐, 활동 절차가 필요하다.웹 폼에서 데이터를 보내고 AWS 상태기에 추가하는 방법을 보여 주고 이 상태기가 대기열을 충당하는 것이 목표입니다.그 다음에 소비 프로그램은 대기열에 있는 정보를 얻고 발견된 내용을 컨트롤러에 출력합니다.
Activities는 상태기 중의 일꾼의 작은 임무이다.
우리의 활동을 다음과 같이 부르자.
DemoWorkerActivity
상태기 만들기
ARN이 활성화되면 다음과 같은 상태기 문서를 만들 수 있습니다.여기에는 한 단계만 있기 때문에 이 단계를 "DemoWorkerRun"이라고 부릅니다.이 단계의 내부는 개별 활동 "DemoWorker Activity"입니다.
{
"Comment": "Demo State Machine - to show how my application interacts with the queue",
"StartAt": "DemoWorkerRun",
"States": {
"DemoWorkerRun": {
"Type": "Task",
"Resource": "arn:aws:states:us-east-1:XXXXXXXXXX:activity:DemoWorkerActivity",
"End": true
}
}
}
상태기를 작성하면 AWS에서 리소스 ARN을 제공합니다.이 예에서 상태 식별자는 다음과 같습니다.
“arn:aws:states:us-east-1:xxxxxxxxx:stateMachine:DemoWorkerStateMachine”
핵심 노드 구성 요소:
대기 서비스
저희 adonis 프로젝트에서 서비스 폴더를 만들고 app/서비스/Queue 서비스를 만들 것입니다.js 클래스.이것은 초기 사용자 정의 부하 시작 상태기를 사용하여 실행됩니다.이런 요구 사항은awssdk를 설치해야 합니다.adonis 도구를 사용하여 설치할 수 있습니다.
adonis install aws-sdk
'use strict'
const AWS = require('aws-sdk')
const Env = use('Env')
class QueueService {
/**
* Returns result of StepFunctions.startExecution
* @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/StepFunctions.html#startExecution-property
*/
async enqueue (name, payload) {
const awsConfig = new AWS.Config({
accessKeyId: Env.get('AWS_ACCESS_KEY'),
secretAccessKey: Env.get('AWS_SECRET_KEY'),
region: Env.get('AWS_REGION')
})
// Initialize the AWS SDK
const StepFunctions = new AWS.StepFunctions(awsConfig)
// Executing the State Machine requires a custom name, some custom input and the ID of the State Machine from AWS
var params = {
name: name,
input: JSON.stringify(payload),
stateMachineArn: Env.get('AWS_STATEMACHINE_ARN')
}
// Execute StepFunction
// @see https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/StepFunctions.html#startExecution-property
let result = null
try {
result = await StepFunctions.startExecution(params).promise()
} catch (e) {
console.log('Error:', e)
}
return result
}
}
module.exports = QueueService
인구 노동자.js
새 폴더 app\Workers를 만들고 DemoWorker를 추가합니다.js.상태기에서 마운트된 작업을 사용합니다.npm 모듈 "step function worker"필요
adonis 프로젝트에 설치하려면 다음과 같이 하십시오.
adonis install step-function-worker
'use strict'
const StepFunctionWorker = require('step-function-worker')
const AWS = require('aws-sdk')
const Env = use('Env')
const Logger = use('Logger')
/*
|--------------------------------------------------------------------------
| DemoWorker
|--------------------------------------------------------------------------
| @see https://github.com/piercus/step-function-worker
|
| For this class to work, a StepFunction activity must first be configured on AWS
*/
class DemoWorker extends StepFunctionWorker {
constructor () {
const options = {}
// Configure the connection to AWS
options.awsConfig = new AWS.Config({
accessKeyId: Env.get('AWS_ACCESS_KEY'),
secretAccessKey: Env.get('AWS_SECRET_KEY'),
region: Env.get('AWS_REGION')
})
// Function that interacts directly with the AWS StepFunction this must be defined
// The call back is responsible for letting the State Machine know it can either
// continue to the next step in execution or fail
options.fn = async (input, cb, heartbeat) => {
// Respond to StepFunction state machine
Logger.info('Custom Worker function:', input)
cb(null, input)
}
// the ID of the Step Function Activity arn:aws:states:us-east-1:XXXXXXXXXXXXX:activity:DemoWorkerActivity
options.activityArn = Env.get('AWS_ACTIVITY_ARN_DEMOWORKERACTIVITY')
super(options)
this._initCallbacks()
}
_initCallbacks () {
this.on('task', this.task)
this.on('ready', this.ready)
this.on('error', this.error)
this.on('failure', this.failure)
this.on('success', this.success)
}
/**
* Called when the worker "wakes up"
* The StepFunctionWorker parent class will pass in the payload
* @param {*} task
*/
task (task) {
// task.input contains the payload from the web
Logger.info('DemoWorker task:', task.input)
}
ready () {
Logger.info('DemoWorker is ready')
}
failure (failure) {
Logger.info('DemoWorker failure:', failure)
}
success (output) {
// output.input will contain the payload from the web
Logger.info('DemoWorker success:', output.input)
}
error (err) {
Logger.info('DemoWorker error:', err)
}
}
module.exports = DemoWorker
프레젠테이션 시간
나는 먼저 우리의 시범으로 뛰어들었다.상태기가 실행하는 이름을 입력하는 폼을 만들 것입니다.실행 작업에 지정된 이름을 사용자 정의할 수 있습니다.프로젝트에서 대기열 작업 상태를 유지하는 MongoDB 기록을 담당하는 ObjectID를 사용했습니다.명명약정을 사용하면 실행 대상을 시스템에서 유효한 부하를 초기화하는 대상으로 거슬러 올라가 시스템 절차를 더욱 쉽게 따를 수 있습니다.
adonis 프로젝트를 시작하겠습니다.
adonis serve --dev
지금 액세스할 수 있음http://localhost:3333다음 테이블이 있습니다.
폼을 제출한 후 줄을 서 있는 상태 함수가 작업을 수행하는 것을 보여 줍니다.
이제 사용자 정의 활동이 실행되는지 모니터링하기 위해 DemoWorker를 시작해야 합니다.
adonis stepfunctionworker --name=DemoWorker
DemoWorker가 시작되면 중단된 실행 작업이 상태 함수 대기열에서 꺼집니다.컨디셔너를 다시 한 번 보고 실행이 성공적으로 끝났는지 봅시다.
완성!우리는 AWS 상태기를 만드는 목표를 달성했고 사용자 정의 프로그램을 시작하여 소형이지만 완전한 작업을 완성했다.
소스 코드: https://github.com/openstepmedia/adonisjs-stepfunction-demo
Reference
이 문제에 관하여(nodejs에서 AWS Step 함수 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/openstepmedia/using-aws-step-functions-with-nodejs-11i5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)