概要
ACS::EventTrigger 操作を使用すると、イベント駆動型の運用管理 (O&M) 操作を自動的に実行できます。ACS::EventTrigger 操作を含むテンプレートを作成して実行すると、実行ステータスは「Waiting」状態になります。イベントトリガーが監視対象のイベントを検出した時点で、実行ステータスは「Running」状態に移行し、テンプレートで定義された後続のタスクが即座に実行されます。たとえば、Operation Orchestration Service (OOS) がプリエンプティブルインスタンス中断イベントの通知を受信した場合、OOS は中断されたプリエンプティブルインスタンスを Server Load Balancer (SLB) のバックエンドサーバーから削除します。
Operation Orchestration Service (OOS) は、クラウドサービスステータス通知、運用イベント、ビジネス例外などのイベントをモニタリングします。正確なモニタリングと迅速な対応のために、CloudOps Orchestration Service 名、イベント名、イベントレベル、イベントの詳細などのプロパティでイベントをフィルターできます。
制限事項
ACS::AlarmTrigger 操作には以下の制限があります。
テンプレート内で使用できる ACS::AlarmTrigger 操作は 1 つのみです。
ACS::AlarmTrigger 操作を含むタスクは、テンプレートの Tasks パラメーター内で最初のタスクとして定義する必要があります。
子テンプレート内では ACS::AlarmTrigger 操作を使用できません。
構文
Tasks:
- Name: taskName # タスク名。
Action: 'ACS::EventTrigger'
Properties:
Product: productName1 # クラウドサービス名(例:ECS)。タイプ:String。
Name: # イベント名(例:["Instance:StateChange"])。タイプ:List。
- eventName1
Level: # イベントレベル(例:["INFO"])。タイプ:List。
- eventLevel1
Content: # イベントの詳細(例:{ "state":["Stopped"] })。タイプ:Map。
contenAttrKey1: # イベント詳細をフィルターするための属性名。
- value1 # イベント詳細をフィルターするための属性値。
Outputs: # 任意。タスクの出力。
outputParameterName1: # 出力パラメーター名。英数字、アンダースコア (_)、ハイフン (-) を使用でき、最大 200 文字まで。
ValueSelector: "jq selector" # 返却するデータを選択するための jQuery セレクター(例:.content.resourceId)。jQuery セレクターは JSON 形式のイベント通知から情報を抽出します。
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 のイベント通知フォーマットと同じです。各種イベント通知のフォーマットの詳細については、「Alibaba Cloud サービスイベント」をご参照ください。
例:
{
"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"
}
}イベントフィルタリング
フィルタールール
イベントがすべてのフィルター条件属性を含み、かつフィルター条件属性の埋め込み構造がイベント属性の構造と一致する場合にのみ、イベントがマッチします。
フィルター条件属性の値は大文字と小文字を区別します。
フィルター条件属性の値が配列の場合、その配列には少なくとも 1 つの要素を含む必要があります。配列内のいずれかの要素がイベント属性の値と一致すれば、そのフィルター条件属性はイベント属性にマッチします。
別のケースとして、フィルター条件属性とイベント属性の両方の値が配列である場合、フィルター条件属性の配列内のいずれかの要素がイベント属性の配列内のいずれかの要素と一致すれば、そのフィルター条件属性はイベント属性にマッチします。
すべてのフィルター条件属性の値がイベント属性の値と一致した場合に、イベントがトリガーされます。
フィルター条件として定義可能な属性
Product:クラウドサービス名。有効値については、イベント通知フォーマットセクションを参照するか、CloudMonitor の DescribeSystemEventMetaList API を呼び出してください。Name:イベント名。有効値については、イベント通知フォーマットセクションを参照するか、CloudMonitor の DescribeSystemEventMetaList API を呼び出してください。Level:イベントのレベル。有効値:CRITICAL、WARN、INFO、*。* を指定すると、すべてのレベルのイベントを意味します。
Content:イベントの詳細。フィルター可能な属性とその値については、イベント通知フォーマットセクションをご確認ください。
イベント出力
マッチしたイベントから後続のタスクへ情報を渡すには、タスクの Outputs を定義します。他のタスクと同様に、ValueSelector を使用して jq 式により JSON 形式のイベント通知からデータを抽出できます。通知の構造については、イベント通知フォーマットセクションをご参照ください。
使用例
以下のサンプルコードは、Elastic Compute Service (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"
}
}
}