全部產品
Search
文件中心

CloudOps Orchestration Service:事件觸發程序ACS::EventTrigger

更新時間:Jun 30, 2024

用途

用於事件驅動的自動化情境。當包含事件觸發程序的模版建立執行後,該執行初始為等待中狀態。當事件觸發程序監控的事件發生,執行狀態切換為運行中,並立即開始執行模版中定義的後續任務。如收到搶佔式執行個體中斷事件通知時,將該執行個體從負載平衡的後端伺服器列表中移除。

CloudOps Orchestration Service可監控的事件包括雲產品狀態通知、營運事件以及業務異常等,並提供按雲產品名稱、事件名稱、事件層級、事件詳情等屬性進行篩選,幫您做到精準監控和及時響應。

限制

觸發器有如下限制:

  • 一個模版只允許有一個觸發器動作。

  • 觸發器動作的任務必須定義在模版Tasks中的第一個任務。

  • 被嵌套的模版(子模版)中不允許有觸發器動作。

文法

Tasks:
  - Name: taskName # 任務名稱
    Action: 'ACS::EventTrigger'
    Properties:
      Product: productName1 # 雲產品名稱。類型:String,如ECS。
      Name:          # 事件名稱。類型:List,如 ["Instance:StateChange"]。
        - eventName1
      Level:        # 事件層級。類型:List,如["INFO"]。
        - eventLevel1
      Content:  #  事件詳情。類型:Map,如{ "state":["Stopped"] }。
        contenAttrKey1: # 事件詳情的待篩選屬性名稱
          - value1 # 事件詳情的待篩選屬性值
    Outputs: # 該任務輸出,選填。
      outputParameterName1: # 參數名,有效字元為[a-zA-Z0-9_-],即英文半形字母數字底線中劃線,長度限制200個字元。
        ValueSelector: "jq selector" # 以JSON格式的事件通知體作為輸入,應用jq從該JSON中截取所需要的值,如.content.resourceId。
        Type: type1 # 可選,YAML, JSON格式支援的基本類型String, Number, Boolean, List(Array),Object,預設String。
{
    "Tasks": [
        {
            "Name": "taskName",
            "Action": "ACS::EventTrigger",
            "Properties": {
                "Product": "productName1",
                "Name": [
                    "eventName1"
                ],
                "Level": [
                    "eventLevel1"
                ],
                "Content": {
                    "contenAttrKey1": [
                        "value1"
                    ]
                }
            },
            "Outputs": {
                "outputParameterName1": {
                    "ValueSelector": "jq selector",
                    "Type": "type1"
                }
            }
        }
    ]
}

事件通知格式

便於您配置待監控事件的篩選規則或篩選結果的輸出,您需先瞭解待監控事件的通知格式,該格式為JSON格式,外層為公用屬性,content部分為事件詳情,樣式如下。此處提到的格式與CloudMonitor的事件通知格式一致,瞭解不同事件通知的格式可參見雲產品事件

樣式:

{
    "product": "ECS",
    "resourceId": "acs:ecs:cn-shanghai:1612345678890:instance/i-abcdef",
    "level": "WARN",
    "instanceName": "instanceName",
    "regionId": "cn-hangzhou",
    "name": "Instance:PreemptibleInstanceInterruption",
    "content": {
        "instanceId": "i-abcdef",
        "action": "delete"
    }
}

事件篩選

  • 篩選規則:

    • 若且唯若事件包含所有待篩選屬性名稱以及待篩選屬性名稱的嵌套結構與事件一致時方可進行匹配。

    • 當進行篩選值匹配時大小寫敏感。

    • 當待篩選屬性名稱的篩選值為數組時,該數組需至少包含一個元素,如果數組中的任一元素與事件中屬性對應的值匹配,則該屬性匹配。

    • 如果事件中的屬性所對應值也為一個數組,則當待篩選屬性名稱的篩選值數組與事件中屬性所對應值數組的交集不為空白時,則該屬性匹配。

    • 當存在的所有待篩選屬性名稱的篩選值與事件的屬性所對應值匹配時,則事件觸發。

  • 可定義的待篩選屬性名稱:

    • Product(雲產品名稱。取值可參考本章的事件通知格式小節;也可通過調用CloudMonitorDescribeSystemEventMetaList介面查詢。)

    • Name(事件名稱。取值可參考本章的事件通知格式小節;也可通過調用CloudMonitorDescribeSystemEventMetaList介面查詢。)

    • Level(事件層級。取值可選CRITICAL(嚴重),WARN(警告),INFO(資訊),"*"(表示所有等級)。)

    • Content(事件詳情。其待篩選屬性名稱定義及取值可參考本章的事件通知格式小節。)

事件結果Outputs

通過定義任務的Outputs來輸出匹配事件中的資訊,可供後續任務使用。Outputs中ValueSelector篩選定義方式與普通任務一致,作用到的被篩選對象是JSON格式的事件通知體,可參考本章的事件通知格式小節。

樣本

ECS執行個體一旦被關閉,立刻啟動。

---
FormatVersion: OOS-2019-06-01
Description: Start ECS instance when instance is stopped.
Parameters:
  OOSAssumeRole:
    Description: The RAM role to be assumed by OOS.
    Type: String
    Default: OOSServiceRole
RamRole: '{{OOSAssumeRole}}'
Tasks:
  - Name: whenInstanceStopped
    Action: 'ACS::EventTrigger'
    Properties:
      Product: ECS
      Name:
        - 'Instance:StateChange'
      Level:
        - INFO
      Content:
        state:
          - Stopped
    Outputs:
      InstanceId:
        ValueSelector: .content.resourceId
        Type: String
  - Name: startInstance
    Action: 'ACS::ExecuteAPI'
    Properties:
      Service: ECS
      API: StartInstance
      Parameters:
        InstanceId: '{{ whenInstanceStopped.InstanceId }}'
    Description: start instance.
Outputs:
  InstanceId:
    Value: '{{ whenInstanceStopped.InstanceId }}'
    Type: String
{
  "FormatVersion": "OOS-2019-06-01",
  "Description": "Start ECS instance when instance is stopped.",
  "Parameters": {
    "OOSAssumeRole": {
      "Description": "The RAM role to be assumed by OOS.",
      "Type": "String",
      "Default": "OOSServiceRole"
    }
  },
  "RamRole": "{{OOSAssumeRole}}",
  "Tasks": [
    {
      "Name": "whenInstanceStopped",
      "Action": "ACS::EventTrigger",
      "Properties": {
        "Product": "ECS",
        "Name": [
          "Instance:StateChange"
        ],
        "Level": [
          "INFO"
        ],
        "Content": {
          "state": [
            "Stopped"
          ]
        }
      },
      "Outputs": {
        "InstanceId": {
          "ValueSelector": ".content.resourceId",
          "Type": "String"
        }
      }
    },
    {
      "Name": "startInstance",
      "Action": "ACS::ExecuteAPI",
      "Properties": {
        "Service": "ECS",
        "API": "StartInstance",
        "Parameters": {
          "InstanceId": "{{ whenInstanceStopped.InstanceId }}"
        }
      },
      "Description": "start instance."
    }
  ],
  "Outputs": {
    "InstanceId": {
      "Value": "{{ whenInstanceStopped.InstanceId }}",
      "Type": "String"
    }
  }
}