Architecture overview
This section provides a reference implementation architecture diagram for the components deployed with this solution.
Architecture diagram
Deploying this solution deploys the following components in your AWS account.
Instance Scheduler on AWS deploys an Amazon EventBridge event bus when the customer selects the CloudFormation parameter “Use AWS Organizations”. Optionally, Instance Scheduler on AWS deploys Amazon EventBridge diagram only shows the event bus, which is deployed in addition to the resources shown.
The high-level process flow for the solution components deployed with the AWS CloudFormation template is as follows:
-
The AWS CloudFormation template sets up an Amazon CloudWatch
event at a customer-defined interval. This event invokes the Instance Scheduler AWS Lambda function. During configuration, the user defines the AWS Regions and accounts, as well as a custom tag that Instance Scheduler on AWS uses to associate schedules with applicable Amazon EC2, Amazon RDS instances, and clusters. -
These values are stored in Amazon DynamoDB,
and the Lambda function retrieves them each time it runs. You can then apply the custom tag to applicable instances. -
During initial configuration of the Instance Scheduler, you define a tag key you will use to identify applicable Amazon EC2 and Amazon RDS instances. When you create a schedule, the name you specify is used as the tag value that identifies the schedule you want to apply to the tagged resource.
For example, a user might use the solution’s default tag name (tag key)
Schedule
and create a schedule calleduk-office-hours
. To identify an instance that will use theuk-office-hours
schedule, the user adds theSchedule
tag key with a value ofuk-office-hours
. -
Optional: When you select the CloudFormation parameter Using AWS Organizations as
Yes
and provide a valid organization id, an additional resource Event Bus resource is created which will receive events from the CloudWatch events from remote accounts. The events from the remote account will provide account id which will added to the solution configuration in DynamoDB.
Note
AWS CloudFormation resources are created from AWS Cloud Development Kit (AWS CDK)
The Lambda function uses AWS Identity Access
Management
Each time the solution’s Lambda function runs, it checks the current state of each appropriately tagged instance against the targeted state (defined by one or more periods in a schedule in the instance tag) in the associated schedule, and then applies the appropriate start or stop action, as necessary.
For example, if the Lambda function is invoked on a Friday at 9 AM (ET) and it identifies a
stopped Amazon EC2 or Amazon RDS instance with a Schedule=office-hours
tag, it will check
Amazon DynamoDB for the office-hours
schedule configuration details. If the
office-hours
schedule contains a period rule that indicates that the instance
should run Monday through Friday from 9 AM ET to 5 PM ET, the Lambda function will start that
instance.
The Lambda function also records the name of the schedule, the number of instances associated with that schedule, and the number of running instances as an optional custom metric in Amazon CloudWatch (refer to Amazon CloudWatch Metrics).
Note
Stopping an Amazon EC2 instance is different from terminating an Amazon EC2 instance. By default, Amazon EC2 instances are configured to stop, not terminate, when shut down, but you can modify this behavior. Before using this solution, verify that instances are set to stop or terminate as appropriate.