使用 Amazon 監控並以程式設計方式回應EC2叢集或 Spot 叢集所發出的事件 EventBridge - Amazon Elastic Compute Cloud

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

使用 Amazon 監控並以程式設計方式回應EC2叢集或 Spot 叢集所發出的事件 EventBridge

當EC2叢集或 Spot 叢集的狀態變更時,會發出通知。該通知作為發送到 Amazon 的事件提供 EventBridge (以前稱為 Amazon CloudWatch 活動)。盡可能發出事件。

您可以使用 Amazon 建 EventBridge 立規則,以便觸發程式設計動作以回應事件。例如,您可以建立兩個 EventBridge 規則:一個規則在叢集狀態變更時觸發,另一個則在叢集中的執行個體終止時觸發。在此範例中,您可以設定第一個規則,以便在叢集狀態變更時,規則會叫用SNS主題,並傳送電子郵件通知給您。您可以設定第二個規則,以便在叢集中的執行個體終止時,規則會叫用 Lambda 函數來啟動新執行個體。

注意

只有類型 maintainrequest 的機群會發出事件。類型 instant 的機群不會發出事件,因為它們提交一次性的同步請求,而且在回應中會立即知道機群的狀態。若要使用 Amazon EventBridge 監控叢集事件,請求類型必須是maintainrequest

如需如何描述叢集事件歷程記錄的指示,請參閱描述EC2艦隊的事件歷史

建立 Amazon EventBridge 規則以監控EC2叢集或競價型叢集事件

當針對EC2叢集或 Spot 叢集發出狀態變更通知時,會以事件形式傳送至 Amazon EventBridge 作為JSON檔案。如果 EventBridge 偵測到符合規則中定義的模式的事件模式,則會 EventBridge 叫用規則中指定的目標 (或多個目標)。

您可以撰寫 EventBridge 規則,根據相符的事件模式自動執行動作。

事件中的下列欄位會形成規則中定義的事件模式:

"source": "aws.ec2fleet"

識別事件來自「EC2叢集」。

"detail-type": "EC2 Fleet State Change"

識別事件類型。

"detail": { "sub-type": "submitted" }

識別事件子類型。

如需EC2叢集和 Spot 叢集事件清單以及事件資料範例,請參閱EC2艦隊事件類型Spot Fleet 事件類型

建立 EventBridge 規則以傳送通知

下列範例會建立 EventBridge 規則,以便在 Amazon EC2 每次發出EC2叢集狀態變更通知時傳送電子郵件、文字訊息或行動推播通知。將發出此範例中的訊號作為 EC2 Fleet State Change 事件,這會觸發規則定義的動作。

先決條件

在建立 EventBridge 規則之前,您必須為電子郵件、文字訊息或行動推播通知建立 Amazon SNS 主題。

