AWS EC2, aka Elastic Compute Cloud, essentially offers virtual servers in the cloud that you can use to run your applications.
Ref> https://docs.aws.amazon.com/solutions/latest/instance-scheduler-on-aws/solution-overview.html
Instance Scheduler on AWS leverages Amazon Web Services (AWS) resource tags and AWS Lambda to automatically stop and restart instances across multiple AWS Regions and accounts on a customer-defined schedule. This solution also allows you to use hibernation for stopped Amazon EC2 instances.
As of 2026-feb, Instance Scheduler on AWS supports scheduling of the following services:
Amazon EC2
Amazon EC2 Auto Scaling groups
Amazon RDS
Amazon Aurora clusters (Tag the cluster, no individual instances!)
Amazon DocumentDB
Amazon Neptune
[Next]
Stack name: <aws_account_name>-schedulerhub
Namespace: default
Use AWS Organizations: No
Organization ID/remote account IDs:
Schedule tag key : Schedule (value of the tag with this key on a resource specifies the name of the schedule)
Retain data and logs: Enabled
Enable scheduling: Yes
Default time zone: Europe/Madrid
Scheduling interval (minutes): 5
Enable EC2 SSM Maintenance Windows: No
Create RDS instance snapshots on stop: Yes (does not apply to Aurora Clusters)
ASG action name prefix: IS-
Region(s):
Kms Key Arns for EC2:
License Manager Arns for EC2:
Enable CloudWatch Debug Logs: No
Log retention period (days): 3 (eg: 1, 3 or 90. Retention days for scheduler logs)
Operational Monitoring: Enabled
SchedulingRequestHandler Memory size (MB): 512
Orchestrator Memory size (MB): 512
[Next]
Tags: [{key=ci, value=infra}]
[✓] I acknowledge that AWS CloudFormation might create IAM resources with custom names.
[Next]
[Create change set]
You can view the status of the stack in the AWS CloudFormation console in the Status column. You should receive a CREATE_COMPLETE status in approximately five minutes.
Note: If CloudFormation stack stays w/ status "REVIEW_IN_PROGRESS" when using button [Create change set]. Went to stack, change sets tab and clicked execute.
[Execute change set]
Settings no longer available in current version:
Started tags: InstanceScheduler-LastAction=Started By {scheduler} {year}/{month}/{day} {hour}:{minute}{timezone},
Stopped tags: InstanceScheduler-LastAction=Stopped By {scheduler} {year}/{month}/{day} {hour}:{minute}{timezone},
Skipped.
Using only the Amazon DynamoDB Console, so we can easily change it at any time.
The ConfigTable (<aws_account_name>-schedulerhub-ConfigTable-<suffix>) contains several sample records of types 'schedule' and 'period' that can be used as a reference to create custom ones.
Insert schedule w/ name 'yes' and periods '<company>-hours':
{
"type": {
"S": "schedule"
},
"name": {
"S": "yes"
},
"description": {
"S": "<Company> schedule"
},
"periods": {
"SS": [
"<company>-hours"
]
},
"timezone": {
"S": "Europe/Madrid"
}
}
Insert period w/ name '<company>-hours', Monday to Friday from 7:30 to 19:30:
{
"type": {
"S": "period"
},
"name": {
"S": "<company>-hours"
},
"begintime": {
"S": "07:30"
},
"description": {
"S": "<Company> hours"
},
"endtime": {
"S": "19:30"
},
"weekdays": {
"SS": [
"mon-fri"
]
}
}
Tag the EC2 and RDS resources.
Schedule=yes
Tag "InstanceScheduler-LastAction" is updated in the instances whenever the schedule runs.