UNPKG

2.72 kBJavaScriptView Raw
1'use strict'
2
3class ScheduleEvents {
4 constructor (aws, region) {
5 // Authenticated `aws` object in `lib/main.js`
6 this.lambda = new aws.Lambda({
7 region: region,
8 apiVersion: '2015-03-31'
9 })
10 this.cloudwatchevents = new aws.CloudWatchEvents({
11 apiVersion: '2015-10-07'
12 })
13 }
14
15 _ruleDescription (params) {
16 if ('ScheduleDescription' in params && params.ScheduleDescription != null) {
17 return `${params.ScheduleDescription}`
18 }
19 return `${params.ScheduleName} - ${params.ScheduleExpression}`
20 }
21
22 _functionName (params) {
23 return params.FunctionArn.split(':').pop()
24 }
25
26 _putRulePrams (params) {
27 return {
28 Name: params.ScheduleName,
29 Description: this._ruleDescription(params),
30 State: params.ScheduleState,
31 ScheduleExpression: params.ScheduleExpression
32 }
33 }
34
35 _putRule (params) {
36 // return RuleArn if created
37 return new Promise((resolve, reject) => {
38 const _params = this._putRulePrams(params)
39 this.cloudwatchevents.putRule(_params, (err, rule) => {
40 if (err) reject(err)
41 resolve(rule)
42 })
43 })
44 }
45
46 _addPermissionParams (params) {
47 return {
48 Action: 'lambda:InvokeFunction',
49 FunctionName: this._functionName(params),
50 Principal: 'events.amazonaws.com',
51 SourceArn: params.RuleArn,
52 StatementId: params.ScheduleName
53 }
54 }
55
56 _addPermission (params) {
57 return new Promise((resolve, reject) => {
58 const _params = this._addPermissionParams(params)
59 this.lambda.addPermission(_params, (err, data) => {
60 if (err) {
61 if (err.code !== 'ResourceConflictException') reject(err)
62 // If it exists it will result in an error but there is no problem.
63 resolve('Permission already set')
64 }
65 resolve(data)
66 })
67 })
68 }
69
70 _putTargetsParams (params) {
71 return {
72 Rule: params.ScheduleName,
73 Targets: [{
74 Arn: params.FunctionArn,
75 Id: this._functionName(params),
76 Input: params.hasOwnProperty('Input') ? JSON.stringify(params.Input) : ''
77 }]
78 }
79 }
80
81 _putTargets (params) {
82 return new Promise((resolve, reject) => {
83 const _params = this._putTargetsParams(params)
84 this.cloudwatchevents.putTargets(_params, (err, data) => {
85 // even if it is already registered, it will not be an error.
86 if (err) reject(err)
87 resolve(data)
88 })
89 })
90 }
91
92 add (params) {
93 return Promise.resolve().then(() => {
94 return this._putRule(params)
95 }).then(rule => {
96 return this._addPermission(Object.assign(params, rule))
97 }).then(data => {
98 return this._putTargets(params)
99 })
100 }
101}
102
103module.exports = ScheduleEvents