Serverless Plugin for AWS Lambda Provisioned Concurrency Auto Scaling configuration.
Related blog post can be found on the Neiman Marcus Medium page.
Add the NPM package to your project:
$ npm install serverless-provisioned-concurrency-autoscaling
Add the plugin to your serverless.yml
:
Use version 1.9.1 for Serverless 1/ Serverless 2.
Use version 2.0.1 for Serverless 3.
plugins:
- serverless-provisioned-concurrency-autoscaling
Add concurrencyAutoscaling
parameters under each function you wish to autoscale in your serverless.yml
.
Add customMetric: true
if you want to use Maximum
instead of Average
statistic.
functions:
hello:
handler: handler.hello
provisionedConcurrency: 1
concurrencyAutoscaling: true
functions:
world:
handler: handler.world
provisionedConcurrency: 1
concurrencyAutoscaling:
enabled: true
alias: provisioned
maximum: 10
minimum: 1
usage: 0.75
scaleInCooldown: 0
scaleOutCooldown: 0
customMetric:
statistic: maximum
scheduledActions:
- name: OpenOfficeTime
startTime: "2025-01-01T00:00:00.000Z"
endTime: "2025-01-01T23:59:59.999Z"
timezone: "America/Chicago"
schedule: "cron(30 8 ? * 1-6 *)"
action:
maximum: 100
minimum: 10
- name: CloseOfficeTime
startTime: "2025-01-01T00:00:00.000Z"
endTime: "2025-01-01T23:59:59.999Z"
timezone: "America/Chicago"
schedule: "cron(30 17 ? * 1-6 *)"
action:
maximum: 10
minimum: 1
- name: BlackFridayPeak1
startTime: "2025-01-02T00:00:00.000Z"
endTime: "2025-01-02T23:59:59.999Z"
timezone: "America/New_York"
schedule: "at(2025-01-02T12:34:56)"
action:
maximum: 50
minimum: 5
- name: BlackFridayPeak2
startTime: "2025-01-03T00:00:00.000Z"
endTime: "2025-01-03T23:59:59.999Z"
timezone: "Europe/Warsaw"
schedule: "rate(1 hour)"
action:
maximum: 50
minimum: 5
That's it! With the next deployment, serverless will add Cloudformation resources to scale provisioned concurrency!
You must provide at least provisionedConcurrency
and concurrencyAutoscaling
to enable autoscaling. Set concurrencyAutoscaling
to a boolean, or object with configuration. Any omitted configuration will use module defaults.
alias: provisioned
maximum: 10
minimum: 1
usage: 0.75
scaleInCooldown: 0
scaleOutCooldown: 0
Change in Default Behavior: Starting in v1.7.0, the default scaleInCooldown is zero, not 120. This is backwards compatible, but different default behavior. This is in line with AWS' default scaleInCooldown.
For more details on Scheduled Actions formats see the AWS CloudFormation ScheduledAction description.
Attribute | Description | Required | Example |
---|---|---|---|
endTime | The date and time that the action is scheduled to end, in UTC. | no | 2025-12-31T23:59:59.999Z |
startTime | The date and time that the action is scheduled to begin, in UTC. | no | 2025-01-01T00:00:00.000Z |
timezone | Timezone for startTime and endTime . Needs to be the canonical names of the IANA (supported by Yoda-Time). |
no | America/Chicago |
name | The name of the scheduled action unique among all other scheduled actions on the specified scalable target. | yes | OpenOfficeHourScheduleStart |
schedule | One of three string formats: at , cron or rate (see next table). |
yes | cron(* 30 8 * 1-6 *) |
action | Object of minimum and maximum properties. At least one is required. |
yes | minimum: 100 maximum: 105 |
For more details on schedule syntax see:
- AWS CloudFormation ScheduledAction description
- AWS Schedule Expressions for Rules (cron)
- AWS Put Scheduled Action - Timezone
Attribute | Description | Format | Example |
---|---|---|---|
at | A start (a point in time) | at(yyyy-mm-ddThh:mm:ss) |
at(2025-01-02T00:00:00) |
cron | A cron syntax for recurring schedule | cron(fields) |
cron(30 17 ? * 1-6 *) |
rate | A rate | rate(value unit) |
rate(16 minuets) |
N/A
- Refer to our contribution guidelines to contribute to this project. See CONTRIBUTING.md.
- All contributions must follow our code of conduct. See CONDUCT.md.
- This project is licensed under the Apache 2.0 license. See LICENSE.
- serverless-dynamodb-autoscaling - Original plugin this module is based on.