事件触发器ACS::EventTrigger

用途

用于事件驱动的自动化场景。当包含事件触发器的模版创建执行后,该执行初始为等待中状态。当事件触发器监控的事件发生,执行状态切换为运行中,并立即开始执行模版中定义的后续任务。如收到抢占式实例中断事件通知时,将该实例从负载均衡的后端服务器列表中移除。

系统运维管理可监控的事件包括云产品状态通知、运维事件以及业务异常等,并提供按云产品名称、事件名称、事件级别、事件详情等属性进行筛选,帮您做到精准监控和及时响应。

限制

触发器有如下限制:

  • 一个模版只允许有一个触发器动作。

  • 触发器动作的任务必须定义在模版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部分为事件详情,样式如下。此处提到的格式与云监控的事件通知格式一致,了解不同事件通知的格式可参见云产品事件

样式:

{
    "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(云产品名称。取值可参考本章的事件通知格式小节;也可通过调用云监控DescribeSystemEventMetaList接口查询。)

    • Name(事件名称。取值可参考本章的事件通知格式小节;也可通过调用云监控DescribeSystemEventMetaList接口查询。)

    • 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"
    }
  }
}