如何將 Instance Scheduler 與 CloudFormation 搭配使用來排程 EC2 執行個體?

3 分的閱讀內容
0

我想將 AWS Instance Scheduler 與 AWS CloudFormation 搭配使用,來排程 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。

簡短描述

使用 CloudFormation 範本來自動化部署AWS Instance Scheduler

**重要:**如果您對具有加密 Amazon Elastic Block Store (Amazon EBS) 的 EC2 執行個體使用 Instance Scheduler,則無法啟動執行個體。若要啟動執行個體,您必須授予 Instance Scheduler 主要使用者角色,該角色使用金鑰政策來加密或解密 EBS 磁碟區。您必須將金鑰政策新增至 AWS Key Management Service (KMS) 金鑰,以允許主要使用者角色使用此金鑰。

解決方法

安裝 Instance Scheduler

如果您尚未執行此操作,請遵循指示安裝 Instance Scheduler 命令列介面 (CLI)

為確認安裝成功,請執行下列命令:

$ scheduler-cli --version

使用 Instance Scheduler 範本建立 CloudFormation 堆疊

此堆疊會部署 AWS Lambda 函數、Amazon DynamoDB 資料表、Amazon EventBridge 規則以及 Amazon CloudWatch 自訂指標。

  1. 開啟 AWS 管理主控台
  2. 使用 Instance Scheduler 範本開啟 CloudFormation。或者,前往步驟 1.啟動 Instance Scheduler 中樞堆疊頁面,然後選擇啟動解決方案
    **注意:**依預設,範本會在美國東部 (維吉尼亞北部) 區域啟動。
  3. 在導覽列中,選取您要在其中啟動堆疊範本的 AWS 區域,然後選擇下一步
  4. 對於堆疊名稱,命名您的堆疊。
  5. 對於 Instance Scheduler TagName,您可以將預設值保留為 Schedule,或予以自訂。
  6. 對於頻率,選擇執行排程器的頻率 (以分鐘為單位)。例如,您可以選擇 5 分鐘。
    注意:頻率是 EventBridge 再次為 Instance Scheduler 啟動 Lambda 函數之前所經過的分鐘數。如果您有大量的執行個體,請使用可能的最高頻率以避免限流。如果頻率經常不足以滿足您的需求,您可以在稍後調整頻率屬性。
  7. 對於啟用 CloudWatch 指標,選擇
  8. 對於啟用 CloudWatch 日誌,選擇
  9. (選用) 對於已啟動標籤,輸入 state=started
  10. (選用) 對於已停止****標籤,輸入 state=stopped
  11. 對於跨帳戶排程,提供跨帳戶角色參數。為次要帳戶中的每個角色輸入 ARN,並用逗號分隔。如果您不使用跨帳戶排程,請將該參數保留空白。
  12. 對於所有其他參數,根據您的需求自訂堆疊。
  13. 選擇下一步
  14. 選項頁面上,選擇下一步
  15. 檢閱您的設定,然後選取我確認 AWS CloudFormation 可能會建立 IAM 資源
  16. 選擇建立

建立期間

若要建立期間,您可以使用 Instance Scheduler CLI、DynamoDB 主控台或自訂資源。如需有關時間期間的詳細資訊,請參閱開始和停止時間

下列範例說明如何建立執行個體:

  • 星期一至五上午 9 點開始,下午 5 點停止
  • 星期六上午 9 點開始,中午 12 點停止

對於此範例,您必須建立兩個期間。對於您自己的案例,建立適當的期間數。

使用 Instance Scheduler CLI

連線至 Instance Scheduler CLI,然後執行下列命令:

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri  

$ scheduler-cli create-period --stack your\_stack\_name --region eu-west-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

**注意:**將 your_stack_name 取代為您在步驟 4 中選擇的堆疊名稱,並將 eu-west-1 取代為您自己的區域。
使用 DynamoDB 主控台

  1. 開啟 DynamoDB 主控台
  2. 選擇資料表,然後選擇組態資料表。
    **注意:**Instance Scheduler 範本會自動建立兩個 DynamoDB 資料表:狀態和組態。狀態資料表會儲存範本停止和啟動的執行個體狀態。組態資料表可讓您指定要求的期間和排程。
  3. 選擇探索資料表項目
  4. 選擇建立項目
  5. 選擇 JSON 檢視,然後使用下列 JavaScript 物件標記法 (JSON) 範本:
{  
  "type": {  
    "S": "period"  
  },  
  "name": {  
    "S": "mon-fri-9-5"  
  },  
  "begintime": {  
    "S": "9:00"  
  },  
  "endtime": {  
    "S": "16:59"  
  },  
  "weekdays": {  
    "SS": \[  
      "mon-fri"  
    \]  
  }  
}

**注意:**前面的 JSON 範本會建立第一個期間。對第二個期間使用類似的 JSON 範本。確保根據您的要求編輯範本。

建立排程

