

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 架构
<a name="architecture"></a>

此部分提供了参考实施架构图、[AWS Well-Architected 设计注意事项](aws-well-architected-design-considerations.md)、[安全组件](security-1.md)、[计划程序配置](scheduler-configuration-table.md)以及[此解决方案中使用的 AWS 服务](aws-services-used-in-this-solution.md)。

## 架构图
<a name="architecture-diagram"></a>

通过部署此解决方案，将在您的 AWS 账户中部署以下组件。

 **AWS 云实例计划程序** 

![InstanceScheduler 建筑](http://docs.aws.amazon.com/zh_cn/solutions/latest/instance-scheduler-on-aws/images/InstanceScheduler-architecture.png)


1. A [mazon EventBridge 规则](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)以可配置的时间间隔（默认：每 5 分钟）触发编排 Lambda 函数。

1. [该 EventBridge 规则调用 [AWS](https://aws.amazon.com/lambda/) Lambda 编排函数，该函数查询 DynamoDB 配置表以确定有效的调度目标。](cost.md#calculating-scheduling-targets)然后，协调器为每个活动目标调用并行调度 Lambda 函数。

1. 计划定义和时间段存储在 [Amazon DynamoDB 配置](https://aws.amazon.com/dynamodb/)表中。您可以在此表中定义任意数量的计划和周期，以控制实例的启动和停止时间。

1. DynamoDB 注册表会自动跟踪所有托管资源。当资源被[标记为可以调度](operator-guide.md#tag-instances-for-scheduling)时，它们将在此表中注册以响应 AWS 标记事件。

1. 每个调度 Lambda 函数都描述已标记的资源，根据当前时间评估其计划，并执行相应的启动或停止操作。

   1. 对于 EC2 实例，如果启动操作因容量不足而失败，则可以将解决方案配置为在重试启动操作之前尝试将[实例大小调整为其他实例类型](specifying-alternate-instance-types-for-ec2.md)。

1. [可[通过 DynamoDB 控制台、[计划程序 CLI 工具](scheduler-cli.md)或 A](schedule-reference.md) WS 自定义资源进行日程管理。 CloudFormation ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)该解决方案使用预先配置的几个示例计划进行部署。

1. 跨账户部署使用中心分支架构，在这种架构中，分支账户会自动向中心账户进行自我注册。分支堆栈必须部署在与中心堆栈相同的区域，并且必须获得中心堆栈或同一 AW [S](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 组织成员的预先批准。

1. 该解决方案将[调度和注册事件](monitor-the-solution.md#monitoring-eventbridge-events)发布到枢纽账户（全球事件）和分支账户（每个区域的本地事件）中的公交EventBridge 车。

**注意**  
AWS CloudFormation 资源是通过 [(AWS CDK)](https://aws.amazon.com/cdk/) 结构创建的。

此解决方案使用的所有 Lambda 函数都通过 AWS IAM 满足资源的权限要求，并通过 AWS KMS 对 [Amazon Simple Notification Service](https://aws.amazon.com/sns/)（Amazon SNS 主题）和 DynamoDB 表进行加密。

每当解决方案执行一次计划间隔时，都会根据关联计划中的目标状态（由实例标签中计划的一个或多个[时段](schedule-reference.md#periods)定义），检查每个已适当标记的实例的当前状态。随后，计划间隔会根据需要应用相应的启动或停止操作。

例如，如果 Lambda 函数在星期五上午 9 点（ET）调用，并且该函数识别一个带有标签 Schedule=office-hours 的已停止的 EC2 或 RDS 数据库实例，它将在 Amazon DynamoDB 中查询办公时间计划配置详细信息。如果办公时间计划包含一个时段，表明该实例应从星期一至星期五上午 9 点（ET）至下午 5 点（ET）运行，则 Lambda 函数将启动该实例。

Lambda 函数还会记录有关您的资源的信息，并将其显示在可选的 A [mazon Cu CloudWatch st](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html) om 控制面板中。记录的信息包括为每个计划标记的实例数量、这些实例的大小以及这些实例当前是处于运行中状态还是已停止状态。有关此自定义控制面板的更多信息，请参阅[运营洞察控制面板](monitor-the-solution.md#operational-insights-dashboard)。

**注意**  
 *停止* Amazon EC2 实例与*终止* Amazon EC2 实例是两项不同的操作。虽然 Amazon EC2 实例默认配置为在关闭时停止而不是终止，但您可以修改此行为。在使用此解决方案之前，请确认实例已根据需求设置为停止或终止。