跳至內容

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

4 分的閱讀內容
0

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

解決方法

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確保您使用的是最新的 AWS CLI 版本

若要自動部署 AWS Instance Scheduler,請使用 CloudFormation 範本。

**注意:**如果您將 Amazon EC2 執行個體的 Instance Scheduler 與加密的 Amazon Elastic Block Store (Amazon EBS) 一起使用,那麼您的執行個體將無法啟動。您必須將金鑰政策新增至 AWS Key Management Service (AWS KMS) 金鑰,以允許金鑰使用者角色使用此金鑰。

安裝 Instance Scheduler

安裝Instance Scheduler。然後,若要確認是否成功安裝,請執行以下命令:

$ scheduler-cli --version

使用 Instance Scheduler 範本建立 CloudFormation 堆疊

若要部署 AWS Lambda 函式、Amazon DynamoDB 表、Amazon EventBridge 規則和 Amazon CloudWatch 自訂指標,請完成下列步驟:

  1. 開啟 AWS Management Console (AWS 管理主控台)。
  2. 使用 Instance Scheduler 範本開啟 CloudFormation 主控台。預設情況下,該範本會在美國東部 (維吉尼亞北部) 區域啟動。或者,前往步驟 1.啟動 Instance Scheduler 中樞堆疊頁面,然後選擇 Launch Solution (啟動解決方案)。
    在導覽列中,選取您想要使用範本啟動堆疊的 AWS 區域,然後選擇 Next (下一步)。
    Stack name (堆疊名稱),請為您的堆疊命名。
    Instance Scheduler TagName,您可以保留預設值 Schedule,也可以對其進行自訂。
    Frequency (頻率),選擇執行排程器的頻率 (以分鐘為單位)。例如,您可以選擇 5 分鐘。
    注意:頻率是 EventBridge 再次為 Instance Scheduler 啟動 Lambda 函數之前所經過的分鐘數。如果您有大量的執行個體,請使用可能的最高頻率以避免限流。如果頻率經常不足以滿足您的需求,您可以在稍後調整頻率屬性。
    Enable CloudWatch Metrics (啟用 CloudWatch 指標),選擇 Yes (是)。
    Enable CloudWatch Logs (啟用 CloudWatch Logs),選擇 Yes (是)。
    (選用) 在 Started tags (已啟動標籤),輸入 state=started
    (選用) 在 Stopped tags (已停止標記),輸入 state=stopped
    對於跨帳戶排程,請提供跨帳戶角色參數。輸入次要帳戶中每個角色的 Amazon Resource Name (ARN),並以逗號分隔。如果您不使用跨帳戶排程,請將參數保持為空。
  3. 選擇 Next (下一步)。
  4. Options (選項) 頁面上,選擇 Next (下一步)。
  5. 檢查您的設定,然後選擇 I acknowledge that AWS CloudFormation might create IAM resources (我確認 AWS CloudFormation 可能會建立 IAM 資源)。
  6. 選擇 Create (建立)。

建立期間

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

使用 Instance Scheduler CLI

連線到 Instance Scheduler CLI,然後執行以下 create-period AWS CLI 命令:

$ scheduler-cli create-period --stack your_stack_name --region aa-example-1 --name mon-fri-9-5 --begintime 9:00 --endtime 16:59 --weekdays mon-fri    
$ scheduler-cli create-period --stack your_stack_name --region aa-example-1 --name sat-9-12 --begintime 9:00 --endtime 11:59 --weekdays sat

**注意:**將 your_stack_name 替換為您在步驟 2 中選擇的堆疊名稱,並將 aa-example-1 替換為您的區域。

使用 DynamoDB 主控台

