나중에 또 쓸 일이 있을 것 같아서 기록해둔다.
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
}
};