若要建立 EventBridge 規則,以便在EC2叢集狀態變更時傳送通知
  1. 在打開 Amazon EventBridge 控制台https://console.aws.amazon.com/events/

  2. 選擇建立規則

  3. 針對 Define rule detail (定義規則詳細資訊) 執行下列動作:

    1. 輸入規則的Name (名稱),或者輸入描述。

      在同一個區域和同一個事件匯流排上,規則不能與另一個規則同名。

    2. 針對事件匯流排選擇預設值。當一個 AWS 您帳戶中的服務會生成一個事件,它始終轉到您帳戶的默認事件總線。

    3. 針對規則類型,選擇具有事件模式的規則

    4. 選擇 Next (下一步)

  4. 針對 Build event pattern (建置事件模式) 執行下列動作:

    1. 對於事件來源,請選擇 AWS 活動或 EventBridge 合作夥伴活動

    2. 針對此範例的 Event pattern (事件模式),您需指定下列事件模式,以便與 EC2 Fleet Instance Change 事件相符。

      { "source": ["aws.ec2fleet"], "detail-type": ["EC2 Fleet Instance Change"] }

      若要新增事件模式,您可以選擇事件模式表單來使用範本,或選擇自訂模式 (JSON編輯器) 來指定您自己的模式,如下所示:

      1. 若要使用範本建立事件模式,請執行下列動作:

        1. 選擇 Event pattern form (事件模式表單)。

        2. 對於事件來源,請選擇 AWS 服務

        3. 針對 AWS 服務,選擇EC2車隊

        4. 針對事件類型,選擇EC2叢集執行個體變更

        5. 若要自訂範本,請選擇 Edit pattern (編輯模式) 並進行變更以與範例事件模式相符。

      2. (替代) 若要指定自訂事件模式,請執行下列動作:

        1. 選擇自定義模式(JSON編輯器)

        2. Event pattern (事件模式) 方塊中,為此範例新增事件模式。

    3. 選擇 Next (下一步)

  5. 針對 Select target(s) (選取目標) 執行下列動作:

    1. 針對「目標」類型,選擇 AWS 服務

    2. 針對 [選取目標],選擇要在事件發生時傳送電子郵件、簡訊或行動推播通知的SNS主題

    3. 針對 Topic (主題),請選擇現有的主題。您首先需要使用 Amazon 控制台創建一個 Amazon SNS SNS 主題。如需詳細資訊,請參閱 Amazon 簡單通知服務開發人員指南中的使用 Amazon SNS 進行 application-to-person (A2P) 簡

    4. (選用) 在 Additional settings (其他設定) 下,您可以選擇性地設定其他設定。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南中的建立對事件做出反應的 Amazon EventBridge 規則 (步驟 16)。

    5. 選擇 Next (下一步)

  6. (選用) 針對 Tags (標籤),您可以選擇性地將一或多個標籤指派給您的規則,然後選擇 Next (下一步)。

  7. 針對 Review and create (檢閱和建立) 執行下列動作:

    1. 檢閱規則的詳細資訊,然後視需求進行修改。

    2. 選擇建立規則

有關更多信息,請參閱 Amazon EventBridge 用戶指南中的 Amazon EventBridge 規則和 Amazon EventBridge 事件模式

建立 EventBridge 規則以觸發 Lambda 函數

下列範例會建立 EventBridge 規則,以便在每次 Amazon 在執行個體啟動時EC2發出EC2叢集執行個體變更通知時觸發 Lambda 函數。將發出此範例中的訊號作為 EC2 Fleet Instance Change 事件 (子類型 launched),這會觸發規則定義的動作。

在建立 EventBridge 規則之前,您必須先建立 Lambda 函數。

若要建立要在 EventBridge 規則中使用的 Lambda 函數
  1. 打開 AWS Lambda 控制台在https://console.aws.amazon.com/lambda/

  2. 選擇 Create function (建立函式)。

  3. 輸入函數的名稱、設定程式碼,然後選擇 Create function (建立函數)

    如需使用 Lambda 的詳細資訊,請參閱使用主控台建立 Lambda 函數 AWS Lambda 開發人員指南

