テンプレート名
ACS-ECS-AlarmDiscountOrPriceInScalingGroupExistingInstanceTypes
テンプレートの説明
指定されたスケーリンググループのプリエンプティブルインスタンスの価格または割引を監視し、価格または割引が指定されたしきい値を超えた場合にアラート通知を送信します。
テンプレートタイプ
自動化
所有者
Alibaba Cloud
入力パラメーター
パラメーター | 説明 | タイプ | 必須 | デフォルト値 | 制限 |
scalingGroupId | スケーリンググループの ID です。 | リスト | はい | ||
threshold | 価格または割引のしきい値です。 | 数値 | はい | ||
webhook | アラート通知を受信するための DingTalk チャットボットの Webhook URL です。 | 文字列 | はい | ||
region | リージョン ID です。 | 文字列 | いいえ | {{ ACS::RegionId }} | |
taskType | 監視タスクのタイプです。 | 文字列 | いいえ | 割引 | |
rateControl | レート制御設定です。 | JSON | いいえ | {'Mode': 'Concurrency', 'MaxErrors': 100, 'Concurrency': 10} | |
OOSAssumeRole | CloudOps Orchestration Service (OOS) によって引き受けられる Resource Access Management (RAM) ロールです。 | 文字列 | いいえ | OOSServiceRole |
出力パラメーター
パラメーター | 説明 | タイプ |
allThresholdInfo | リスト |
テンプレートを実行するために必要な権限ポリシー
{
"Version": "1",
"Statement": [
{
"Action": [
"ess:DescribeScalingGroups",
"ess:DescribeScalingInstances"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ecs:DescribeInstances",
"ecs:DescribeSpotPriceHistory"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
参照
詳細については、GitHub の ACS-ECS-AlarmDiscountOrPriceInScalingGroupExistingInstanceTypes.yml をご参照ください。
テンプレートコンテンツ
FormatVersion: OOS-2019-06-01
Description:
en: 'Monitor the discounts and prices of spot instances that currently exist in the scaling group, and send out alarm notifications if they exceed'
zh-cn: the description in Chinese
name-en: ACS-ECS-AlarmDiscountOrPriceInScalingGroupExistingInstanceTypes
name-zh-cn: the description in Chinese
Parameters:
region:
Type: String
Label:
en: RegionId
zh-cn: the description in Chinese
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
scalingGroupId:
Description:
en: ScalingGroupId
zh-cn: the description in Chinese
Label:
en: scalingGroupId
zh-cn: the description in Chinese
Type: List
taskType:
Description:
en: 'The monitoring threshold task type (Discount: Monitor discount, Price: monitor price).'
zh-cn: the description in Chinese '
Label:
en: TaskType
zh-cn: the description in Chinese
Type: String
Default: Discount
AllowedValues:
- Discount
- Price
threshold:
Description:
en: 'The discount/price threshold(example:10 is 1% off,50 is 50% off,Or directly enter the price threshold).'
zh-cn: the description in Chinese
Label:
en: Threshold
zh-cn: the description in Chinese
Type: Number
webhook:
Description:
en: 'example:https://oapi.dingtalk.com/robot/send?access_token=bac51db2e39418ec6c2dbb27fd111bc7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.'
zh-cn: the description in Chinese '
Label:
en: Webhook
zh-cn: the description in Chinese
Type: String
rateControl:
Label:
en: RateControl
zh-cn: the description in Chinese
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 100
Concurrency: 10
OOSAssumeRole:
Label:
en: OOSAssumeRole
zh-cn: the description in Chinese
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: describeScalingGroups
Action: 'ACS::ExecuteAPI'
Description:
en: Describe the scaling groups
zh-cn: the description in Chinese
Properties:
Service: ESS
API: DescribeScalingGroups
Parameters:
RegionId: '{{ region }}'
ScalingGroupId1: '{{ ACS::TaskLoopItem }}'
Outputs:
scalingGroupInfo:
Type: String
ValueSelector: '.ScalingGroups.ScalingGroup[].ScalingGroupId'
Loop:
Items: '{{ scalingGroupId }}'
RateControl: '{{ rateControl }}'
Outputs:
scalingGroupInfos:
AggregateType: 'Fn::ListJoin'
AggregateField: scalingGroupInfo
- Name: wetherOutPutPriceInfo
Action: 'ACS::Choice'
Description:
en: Check if the scaling group exists
zh-cn: the description in Chinese
Properties:
DefaultTask: scalingGroupMonitorInfos
Choices:
- When:
'Fn::Equals':
- []
- 'Fn::MergeList': '{{ describeScalingGroups.scalingGroupInfos }}'
NextTask: 'ACS::END'
- Name: scalingGroupMonitorInfos
Action: 'ACS::ECS::AlarmSpotPriceOrDiscountBySingleScalingGroup'
Description:
en: Monitor the discount or price of the instance type popped up under the scaling group
zh-cn: the description in Chinese
Properties:
regionId: '{{region}}'
threshold: '{{ threshold }}'
taskType: '{{ taskType }}'
scalingGroupId: '{{ ACS::TaskLoopItem }}'
Outputs:
monitorInfo:
Type: String
ValueSelector: singleMonitorInfo
Loop:
Items: '{{ scalingGroupId }}'
RateControl: '{{ rateControl }}'
Outputs:
allMonitorInfo:
AggregateField: monitorInfo
AggregateType: 'Fn::ListJoin'
- Name: wetherNodifyWebhook
Action: 'ACS::Choice'
Description:
en: Detect if an alarm notification is required
zh-cn: the description in Chinese
Properties:
DefaultTask: alarmNotify
Choices:
- When:
'Fn::Equals':
- []
- 'Fn::MergeList':
- '{{ scalingGroupMonitorInfos.allMonitorInfo }}'
NextTask: 'ACS::END'
- Name: alarmNotify
Action: 'ACS::Notify'
Description:
en: Instance discount / spot price exceeds threshold alarm notification
zh-cn: the description in Chinese
Properties:
NotifyType: WebHook
WebHook:
URI: '{{ webhook }}'
Headers:
Content-Type: application/json
Content:
msgtype: markdown
markdown:
title: Monitoring results
text:
'Fn::Join':
- ''
- 'Fn::ListJoin':
- |
### The alert threshold: {{ threshold }}
- 'Fn::Jq':
- First
- . | join("\n\n")
- 'Fn::MergeList':
- '{{ scalingGroupMonitorInfos.allMonitorInfo }}'
Outputs:
allThresholdInfo:
Type: List
Value:
'Fn::Join':
- ''
- 'Fn::ListJoin':
- |
### The alert threshold: {{ threshold }}
- 'Fn::Jq':
- First
- . | join("\n\n")
- 'Fn::MergeList':
- '{{ scalingGroupMonitorInfos.allMonitorInfo }}'
Metadata:
ALIYUN::OOS::Interface:
ParameterGroups:
- Parameters:
- region
- scalingGroupId
- taskType
- threshold
- webhook
Label:
default:
zh-cn: the description in Chinese
en: Configure Parameters
- Parameters:
- rateControl
- OOSAssumeRole
Label:
default:
zh-cn: the description in Chinese
en: Control Options