나중에 또 쓸 일이 있을 것 같아서 기록해둔다.
SQS에 쌓여있는 Queue를 10초에 한 번씩 처리하도록 했다.
Step
10초에 한 번 람다를 실행시키는 Step Functions
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| { "Comment": "Invoke Lambda every 10 seconds", "StartAt": "ConfigureCount", "States": { "ConfigureCount": { "Type": "Pass", "Result": { "index": 0, "count": 6 }, "ResultPath": "$.iterator", "Next": "Iterator" }, "Iterator": { "Type": "Task", "Resource": "arn:aws:lambda:ap-northeast-2:834444597251:function:dev-x-stepfunction-iterator", "ResultPath": "$.iterator", "Next": "IsCountReached" }, "IsCountReached": { "Type": "Choice", "Choices": [ { "Variable": "$.iterator.continue", "BooleanEquals": true, "Next": "Wait" } ], "Default": "Done" }, "Wait": { "Type": "Wait", "Seconds": 10, "Next": "Iterator" }, "Done": { "Type": "Pass", "End": true } } }
|
Stemp Functions 에서 실행시키는 iterator 람다는 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const aws = require('aws-sdk'); const lambda = new aws.Lambda({ region: 'ap-northeast-2' });
exports.handler = async(event, context) => { const index = event.iterator.index + 1;
const vodParams = { FunctionName: "dev-kinx-midibus-playdata-vod-sqs-handler", InvocationType: 'Event', }
lambda.invoke(vodParams, (err, data) => { if (err) console.log(err); });
return { index, continue: index < event.iterator.count, count: event.iterator.count } };
|