若要建立排程,您可以使用 Instance Scheduler CLI、DynamoDB 主控台或自訂資源

使用 Instance Scheduler CLI

執行下列命令:

$ scheduler-cli create-schedule --stack your\_stack\_name --name m-f9-5-sat9-12 --region eu-west-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

使用 DynamoDB 主控台

  1. 開啟 DynamoDB 主控台
  2. 選擇資料表,然後選擇組態資料表。
  3. 選擇探索資料表項目
  4. 選擇建立****項目
  5. 選擇 JSON 檢視,然後使用下列 JSON 範本:
{  
  "type": {  
    "S": "schedule"  
  },  
  "name": {  
    "S": "m-f9-5-sat9-12"  
  },  
  "timezone": {  
    "S": "UTC"  
  },  
  "periods": {  
    "SS": \[  
      "mon-fri-9-5"  
    \]  
  }  
}

標記執行個體並測試排程

在將 CloudFormation 堆疊與 Instance Scheduler 搭配使用時,您必須定義 Instance Scheduler TagName 參數。此參數的預設值為 Schedule

Instance Scheduler 會監控執行個體上的標籤。如果執行個體標籤鍵與定義的排程器標籤相符,Instance Scheduler 會套用為執行個體標籤值設定的排程。例如,標籤的設定為 Schedule,且設定為 m-f9-5-sat9-12。在此範例中,執行個體在星期一至星期五從上午 9 點開始,下午 5 點停止。在星期六,該執行個體也在上午 9 點開始,中午 12 點停止。

注意:標籤區分大小寫。如果執行個體在執行期間以外手動啟動執行個體,Instance Scheduler 不會停止執行它們。如果執行個體在執行期間手動停止執行個體,除非強制執行排程,否則 Instance Scheduler 也不會啟動執行個體。如需詳細資訊,請參閱排程定義

使用預先定義的排程

除了自訂排程之外,您還可以使用組態資料表中任何預先定義的排程。例如,下列步驟會測試名為 running 的預先定義排程:

  1. 開啟 Amazon EC2 主控台
  2. 選擇要標記的已停止執行個體。
  3. 選擇標籤檢視,然後選擇管理標籤
  4. 選擇新增標籤
  5. 對於,輸入 Schedule
  6. 對於,輸入 running
  7. 選擇儲存
  8. 重新整理 Amazon EC2 主控台,然後等待 Lambda 函數啟動。
    注意:當 Lambda 函數啟動並執行而無錯誤時,視您正在測試的排程而定,執行個體狀態會顯示為執行中。在 CloudWatch 主控台中,您可以檢查 Lambda 指標是否有調用和錯誤
  9. 開啟 DynamoDB 主控台
  10. 選擇資料表,然後選擇狀態資料表。
  11. 選擇探索資料表項目並確認已啟動標記的執行個體。狀態資料儲存在狀態表中。
    **重要:**根據使用的 Lambda 函數的頻率和持續時間,會對您收取額外費用。對於您建立的 DynamoDB 資料表或 EventBridge 規則,也可能會對您收取額外費用。

對於跨帳戶排程: 在次要帳戶中啟動遠端堆疊

若要使用 Instance Scheduler 在次要帳戶中排定執行個體,請部署 aws-instance-scheduler-remote CloudFormation 範本。此範本會建立角色,允許主要帳戶中的 Instance Scheduler 管理次要帳戶中的執行個體。

**注意:**您必須提供角色的 ARN 作為主要帳戶中 Instance Scheduler 堆疊的參數。確保使用正確的參數建立或更新 Instance Scheduler 堆疊。

  1. 開啟次要帳戶的 AWS 管理主控台,然後啟動 aws-instance-scheduler-remote CloudFormation 範本。您也可以下載範本以供將來使用。
    **注意:**依預設,範本會在美國東部 (維吉尼亞北部) 區域啟動。
  2. 在導覽列中,選取您要在其中啟動堆疊範本的 AWS 區域,然後選擇下一步
  3. 選取範本頁面上,確認您選取了正確範本,然後選擇下一步
  4. 指定詳細資訊頁面上,為遠端堆疊指派名稱。
  5. 參數下,檢閱並修改主要帳戶參數。輸入主要帳戶的帳號。
  6. 選擇下一步
  7. 選項頁面上,選擇下一步
  8. 檢閱您的設定,然後選取我確認 AWS CloudFormation 可能會建立 IAM 資源
  9. 選擇建立
  10. 選擇堆疊輸出標籤,然後複製 CrossAccountRole 值。
  11. 從主要帳戶選擇您的 CloudFormation 堆疊,然後選擇更新
  12. 更新堆疊 頁面上,選擇使用目前的範本
  13. 跨帳戶角色參數中,貼上 CrossAccountRole 值。
  14. 選擇下一步,然後選取我確認 AWS CloudFormation 可能會建立 IAM 資源
  15. 選擇更新堆疊
AWS 官方
AWS 官方已更新 1 年前