如何使用 EventBridge 排程器定期停止和啟動 Amazon EC2 執行個體?
我想使用 Amazon EventBridge 排程器自動停止和啟動我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
簡短說明
若要自動停止和啟動 EC2 執行個體,請使用 EventBridge 排程器直接呼叫 StartInstances 和 StopInstances Amazon EC2 API。或者,您可以使用排程器來調用 AWS Lambda 函式以停止和啟動執行個體。使用 Amazon EC2 API 作為排程器目標是最佳實務,這樣可以避免建立額外的 Lambda 函式。
若要尋求更進階的解決方案,請使用 AWS 上的 Instance Scheduler。
解決方法
先決條件:取得您想要停止和啟動的執行個體 ID。
使用排程器直接呼叫 Amazon EC2 API
**為 EventBridge 排程器建立 IAM 政策和角色 **
請完成下列步驟:
- 使用 JSON 政策編輯器建立 AWS Identity and Access Management (IAM) 政策,讓 EventBridge 排程器可以停止和啟動您的執行個體。
政策範例:
**注意:**如果您使用客戶受管 AWS Key Management Service (KMS) 金鑰加密的 Amazon Elastic Block Store (Amazon EBS) 磁碟區,請將 kms:CreateGrant 新增至該政策。如果 Lambda 函式沒有加密金鑰的存取權,則只能停止而無法重新啟動執行個體。如需更多資訊,請參閱 Required AWS KMS key policy for use with encrypted volumes (與加密磁碟區搭配使用的必要 AWS KMS key 政策)。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Start*", "ec2:Stop*" ], "Resource": "*" } ] } - 開啟 IAM 主控台。
- 選擇 Roles (角色),然後選擇 Create role (建立角色)。
- 在 Trusted entity type (受信任實體類型) 中,選擇 Custom trust policy (自訂信任政策)。
- 輸入下列 IAM 政策:
**注意:**請將 AWS_ACCOUNT_ID 替換為您的 AWS 帳戶 ID。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "AWS_ACCOUNT_ID" } } } ] } - 選擇 Next (下一步)。
- 針對 Permissions policies (許可政策),選取您在步驟 1 中建立的 IAM 政策。
- 針對 Role name (角色名稱),輸入名稱,例如 EventBridge_Scheduler_Role。
- 選擇 Create role (建立角色)。
建立 EventBridge 排程器排程
為 StopInstances API 建立一個排程,並為 StartInstances API 建立另一個排程。建立排程時,請採用下列設定:
- 針對 Target API (目標 API),選取 All APIs (所有 API),然後搜尋 Amazon EC2。
- 選取 StopInstances 或 StartInstances,然後輸入執行個體 ID。
- 針對 Settings - optional (設定 – 選用),在 Permissions (許可) 下選擇 Select an existing role (選取現有角色),然後選擇您建立的 IAM 角色。
使用排程器調用 Lambda 函式
為 Lambda 函式建立 IAM 政策和角色
請完成下列步驟:
- 使用 JSON 政策編輯器建立 IAM 政策,以允許 Lambda 停止和啟動執行個體。
政策範例:
**注意:**如果您使用客戶受管 AWS KMS key 加密的 Amazon EBS 磁碟區,請將 kms:CreateGrant 新增至該政策。如果 Lambda 函式沒有加密金鑰的存取權,則只能停止而無法重新啟動執行個體。如需更多資訊,請參閱 Required AWS KMS key policy for use with encrypted volumes (與加密磁碟區搭配使用的必要 AWS KMS key 政策)。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "arn:aws:logs:*:*:*" }, { "Effect": "Allow", "Action": [ "ec2:Start*", "ec2:Stop*" ], "Resource": "*" } ] } - 為 Lambda 建立 IAM 角色。
- 將 IAM 政策附加至 IAM 角色。
建立停止和啟動執行個體的 Lambda 函式
請完成下列步驟:
- 開啟 Lambda 主控台。
- 選擇 Create function (建立函式),然後選擇 Author from scratch (從頭開始撰寫)。
- 在 Basic information (基本資訊) 下,採用下列設定:
針對 Function name (函式名稱),輸入能夠描述函式的名稱,例如 StopEC2Instances 或 StartEC2Instances。
Runtime (執行時期) 請選擇 Python 3.14。
在 Permissions (許可) 下,展開 Change default execution role (變更預設執行角色)。
在 Execution role (執行角色) 下,選擇 Use an existing role (使用現有角色)。
在 Existing role (現有角色) 下,選擇您建立的 IAM 角色。 - 選擇 Create function (建立函式)。
- 選擇 Code (程式碼) 索引標籤,然後選擇 lambda_function.py 索引標籤。
- 針對 Code source (程式碼來源),在程式碼編輯器中輸入下列程式碼以設定執行個體停止:
若要設定執行個體啟動,請在程式碼編輯器中輸入下列程式碼:import boto3 region = 'us-west-1' instances = ['i-12345acdb12345abcd', 'i-12345acdb12345abcd'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.stop_instances(InstanceIds=instances) print('stopped your instances: ' + str(instances))
**注意:**請將 us-west-1 替換為您執行個體所在的 AWS 區域,並將 i-12345acdb12345abcd 替換為您的執行個體 ID。import boto3 region = 'us-west-1' instances = ['i-12345acdb12345abcd', 'i-12345acdb12345abcd'] ec2 = boto3.client('ec2', region_name=region) def lambda_handler(event, context): ec2.start_instances(InstanceIds=instances) print('started your instances: ' + str(instances)) - 選擇 Deploy (部署)。
- 選擇 Configuration (組態) 索引標籤,然後選擇 General configuration (一般組態)。
- 選擇 Edit (編輯)。
- 針對 Timeout (逾時),選取 10 seconds (10 秒),然後選擇 Save (儲存)。
**注意:**如果您將該函式與 Amazon Virtual Private Cloud (Amazon VPC) 建立關聯,請確認函式是否可以透過網際網路連線至 Amazon EC2 端點。或者,為 Amazon EC2 設定虛擬私有雲端 (VPC) 端點。
測試 Lambda 函式
針對執行個體停止和執行個體啟動測試 Lambda 函式。
在執行測試前後,請檢查執行個體的狀態,確認函式正常運作。
若要使用 AWS CloudTrail 確認 Lambda 函式已停止或啟動執行個體,請完成下列步驟:
- 開啟 CloudTrail 主控台。
- 在導覽窗格中,選擇 Event history (事件歷史記錄)。
- 在 Lookup attributes (查詢屬性) 下拉式清單中,選擇 Event name (事件名稱)。
- 在搜尋列中,輸入 StopInstances 以檢閱結果,接著輸入 StartInstances。
**注意:**如果沒有結果,則 Lambda 函式不會停止或啟動執行個體。
建立 EventBridge 排程器排程以執行 Lambda 函式
建立排程以執行您的 Lambda 函式。針對 Select target (選取目標),選擇 Templated targets (範本化目標),然後選擇 AWS Lambda Invoke (AWS Lambda 調用)。使用您建立的 Lambda 函式。
- 語言
- 中文 (繁體)

相關內容
已提問 3 年前
已提問 3 年前
已提問 2 年前
