Skip to content

Commit 8c42ce6

Browse files
authored
Merge pull request #104 from brivolabs/provisioned-esm-support
Provisioned Poller support (#103)
2 parents 7a1808a + fabf3e4 commit 8c42ce6

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

docs/events/msk.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,26 @@ functions:
124124
a: [1]
125125
```
126126

127+
## Provisioned Poller Configuration
128+
129+
AWS recently added support for directly controlling the polling configuration for MSK ESMs. See the official [AWS documentation](https://docs.aws.amazon.com/lambda/latest/dg/msk-scaling-modes.html) for more information. To use that feature, add the following section to your `serverless.yml` function config:
130+
131+
Note: at least one of `minimumPollers` or `maximumPollers` must be provided.
132+
133+
```yml
134+
---
135+
functions:
136+
compute:
137+
handler: handler.compute
138+
events:
139+
- msk:
140+
arn: arn:aws:kafka:region:XXXXXX:cluster/MyCluster/xxxx-xxxxx-xxxx
141+
topic: mytopic
142+
provisionedPollerConfig:
143+
minimumPollers: 2
144+
maximumPollers: 5
145+
```
146+
127147
## IAM Permissions
128148

129149
The Serverless Framework will automatically configure the most minimal set of IAM permissions for you. However you can still add additional permissions if you need to. Read the official [AWS documentation](https://docs.aws.amazon.com/lambda/latest/dg/with-msk.html) for more information about IAM Permissions for MSK events.

lib/plugins/aws/package/compile/events/msk/index.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class AwsCompileMSKEvents {
5454
pattern: '[a-zA-Z0-9-/*:_+=.@-]*',
5555
},
5656
filterPatterns: { $ref: '#/definitions/filterPatterns' },
57+
provisionedPollerConfig: { $ref: '#/definitions/mskProvisionedPollerConfig' },
5758
},
5859
additionalProperties: false,
5960
required: ['arn', 'topic'],
@@ -102,6 +103,7 @@ class AwsCompileMSKEvents {
102103
const saslScram512 = event.msk.saslScram512;
103104
const consumerGroupId = event.msk.consumerGroupId;
104105
const filterPatterns = event.msk.filterPatterns;
106+
const provisionedPollerConfig = event.msk.provisionedPollerConfig;
105107

106108
const mskClusterNameToken = getMskClusterNameToken(eventSourceArn);
107109
const mskEventLogicalId = this.provider.naming.getMSKEventLogicalId(
@@ -165,6 +167,17 @@ class AwsCompileMSKEvents {
165167
})),
166168
};
167169
}
170+
if (provisionedPollerConfig) {
171+
mskResource.Properties.ProvisionedPollerConfig = {};
172+
if (provisionedPollerConfig.minimumPollers != null) {
173+
mskResource.Properties.ProvisionedPollerConfig.MinimumPollers =
174+
provisionedPollerConfig.minimumPollers;
175+
}
176+
if (provisionedPollerConfig.maximumPollers != null) {
177+
mskResource.Properties.ProvisionedPollerConfig.MaximumPollers =
178+
provisionedPollerConfig.maximumPollers;
179+
}
180+
}
168181

169182
mskStatement.Resource.push(eventSourceArn);
170183

lib/plugins/aws/provider.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,13 @@ class AwsProvider {
810810
maxItems: 10,
811811
items: { type: 'object' },
812812
},
813+
mskProvisionedPollerConfig: {
814+
type: 'object',
815+
properties: {
816+
minimumPollers: { type: 'integer', minimum: 1, maximum: 1000 },
817+
maximumPollers: { type: 'integer', minimum: 1, maximum: 1000 },
818+
},
819+
},
813820
},
814821
provider: {
815822
properties: {

test/unit/lib/plugins/aws/package/compile/events/msk/index.test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ describe('AwsCompileMSKEvents', () => {
2525
},
2626
];
2727
const filterPatterns = [{ value: { a: [1, 2] } }, { value: [3] }];
28+
const provisionedPollerConfig = {
29+
minimumPollers: 2,
30+
maximumPollers: 5,
31+
};
2832

2933
describe('when there are msk events defined', () => {
3034
let minimalEventSourceMappingResource;
@@ -61,6 +65,7 @@ describe('AwsCompileMSKEvents', () => {
6165
saslScram512,
6266
consumerGroupId,
6367
filterPatterns,
68+
provisionedPollerConfig,
6469
},
6570
},
6671
],
@@ -146,6 +151,10 @@ describe('AwsCompileMSKEvents', () => {
146151
},
147152
],
148153
},
154+
ProvisionedPollerConfig: {
155+
MinimumPollers: 2,
156+
MaximumPollers: 5,
157+
},
149158
});
150159
});
151160

types/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ export interface AWS {
422422
saslScram512?: AwsArnString;
423423
consumerGroupId?: string;
424424
filterPatterns?: FilterPatterns;
425+
provisionedPollerConfig?: {maximumPollers?: number, minimumPollers?: number}
425426
};
426427
}
427428
| {

0 commit comments

Comments
 (0)