全部產品
Search
文件中心

Elastic Compute Service:通過EventBridge快速訂閱ECS事件

更新時間:Feb 28, 2024

本文介紹如何通過EventBridge主動訂閱ECS事件,將其投遞至指定下遊服務。

背景資訊

EventBridge作為阿里雲上的事件中樞,提供統一的事件中心,以標準化的CloudEvents 1.0協議串連雲產品和應用、應用和應用,協助雲產品、SaaS產品以及您管理業務領域內產生的事件。EventBridge致力於保障上遊雲產品事件的品質,同時提供更好的事件訂閱體驗,提高資料訂閱投遞的可靠性,SLA資料可靠性99.99999999%,服務可用性99.95%。

相比調用ECS的API介面DescribeInstanceHistoryEvents以定時輪詢方式查詢ECS服務是否有新的事件產生,EventBridge通過主動訂閱的方式,有以下幾個優點:

  • 時效性更高:一旦訂閱監聽到指定的ECS事件產生,能夠在毫秒級觸發指定操作。

  • 成本更低:不需要定時輪詢檢查事件是否產生,避免不必要的開銷。

訂閱ECS.png

適用情境

  • 訂閱指定的ECS事件,觸發DingTalk、簡訊、郵箱通知等。

  • 將指定的ECS事件,通過公網或者VPC網路推送到下遊HTTP/HTTPS服務。

  • 匯總多個雲帳號下的ECS事件。

  • 指定的ECS事件發生時,通過Function Compute觸發特定動作。

  • 當ECS事件時延較高、事件量較大時,將其投遞至MNS來訂閱事件。

前提條件

步驟一:選用雲端服務專用事件匯流排

雲端服務專用事件匯流排即default匯流排,是EventBridge預設建立的匯流排,阿里雲上各個雲產品會即時將產品內產生的事件,通過多種渠道即時投遞到default匯流排,您可以在default匯流排上尋找和訂閱各個雲產品的事件。

  1. 登入事件匯流排EventBridge控制台,在左側導覽列,單擊事件匯流排
  2. 在頂部功能表列,選擇地區。
  3. 事件匯流排頁面,單擊default

步驟二:建立ECS事件訂閱規則

  1. 事件匯流排頁面,單擊左側導覽列的事件規則,然後單擊建立規則

  2. 建立規則面板,完成以下操作。

    1. 配置基本資料頁簽,在名稱文字框輸入規則名稱,在描述文字框輸入規則的描述,然後單擊下一步

    2. 配置事件模式頁簽,完成以下配置,然後單擊下一步

      • 單擊頁簽。

      • 事件來源下拉式清單選擇acs.ecs

      • 事件類型下拉式清單選擇需要訂閱的事件類型。可同時選擇訂閱多個事件類型。

      • 事件模式調試中,可查看訂閱的事件類型的樣本。例如,事件類型選擇ecs.Instance.StateChange 執行個體生命週期狀態變化時,對應的樣本如下。

        {
          "id": "45ef4dewdwe1-7c35-447a-bd93-fab****",
          "source": "acs.ecs",
          "specversion": "1.0",
          "subject": "acs.ecs:cn-hangzhou:123456789098****:215672",
          "time": "2020-11-19T21:04:41Z",
          "type": "ecs:Instance:StateChange",
          "aliyunaccountid": "123456789098****",
          "aliyunpublishtime": "2020-11-19T21:04:42Z",
          "aliyuneventbusname": "default",
          "aliyunregionid": "cn-hangzhou",
          "aliyunpublishaddr": "172.25.XX.XX",
          "data": {
            "instanceName": "iZ0jl0kyquo46h****",
            "instanceType": "ecs.c6.large",
            "privateIpAddress": "172.21.XX.XX",
            "publicIpAddress": "8.37.XX.XX",
            "resourceId": "i-0jl0kyquo46****",
            "resourceType": "ALIYUN::ECS::Instance",
            "spotStrategy": "SpotWithPriceLimit",
            "state": "Running"
          }
        }
    3. 配置事件目標頁簽,選擇不同的服務類型,設定推送情境。

      情境一:推送至MNS

      使用MNS來訂閱事件適用於對事件時延要求較高、事件量較大的情境。MNS費用詳情請參見價格說明

      • :選擇Message ServiceMNS

      • :選擇已建立的隊列。

      • :選擇完整事件。

      • :選擇。開啟Base 64 編碼,會協助您將資料編碼後投遞至目標Message ServiceMNS中的隊列。

      服務類型為MNS時,可通過NetworkInterfaceDemo.zip監聽MNS訊息擷取事件。

      情境二:推送至DingTalk

      • :選擇DingTalk

      • :輸入DingTalk機器人的Webhook地址。

      • :輸入DingTalk機器人密鑰。

      • :您可以通過EventBridge的模板能力,將上面事件中的參數推送給DingTalk機器人,例如,推送ECS執行個體的名稱(instanceName)和運行狀態(state),配置如下:

        • :通過JsonPath指定需要擷取的事件中的欄位資訊,並設定變數名稱。

          {
            "instanceName":"$.data.instanceName",
            "state":"$.data.state"
          }
        • :按照DingTalk機器人需要的格式定義模板,並在模板中引入上面定義的變數。

          {
            "msgtype": "text",
            "text": {
                "content": "${instanceName} state is ${state}" 
            } 
          }

      情境三:推送至下遊HTTP服務

      • :選擇HTTP或者HTTPS

      • :配置接收事件的URL地址。

      • :配置接收事件的內容格式。EventBridge支援將事件轉換後,按需要的格式推送給HTTP目標端,目前支援四種轉換格式:完整事件、部分事件、固定值、模板。更多資訊,請參見事件內容轉換

        • :通過公網訪問目標URL地址。

        • :如果目標URL的地址未暴露公網,可以選擇專用網路,需設定VPC ID、VSwitch ID和安全性群組ID。

      情境四:推送後觸發動作

      如果希望指定ECS事件發生時,觸發某個更加個人化的動作,可以將服務類型設定為Function Compute。把事件推送到指定的函數,在Function Compute裡通過代碼編輯個人化的操作。

      • :選擇Function Compute

      • Function Compute裡建立的服務名稱。

      • Function Compute裡建立的函數名稱。

      • :配置接收事件的內容格式。EventBridge支援將事件轉換後,按需要的格式推送給Function Compute。目前支援四種轉換格式:完整事件、部分事件、固定值、模版。詳細資料,請參見事件內容轉換

        • 同步:Function Compute接收到事件,並且函數成功處理完事件後則響應成功。

        • 非同步:Function Compute成功接收到事件後,則認為響應成功。

        更多資訊,請參見路由到Function Compute

      情境五:匯總多個雲帳號下的ECS事件

      EventBridge支援將不同帳號、不同地區下的ECS事件匯總到同一個地區的同一個帳號下的事件匯流排,需要選擇服務類型為EventBridge事件匯流排

        • :投遞給當前帳號的其他匯流排。

        • :投遞給其他帳號的匯流排。如需選擇跨帳號投遞,需要進行帳號授權,詳細資料,請參見路由到事件匯流排EventBridge

      • :支援中國內地跨地區投遞和國外地區之間相互投遞。

      • :要投遞的目標匯流排名稱。

      • :預設投遞完整事件且不可更改。

      配置事件目標頁簽下方,您可以根據業務需要配置重試和死信策略。詳情請參見重試和死信

      更多情境,請參見目標服務類型