若要建立 EventBridge 規則以在EC2叢集中的執行個體變更狀態時觸發 Lambda 函數
  1. 在打開 Amazon EventBridge 控制台https://console.aws.amazon.com/events/

  2. 選擇建立規則

  3. 針對 Define rule detail (定義規則詳細資訊) 執行下列動作:

    1. 輸入規則的Name (名稱),或者輸入描述。

      在同一個區域和同一個事件匯流排上,規則不能與另一個規則同名。

    2. 針對事件匯流排選擇預設值。當一個 AWS 您帳戶中的服務會生成一個事件,它始終轉到您帳戶的默認事件總線。

    3. 針對規則類型,選擇具有事件模式的規則

    4. 選擇 Next (下一步)

  4. 針對 Build event pattern (建置事件模式) 執行下列動作:

    1. 對於事件來源,請選擇 AWS 活動或 EventBridge 合作夥伴活動

    2. 針對此範例的 Event pattern (事件模式),您需指定下列事件模式,以便與 EC2 Fleet Instance Change 事件和 launched 子類型相符。

      { "source": ["aws.ec2fleet"], "detail-type": ["EC2 Fleet Instance Change"], "detail": { "sub-type": ["launched"] }

      若要新增事件模式,您可以選擇事件模式表單來使用範本,或選擇自訂模式 (JSON編輯器) 來指定您自己的模式,如下所示:

      1. 若要使用範本建立事件模式,請執行下列動作:

        1. 選擇 Event pattern form (事件模式表單)。

        2. 對於事件來源,請選擇 AWS 服務

        3. 針對 AWS 服務,選擇EC2車隊

        4. 針對事件類型,選擇EC2叢集執行個體變更

        5. 選擇 Edit pattern (編輯模式),並新增 "detail": {"sub-type": ["launched"] 以符合範例事件模式。若要取得適當的JSON格式,請在前面的方括號 (,) 之後插入逗號 (])。

      2. (替代) 若要指定自訂事件模式,請執行下列動作:

        1. 選擇自定義模式(JSON編輯器)

        2. Event pattern (事件模式) 方塊中,為此範例新增事件模式。

    3. 選擇 Next (下一步)

  5. 針對 Select target(s) (選取目標) 執行下列動作:

    1. 針對「目標」類型,選擇 AWS 服務

    2. 針對 [選取目標],選擇要在事件發生時傳送電子郵件、簡訊或行動推播通知的SNS主題

    3. 針對 Topic (主題),請選擇 Lambda function (Lambda 函數),然後在 Function (函數) 中選擇您建立的函數,以便在事件發生時回應。

    4. (選用) 在 Additional settings (其他設定) 下,您可以選擇性地設定其他設定。如需詳細資訊,請參閱 Amazon EventBridge 使用者指南中的建立對事件做出反應的 Amazon EventBridge 規則 (步驟 16)。

    5. 選擇 Next (下一步)

  6. (選用) 針對 Tags (標籤),您可以選擇性地將一或多個標籤指派給您的規則,然後選擇 Next (下一步)。

  7. 針對 Review and create (檢閱和建立) 執行下列動作:

    1. 檢閱規則的詳細資訊,然後視需求進行修改。

    2. 選擇建立規則

如需如何建立 Lambda 函數和執行 Lambda 函數的 EventBridge 規則的教學課程,請參閱教學課程:使用 EC2 EventBridge AWS Lambda 開發人員指南

EC2艦隊事件類型

有五種EC2艦隊事件類型。每個事件類型都有數個子類型。

EC2車隊狀態變更

EC2叢集變更狀態 EventBridge 時,EC2叢集會傳送EC2 Fleet State Change事件至 Amazon。

以下是此事件的範例資料。

{ "version": "0", "id": "715ed6b3-b8fc-27fe-fad6-528c7b8bf8a2", "detail-type": "EC2 Fleet State Change", "source": "aws.ec2fleet", "account": "123456789012", "time": "2020-11-09T09:00:20Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-598fb973-87b7-422d-be4d-6b0809bfff0a" ], "detail": { "sub-type": "active" } }

sub-type 的可能值為:

active

EC2叢集請求已通過驗證,Amazon 正在嘗試維護EC2正在執行的執行個體的目標數量。

deleted

EC2叢集要求已刪除,且沒有執行中的執行個體。EC2叢集將在執行個體終止兩天後刪除。

deleted_running

EC2叢集要求已刪除,且不會啟動其他執行個體。其現有執行個體將繼續執行直到中斷或終止。此請求會一直維持在該狀態,直到所有執行個體中斷或終止。

deleted_terminating

EC2叢集要求會遭到刪除,且其執行個體正在終止。此請求會一直維持在該狀態,直到所有執行個體終止。

expired

EC2叢集要求已過期。如果請求是使用 TerminateInstancesWithExpiration 集建立的,後續 terminated 事件會指出已終止執行個體。

modify_in_progress

EC2叢集要求正在修改中。請求會一直維持在此狀態,直到已完成修改。

modify_succeeded

已修改「EC2叢集」要求。

submitted

系統正在評估EC2叢集請求,Amazon EC2 正準備啟動目標執行個體數量。

progress

EC2艦隊請求正在完成。

EC2叢集競價型執行個體請求

