

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Architecture
<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_tw/solutions/latest/instance-scheduler-on-aws/images/InstanceScheduler-architecture.png)


1. [Amazon EventBridge 規則](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-rules.html)會以可設定的間隔觸發協同運作 Lambda 函數 （預設值：每 5 分鐘）。

1. EventBridge 規則會叫用 [AWS Lambda](https://aws.amazon.com/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 主控台](schedule-reference.md)、[排程器 CLI 工具](scheduler-cli.md)或 [AWS CloudFormation Custom 資源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html)進行。解決方案會部署多個預先設定的範例排程。

1. 跨帳戶部署使用中樞輻式架構，其中輻條帳戶會自動向中樞帳戶自我註冊。呼叫堆疊必須部署在與中樞堆疊相同的區域中，且必須由中樞堆疊或相同 [AWS Organization](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)所定義），檢查每個適當標記之執行個體的目前狀態。然後，排程間隔會視需要套用適當的開始或停止動作。

例如，如果在星期五上午 9 點 (ET) 叫用 Lambda 函數，並識別已停止的 EC2 或 RDS 資料庫執行個體，其 Schedule=office-hours 標籤，則會檢查 Amazon DynamoDB 是否有上班時間排程組態詳細資訊。如果上班時間排程包含的期間指出執行個體應該在週一至週五的東部時間上午 9 點至下午 5 點執行，則 Lambda 函數會啟動該執行個體。

Lambda 函數也會記錄 資源的相關資訊，並將其顯示在選用的 [Amazon CloudWatch Custom 儀表板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)中。記錄的資訊包括為每個排程加上標籤的執行個體數量、這些執行個體的大小，以及這些執行個體目前是否處於執行中或已停止狀態。如需此自訂儀表板的詳細資訊，請參閱[操作洞察儀表板](monitor-the-solution.md#operational-insights-dashboard)。

**注意**  
 *停止* Amazon EC2 執行個體與*終止* Amazon EC2 執行個體不同。根據預設，Amazon EC2 執行個體設定為在關閉時停止，而不是終止，但您可以修改此行為。使用此解決方案之前，請確認執行個體已設定為適當停止或終止。