若要建立期間,請完成以下步驟:

  1. 開啟 DynamoDB console (DynamoDB 主控台)。
  2. 選擇 Tables (資料表),然後選取組態資料表。
    **注意:**Instance Scheduler 範本會自動建立狀態和組態 DynamoDB 表。狀態資料表會儲存範本停止和啟動的執行個體狀態。您可以透過組態資料表指定滿足您需求的期間和排程。
  3. 選擇 Explore Table Items (探索資料表項目)。
  4. 選擇 Create Item (建立項目)。
  5. 選擇 JSON 檢視,然後使用以下 JSON 範本:
    {    "type": {  
        "S": "period"  
      },  
      "name": {  
        "S": "mon-fri-9-5"  
      },  
      "begintime": {  
        "S": "9:00"  
      },  
      "endtime": {  
        "S": "16:59"  
      },  
      "weekdays": {  
        "SS": [  
          "mon-fri"  
        ]  
      }  
    }
    **注意:**前面的 JSON 範本會建立第一個期間。對第二個時期使用類似的 JSON 範本。將 mon-fri-9-5 替換為您的期間名稱,將 9:00 替換為您的開始時間,並將 16:59 替換為您的結束時間。

建立排程

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

使用 Instance Scheduler CLI

若要建立排程,請執行以下 create-schedule CLI 命令:

$ scheduler-cli create-schedule --stack your_stack_name --name m-f9-5-sat9-12 --region aa-example-1 --periods mon-fri-9-5,sat-9-12 --timezone UTC

**注意:**將 your_stack_name 替換為您的堆疊名稱,將 aa-example-1 替換為您的區域,並將 mon-fri-9-5,sat-9-12 替換為您的排程。

使用 DynamoDB 主控台

若要建立排程,請完成以下步驟:

  1. 開啟 DynamoDB console (DynamoDB 主控台)。
  2. 選擇 Tables (資料表),然後選取組態資料表。
  3. 選擇 Explore Table Items (探索資料表項目)。
  4. 選擇 Create Item (建立項目)。
  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 console (Amazon EC2 主控台)。
  2. 選擇要標記的已停止執行個體。
  3. 選擇標籤檢視,然後選擇管理標籤
  4. 選擇新增標籤
  5. 對於,輸入 Schedule
  6. 對於,輸入 running
  7. 選擇 Save (儲存)。
  8. 重新整理 Amazon EC2 主控台,然後等待 Lambda 函式啟動。
    注意:如果 Lambda 函式啟動,並運作正常且沒有錯誤,則 Instance State (執行個體狀態) 會顯示為執行中。這取決於您測試的排程。在 CloudWatch 主控台中,您可以檢查 Lambda 調用和錯誤的 CloudWatch 指標
  9. 開啟 DynamoDB console (DynamoDB 主控台)。
  10. 選擇 Tables (資料表),然後選取狀態資料表。
  11. 選擇 Explore Table Items (探索資料表項目),然後確認已啟動標記的執行個體。
    **重要:**根據您使用 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. 在導覽列中,選取您想要使用範本啟動堆疊的區域,然後選擇 Next (下一步)。

  3. Select Template (選取範本) 頁面上, 確認您選取的範本是否正確,然後選擇 Next (下一步)。

  4. 指定詳細資訊頁面上,為遠端堆疊指派名稱。

  5. Parameters (參數) 下,檢查並修改主要帳戶參數。輸入主要帳戶的帳號。

  6. 選擇 Next (下一步)。

  7. Options (選項) 頁面上,選擇 Next (下一步)。

  8. 檢查您的設定,然後選擇 I acknowledge that AWS CloudFormation might create IAM resources (我確認 AWS CloudFormation 可能會建立 IAM 資源)。

  9. 選擇 Create (建立)。

  10. 選擇堆疊 Outputs (輸出) 標籤,然後複製 CrossAccountRole 值。

  11. 從主要帳戶中,選取您的 CloudFormation 堆疊,然後選擇 Update (更新)。

  12. Update stack (更新堆疊) 頁面上,選擇 Use current template (使用目前範本)。

  13. Cross-account roles (跨帳戶角色) 參數中,貼上 CrossAccountRole 值。

  14. 選擇 Next (下一步),然後選擇 I acknowledge that AWS CloudFormation might create IAM resources (我確認 AWS CloudFormation 可能會建立 IAM 資源)。

  15. 選擇 Update Stack (更新堆疊)。

AWS 官方已更新 7 個月前