EC2叢集中的 Spot 執EC2 Fleet Spot Instance Request Change行個體請求變更狀態 EventBridge 時,叢集會傳送事件至 Amazon。

以下是此事件的範例資料。

{ "version": "0", "id": "19331f74-bf4b-a3dd-0f1b-ddb1422032b9", "detail-type": "EC2 Fleet Spot Instance Request Change", "source": "aws.ec2fleet", "account": "123456789012", "time": "2020-11-09T09:00:05Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-83fd4e48-552a-40ef-9532-82a3acca5f10" ], "detail": { "spot-instance-request-id": "sir-rmqske6h", "description": "SpotInstanceRequestId sir-rmqske6h, PreviousState: cancelled_running", "sub-type": "cancelled" } }

sub-type 的可能值為:

active

Spot 執行個體請求已履行,並具有關聯的 Spot 執行個體。

cancelled

您已取消 Spot 執行個體請求,或 Spot 執行個體請求已過期。

disabled

您已停用 Spot 執行個體。

submitted

已提交 Spot 執行個體請求。

EC2機隊實例變更

EC2叢集中的執行EC2 Fleet Instance Change個體狀態變更 EventBridge時,叢集會傳送事件至 Amazon。

以下是此事件的範例資料。

{ "version": "0", "id": "542ce428-c8f1-0608-c015-e8ed6522c5bc", "detail-type": "EC2 Fleet Instance Change", "source": "aws.ec2fleet", "account": "123456789012", "time": "2020-11-09T09:00:23Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-598fb973-87b7-422d-be4d-6b0809bfff0a" ], "detail": { "instance-id": "i-0c594155dd5ff1829", "description": "{\"instanceType\":\"c5.large\",\"image\":\"ami-6057e21a\",\"productDescription\":\"Linux/UNIX\",\"availabilityZone\":\"us-east-1d\"}", "sub-type": "launched" } }

sub-type 的可能值為:

launched

已啟動新執行個體。

terminated

已終止執行個體。

termination_notified

Amazon EC2 在縮減期間終止 Spot 執行個體時,會傳送執行個體終止通知,例如,從 4 的目標容量變為 3 的目標容量。

EC2車隊資訊

EC2Fleet 會在履行期間發生錯誤 EventBridge 時,將EC2 Fleet Information事件傳送至 Amazon。此資訊事件不會封鎖機群嘗試履行其目標容量。

以下是此事件的範例資料。

{ "version": "0", "id": "76529817-d605-4571-7224-d36cc1b2c0c4", "detail-type": "EC2 Fleet Information", "source": "aws.ec2fleet", "account": "123456789012", "time": "2020-11-09T08:17:07Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-8becf5fe-bb9e-415d-8f54-3fa5a8628b91" ], "detail": { "description": "c4.xlarge, ami-0947d2ba12ee1ff75, Linux/UNIX, us-east-1a, Spot price in either SpotFleetRequestConfigData or SpotFleetLaunchSpecification or LaunchTemplate or LaunchTemplateOverrides is less than Spot market price $0.0619", "sub-type": "launchSpecUnusable" } }

sub-type 的可能值為:

fleetProgressHalted

每個啟動規格中的價格無效,因為價格低於 Spot 價格 (所有啟動規格都已產生 launchSpecUnusable 事件)。如果 Spot 價格變動,啟動規格則可能會變成有效。

launchSpecTemporarilyBlacklisted

組態無效,且多次嘗試啟動執行個體失敗。如需詳細資訊,請參閱事件的描述。

launchSpecUnusable

啟動規格中的價格無效,因為價格低於 Spot 價格。

registerWithLoadBalancersFailed

嘗試在負載平衡器失敗時註冊執行個體。如需詳細資訊,請參閱事件的描述。

EC2艦隊錯誤

EC2Fleet 會在履行期間發生錯誤 EventBridge 時,將EC2 Fleet Error事件傳送至 Amazon。錯誤事件會阻止機群嘗試履行其目標容量。

以下是此事件的範例資料。