步驟三:觸發事件

本文以ecs.Instance.StateChange 執行個體生命週期狀態變化事件類型為例,觸發事件需要修改ECS執行個體的運行狀態。

  1. 登入ECS管理主控台

  2. 在左側導覽列,選擇執行個體與鏡像 > 執行個體

  3. 在頂部功能表列,選擇目標資源所在的地區。

  4. 在目標ECS執行個體右側操作列,選擇image.png > 執行個體狀態,修改執行個體的運行狀態。

步驟四:查看投遞結果

  1. 查詢ECS是否產生事件。

    EventBridge支援根據時間範圍、事件類型、訂閱規則名稱、事件ID(與ECS事件ID一致)來查詢搜尋產生的ECS事件。操作步驟,請參見查詢事件

  2. 查詢ECS事件的訂閱投遞結果。

    通過上一步查詢到的事件ID,可以單擊事件ID右側操作列的事件軌跡查看事件推送軌跡,軌跡包含推送的目標、狀態、次數、時間。image.png

事件的監控警示

您可以在的EventBridge監控大盤中看到建立的ECS事件訂閱任務的調用次數,推送成功率、推送延遲等。根據具體業務情境訴求配置警示策略。

  1. 登入CloudMonitor控制台

  2. 在左側導覽列,單擊雲產品監控

  3. 雲產品監控頁面,選擇其它 > 事件匯流排-EventBus

  4. 在頁面上方選擇地區,單擊default匯流排右側操作列的監控圖表image.png

您可以在監控頁面為EventBridge的資源設定警示規則。當資源符合警示規則時,CloudMonitor自動發送警示通知。操作步驟,請參見設定警示規則

重試和死信

事件寫入EventBus之後,EventBridge保障事件能被推送到下遊至少一次。當下遊事件接收端出現異常(如宕機、服務不可用、網路抖動等),導致接收端無法正常接收事件時,EventBridge支援多種方式處理這些異常,包括:重試策略、容錯策略、無效信件佇列。您可以在步驟二:建立ECS事件訂閱規則中,配置重試和死信策略,保障事件會被正確投遞。

  • 重試策略

    當下遊接收端無法正常接收事件時,EventBridge推送給下遊會發生異常,這種情況,您可以配置EventBridge重試推送下遊接收端的策略,最大程度保障推送成功。

    • 退避重試(重試3次,每次重試的時間間隔是10秒到20秒之間的隨機值。)

    • 指數衰減重試(重試176次,每次重試的間隔時間指數遞增至512秒,總計重試時間為1天。每次重試的具體間隔為:1,2,4,8,...512秒。)

  • 死信處理策略

    當達到預設的重試策略的重試次數上限之後,如果事件依舊未成功投遞,EventBridge預設會丟棄該事件。如果您希望保留該事件,可以配置將這些事件發送到無效信件佇列。目前EventBridge支援的無效信件佇列包括:ApsaraMQ for RocketMQMessage ServiceApsaraMQ for KafkaEventBridge

  • 容錯策略

    如果您有事件順序情境的訴求,當發生異常時,需要暫停任務,直到該事件成功推送,否則會出現事件亂序,此時需要選擇禁止容錯。如果是非順序情境,建議優先選擇允許容錯,以提供最大並發推送能力。

    • 允許容錯(允許異常容錯,當異常發生時不會阻塞執行,超過重試策略後會根據配置將訊息投遞至無效信件佇列或直接丟棄。)

    • 禁止容錯(不允許容錯,當異常發生並超過重試策略配置時會阻塞執行)。