説明
ACS::EventTrigger アクションを使用すると、イベント駆動型の O&M 操作を自動的に実行できます。ACS::EventTrigger アクションを含むテンプレートを作成して実行すると、実行は待機状態になります。イベントトリガーが監視対象イベントの発生を検出すると、実行は実行中状態になり、テンプレートで定義されている後続のタスクがすぐに実行されます。たとえば、Operation Orchestration Service (OOS) が プリエンプティブルインスタンスの中断イベント の通知を受信した場合、OOS は中断されたプリエンプティブルインスタンスを Server Load Balancer (SLB) のバックエンドサーバーから削除します。
OOS は、クラウドサービスのステータス、O&M イベント、およびビジネス例外を監視できます。クラウドサービス名、イベント名、イベントレベル、イベントの詳細などの属性でイベントをフィルタリングして、正確な監視とタイムリーな対応を実現できます。
制限
ACS::AlarmTrigger アクションには、次の制限があります。
テンプレートでは、ACS::AlarmTrigger アクションを 1 つだけ使用できます。
ACS::AlarmTrigger アクションが存在するタスクは、テンプレートの Tasks パラメーターの最初のタスクとして定義する必要があります。
子テンプレートでは、ACS::AlarmTrigger アクションを使用できません。
構文
Tasks:
- Name: taskName # タスクの名前。
Action: 'ACS::EventTrigger'
Properties:
Product: productName1 # クラウドサービスの名前 (例: ECS)。タイプ: 文字列。
Name: # イベントの名前 (例: ["Instance:StateChange"])。タイプ: リスト。
- eventName1
Level: # イベントのレベル (例: ["INFO"])。タイプ: リスト。
- eventLevel1
Content: # イベントの詳細 (例: { "state":["Stopped"] })。タイプ: マップ。
contenAttrKey1: # イベントの詳細をフィルタリングするために使用される属性の名前。
- value1 # イベントの詳細をフィルタリングするために使用される属性の値。
Outputs: # オプション。タスクの出力。
outputParameterName1: # 出力パラメーターの名前。名前には、文字、数字、アンダースコア (_)、およびハイフン (-) を使用できます。最大 200 文字まで使用できます。
ValueSelector: "jq selector" # 返すデータを選択するための jQuery セレクター (例: .content.resourceId)。jQuery セレクターは、JSON 形式のイベント通知から情報を抽出します。
Type: type1 # オプション。出力パラメーターのタイプ。有効な値には、YAML または JSON 形式でサポートされている基本的なパラメータータイプ (文字列、数値、ブール値、リストまたは配列、オブジェクトなど) が含まれます。デフォルト値: 文字列。{
"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: クラウドサービスの名前。値の詳細については、このトピックの[イベント通知形式] セクションを参照してください。DescribeSystemEventMetaList 操作を呼び出して値をクエリすることもできます。
Name: イベントの名前。値の詳細については、このトピックの[イベント通知形式] セクションを参照してください。DescribeSystemEventMetaList 操作を呼び出して値をクエリすることもできます。
Level: イベントのレベル。有効な値: CRITICAL、WARN、INFO、および *。* の値は、すべてのレベルのイベントを指定します。
Content: イベントの詳細。フィルタリング条件属性の定義と値の詳細については、このトピックの[イベント通知形式] セクションを参照してください。
イベント出力
Tasks.Outputs 属性を定義して、イベントの出力情報を決定できます。出力情報は後続のタスクで使用できます。Outputs.ValueSelector 属性は、通常のタスクの場合と同じです。JSON 形式のイベント通知から情報を抽出するために使用されます。詳細については、このトピックの[イベント通知形式] セクションを参照してください。
例
次のサンプルコードは、Elastic Compute Service (ECS) インスタンスが停止した直後に起動する方法の例を示しています。
---
FormatVersion: OOS-2019-06-01
Description: インスタンスが停止したときに ECS インスタンスを起動します。
Parameters:
OOSAssumeRole:
Description: OOS によって引き受けられる RAM ロール。
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: インスタンスを起動します。
Outputs:
InstanceId:
Value: '{{ whenInstanceStopped.InstanceId }}'
Type: String{
"FormatVersion": "OOS-2019-06-01",
"Description": "インスタンスが停止したときに ECS インスタンスを起動します。",
"Parameters": {
"OOSAssumeRole": {
"Description": "OOS によって引き受けられる RAM ロール。",
"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": "インスタンスを起動します。"
}
],
"Outputs": {
"InstanceId": {
"Value": "{{ whenInstanceStopped.InstanceId }}",
"Type": "String"
}
}
}