{ "version": "0", "id": "69849a22-6d0f-d4ce-602b-b47c1c98240e", "detail-type": "EC2 Fleet Error", "source": "aws.ec2fleet", "account": "123456789012", "time": "2020-10-07T01:44:24Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:fleet/fleet-9bb19bc6-60d3-4fd2-ae47-d33e68eafa08" ], "detail": { "description": "m3.large, ami-00068cd7555f543d5, Linux/UNIX: IPv6 is not supported for the instance type 'm3.large'. ", "sub-type": "spotFleetRequestConfigurationInvalid" } }

sub-type 的可能值為:

iamFleetRoleInvalid

EC2叢集沒有啟動或終止執行個體的必要權限。

allLaunchSpecsTemporarilyBlacklisted

沒有任何組態是有效的,且多次嘗試啟動執行個體失敗。如需詳細資訊,請參閱事件的描述。

spotInstanceCountLimitExceeded

您已達到可啟動 Spot 執行個體的數目上限。

spotFleetRequestConfigurationInvalid

組態無效。如需詳細資訊,請參閱事件的描述。

Spot Fleet 事件類型

有五種 Spot Fleet 事件類型。每個事件類型都有數個子類型。

EC2發現艦隊狀態變更

Spot 叢集會在 Spot 叢集變更狀態 EventBridge時向 Amazon 傳送EC2 Spot Fleet State Change事件。

以下是此事件的範例資料。

{ "version": "0", "id": "d1af1091-6cc3-2e24-203a-3b870e455d5b", "detail-type": "EC2 Spot Fleet State Change", "source": "aws.ec2spotfleet", "account": "123456789012", "time": "2020-11-09T08:57:06Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-4b6d274d-0cea-4b2c-b3be-9dc627ad1f55" ], "detail": { "sub-type": "submitted" } }

sub-type 的可能值為:

active

Spot 叢集請求已經過驗證,Amazon EC2 正在嘗試維護執行中執行個體的目標數量。

cancelled

Spot Fleet 請求已取消,且無執行中的執行個體。Spot Fleet 將會在其執行個體終止後兩天刪除。

cancelled_running

Spot Fleet 請求已取消,不會啟動其他執行個體。其現有執行個體將繼續執行直到中斷或終止。此請求會一直維持在該狀態,直到所有執行個體中斷或終止。

cancelled_terminating

Spot Fleet 請求已取消,其執行個體正在終止。此請求會一直維持在該狀態,直到所有執行個體終止。

expired

Spot Fleet 請求已過期。如果請求是使用 TerminateInstancesWithExpiration 集建立的,後續 terminated 事件會指出已終止執行個體。

modify_in_progress

正在修改 Spot Fleet 請求。請求會一直維持在此狀態,直到已完成修改。

modify_succeeded

已修改 Spot Fleet 請求。

submitted

正在評估 Spot 叢集請求,Amazon EC2 正準備啟動目標執行個體數量。

progress

正在履行 Spot Fleet 請求。

EC2競價型叢集 Spot 執行個體請求

當叢集中的 Spot 執EC2 Spot Fleet Spot Instance Request Change行個體請求變更狀態 EventBridge 時,Spot 叢集會傳送事件至 Amazon。

以下是此事件的範例資料。

{ "version": "0", "id": "cd141ef0-14af-d670-a71d-fe46e9971bd2", "detail-type": "EC2 Spot Fleet Spot Instance Request Change", "source": "aws.ec2spotfleet", "account": "123456789012", "time": "2020-11-09T08:53:21Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-a98d2133-941a-47dc-8b03-0f94c6852ad1" ], "detail": { "spot-instance-request-id": "sir-a2w9gc5h", "description": "SpotInstanceRequestId sir-a2w9gc5h, PreviousState: cancelled_running", "sub-type": "cancelled" } }

sub-type 的可能值為:

active

Spot 執行個體請求已履行,並具有關聯的 Spot 執行個體。

cancelled

您已取消 Spot 執行個體請求,或 Spot 執行個體請求已過期。

disabled

您已停用 Spot 執行個體。

submitted

已提交 Spot 執行個體請求。

EC2競價型叢集實例變更

當叢集中的執行EC2 Spot Fleet Instance Change個體狀態變更 EventBridge 時,Spot 叢集會傳送事件至 Amazon。

以下是此事件的範例資料。

{ "version": "0", "id": "11591686-5bd7-bbaa-eb40-d46529c2710f", "detail-type": "EC2 Spot Fleet Instance Change", "source": "aws.ec2spotfleet", "account": "123456789012", "time": "2020-11-09T07:25:02Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-c8a764a4-bedc-4b62-af9c-0095e6e3ba61" ], "detail": { "instance-id": "i-08b90df1e09c30c9b", "description": "{\"instanceType\":\"r4.2xlarge\",\"image\":\"ami-032930428bf1abbff\",\"productDescription\":\"Linux/UNIX\",\"availabilityZone\":\"us-east-1a\"}", "sub-type": "launched" } }

sub-type 的可能值為:

launched

已啟動新執行個體。

terminated

已終止執行個體。

termination_notified

Amazon EC2 在縮減期間終止 Spot 執行個體時,會傳送執行個體終止通知,例如,從 4 的目標容量變為 3 的目標容量。

EC2現貨車隊資訊

在履行期間發生錯誤 EventBridge時,競價型叢集會傳送EC2 Spot Fleet Information事件至 Amazon。此資訊事件不會封鎖機群嘗試履行其目標容量。

以下是此事件的範例資料。

{ "version": "0", "id": "73a60f70-3409-a66c-635c-7f66c5f5b669", "detail-type": "EC2 Spot Fleet Information", "source": "aws.ec2spotfleet", "account": "123456789012", "time": "2020-11-08T20:56:12Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-2531ea06-af18-4647-8757-7d69c94971b1" ], "detail": { "description": "r3.8xlarge, ami-032930428bf1abbff, Linux/UNIX, us-east-1a, Spot bid price is less than Spot market price $0.5291", "sub-type": "launchSpecUnusable" } }

sub-type 的可能值為:

fleetProgressHalted

每個啟動規格中的價格無效,因為價格低於 Spot 價格 (所有啟動規格都已產生 launchSpecUnusable 事件)。如果 Spot 價格變動,啟動規格則可能會變成有效。

launchSpecTemporarilyBlacklisted

組態無效,且多次嘗試啟動執行個體失敗。如需詳細資訊,請參閱事件的描述。

launchSpecUnusable

啟動規格中的價格無效,因為價格低於 Spot 價格。

registerWithLoadBalancersFailed

嘗試在負載平衡器失敗時註冊執行個體。如需詳細資訊,請參閱事件的描述。

EC2發現艦隊錯誤

在履行期間發生錯誤 EventBridge 時,競價型叢集會傳送EC2 Spot Fleet Error事件至 Amazon。錯誤事件會阻止機群嘗試履行其目標容量。

以下是此事件的範例資料。

{ "version": "0", "id": "10adc4e7-675c-643e-125c-5bfa1b1ba5d2", "detail-type": "EC2 Spot Fleet Error", "source": "aws.ec2spotfleet", "account": "123456789012", "time": "2020-11-09T06:56:07Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:spot-fleet-request/sfr-38725d30-25f1-4f30-83ce-2907c56dba17" ], "detail": { "description": "r4.2xlarge, ami-032930428bf1abbff, Linux/UNIX: The associatePublicIPAddress parameter can only be specified for the network interface with DeviceIndex 0. ", "sub-type": "spotFleetRequestConfigurationInvalid" } }

sub-type 的可能值為:

iamFleetRoleInvalid

Spot Fleet 沒有啟動或終止執行個體所需的許可。

allLaunchSpecsTemporarilyBlacklisted

沒有任何組態是有效的,且多次嘗試啟動執行個體失敗。如需詳細資訊,請參閱事件的描述。

spotInstanceCountLimitExceeded

您已達到可啟動 Spot 執行個體的數目上限。

spotFleetRequestConfigurationInvalid

組態無效。如需詳細資訊,請參閱事件的描述。