模板名称
ACS-ECS-AlarmWhenDiscountOrSpotPriceExceedsThresholdByScalingGroup 监控伸缩组内的抢占式实例的价格与折扣超出阈值时报警
模板描述
监控伸缩组内的抢占式实例的折扣与价格,实际值超出阈值时发出报警通知
模板类型
自动化
所有者
Alibaba Cloud
输入参数
参数名称 | 描述 | 类型 | 是否必填 | 默认值 | 约束 |
scalingGroupId | 伸缩组ID | List | 是 | ||
threshold | 价格/折扣阈值 | Number | 是 | ||
webhook | 钉钉接收信息的地址 | String | 是 | ||
region | 地域ID | String | 否 | {{ ACS::RegionId }} | |
taskType | 监控任务类型 | String | 否 | Discount | |
rateControl | 任务执行的并发比率 | Json | 否 | {‘Mode’: ‘Concurrency’, ‘MaxErrors’: 100, ‘Concurrency’: 10} | |
OOSAssumeRole | OOS扮演的RAM角色 | String | 否 | OOSServiceRole |
输出参数
参数名称 | 描述 | 类型 |
allThresholdInfo | List |
执行此模板需要的权限策略
{
"Version": "1",
"Statement": [
{
"Action": [
"ess:DescribeScalingConfigurations",
"ess:DescribeScalingGroups"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ecs:DescribeSpotPriceHistory",
"ecs:DescribeVSwitches"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
详情
ACS-ECS-AlarmWhenDiscountOrSpotPriceExceedsThresholdByScalingGroup详情
模板内容
FormatVersion: OOS-2019-06-01
Description:
en: 'Monitor the discounts and prices of spot instances in the scaling group, and send out alarm notifications if they exceed'
zh-cn: 监控伸缩组内的抢占式实例的折扣与价格,实际值超出阈值时发出报警通知
name-en: ACS-ECS-AlarmWhenDiscountOrSpotPriceExceedsThresholdByScalingGroup
name-zh-cn: 监控伸缩组内的抢占式实例的价格与折扣超出阈值时报警
Parameters:
region:
Type: String
Label:
en: RegionId
zh-cn: 地域ID
Description:
en: The region id
zh-cn: 地域
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
scalingGroupId:
Description:
en: The scaling group id
zh-cn: 弹性伸缩组的ID
Label:
en: ScalingGroupId
zh-cn: 伸缩组ID
Type: List
taskType:
Description:
en: The monitoring threshold task type(Discount:Monitor discount, Price:monitor price)
zh-cn: 监控阈值任务类型(Discount:折扣监控, Price:价格监控)
Label:
en: TaskType
zh-cn: 监控任务类型
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: 价格/折扣阈值(例:10为1折,50为5折,或者直接输入价格的阈值)
Label:
en: Threshold
zh-cn: 价格/折扣阈值
Type: Number
webhook:
Label:
en: Webhook
zh-cn: 钉钉接收信息的地址
Description:
en: example:https://oapi.dingtalk.com/robot/send?access_token=bac51db2e39418ec6c2dbb27fd111bc7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
zh-cn: 例:https://oapi.dingtalk.com/robot/send?access_token=bac51db2e39418ec6c2dbb27fd111bc7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Type: String
rateControl:
Label:
en: RateControl
zh-cn: 任务执行的并发比率
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 100
Concurrency: 10
OOSAssumeRole:
Label:
en: OOSAssumeRole
zh-cn: OOS扮演的RAM角色
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: describeScalingGroups
Action: 'ACS::ExecuteAPI'
Description:
en: Describe the scaling groups
zh-cn: 查询弹性伸缩组
Properties:
Service: ESS
API: DescribeScalingGroups
Parameters:
RegionId: '{{ region }}'
ScalingGroupId1: '{{ ACS::TaskLoopItem }}'
Outputs:
scalingGroupInfo:
Type: Json
ValueSelector: '.ScalingGroups.ScalingGroup[] | {"scalingConfigurationId":.ActiveScalingConfigurationId, "scalingGroupId":.ScalingGroupId, "vSwitchIds": .VSwitchIds.VSwitchId}'
Loop:
Items: '{{ scalingGroupId }}'
RateControl: '{{ rateControl }}'
Outputs:
scalingGroupInfos:
AggregateType: 'Fn::ListJoin'
AggregateField: scalingGroupInfo
- Name: describeScalingConfigurations
Action: 'ACS::ExecuteAPI'
Description:
en: Describe the scaling configurations
zh-cn: 查询现有的伸缩配置
Properties:
Service: ESS
API: DescribeScalingConfigurations
Parameters:
RegionId: '{{ region }}'
ScalingConfigurationId1:
'Fn::Jq':
- First
- .scalingConfigurationId
- '{{ ACS::TaskLoopItem }}'
Outputs:
scalingConfigurationInfo:
Type: Json
ValueSelector: '.ScalingConfigurations.ScalingConfiguration[] | {"instanceTypes":.InstanceTypes.InstanceType, "scalingConfigurationId":.ScalingConfigurationId}'
Loop:
Items: '{{ describeScalingGroups.scalingGroupInfos }}'
RateControl: '{{ rateControl }}'
Outputs:
scalingConfigurationInfos:
AggregateType: 'Fn::ListJoin'
AggregateField: scalingConfigurationInfo
- Name: describeVSwitches
Action: 'ACS::ExecuteAPI'
Description:
en: Describe the scaling configurations
zh-cn: 查询现有的伸缩配置
Properties:
Service: ECS
API: DescribeVSwitches
Parameters:
RegionId: '{{ region }}'
VSwitchId: '{{ ACS::TaskLoopItem }}'
Outputs:
zoneInfo:
Type: Json
ValueSelector: '.VSwitches.VSwitch[] | {"vSwitchId":.VSwitchId, "zoneId":.ZoneId}'
Loop:
Items:
'Fn::MergeList':
'Fn::Jq':
- All
- '.[].vSwitchIds'
- '{{ describeScalingGroups.scalingGroupInfos }}'
RateControl: '{{ rateControl }}'
Outputs:
zoneInfos:
AggregateType: 'Fn::ListJoin'
AggregateField: zoneInfo
- Name: wetherOutPutPriceInfo
Action: 'ACS::Choice'
Description:
en: Detect if need to out price
zh-cn: 检测是否需要查询价格
Properties:
DefaultTask: instanceThresholdInfo
Choices:
- When:
'Fn::Equals':
- []
- 'Fn::MergeList': '{{ describeScalingGroups.scalingGroupInfos }}'
NextTask: 'ACS::END'
- Name: instanceThresholdInfo
Action: 'ACS::ECS::AlarmSpotPriceOrDiscountThresholdByScalingGroup'
Description:
en: Monitor discounts or spot prices under the scaling groups
zh-cn: 监控弹性伸缩组下的折扣或价格
Properties:
regionId: '{{region}}'
threshold: '{{ threshold }}'
taskType: '{{ taskType }}'
vSwitchId:
'Fn::Jq':
- First
- .vSwitchId
- '{{ ACS::TaskLoopItem }}'
scalingConfigurationId:
'Fn::Jq':
- First
- .scalingConfigurationId
- '{{ ACS::TaskLoopItem }}'
configurationInfos: '{{ describeScalingConfigurations.scalingConfigurationInfos }}'
scalingGroupId:
'Fn::Jq':
- First
- .scalingGroupId
- '{{ ACS::TaskLoopItem }}'
zoneIds: '{{ describeVSwitches.zoneInfos }}'
Outputs:
thresholdInfo:
Type: List
ValueSelector: instanceThresholdInfos
Loop:
Items:
'Fn::Jq':
- All
- '.[] | {scalingConfigurationId, scalingGroupId, "vSwitchId":.vSwitchIds[]}'
- 'Fn::MergeList':
'Fn::Jq':
- First
- '. | map(. as $item | [$item])'
- '{{ describeScalingGroups.scalingGroupInfos }}'
RateControl: '{{ rateControl }}'
Outputs:
thresholdInfos:
AggregateField: thresholdInfo
AggregateType: 'Fn::ListJoin'
- Name: wetherNodifyWebhook
Action: 'ACS::Choice'
Description:
en: Detect if an alarm notification is required
zh-cn: 检测是否需要发报警通知
Properties:
DefaultTask: alarmNotify
Choices:
- When:
'Fn::Equals':
- []
- 'Fn::MergeList':
'Fn::MergeList': '{{ instanceThresholdInfo.thresholdInfos }}'
NextTask: 'ACS::END'
- Name: alarmNotify
Action: 'ACS::Notify'
Description:
en: Instance discount / spot price exceeds threshold alarm notification
zh-cn: 实例的折扣/现价超出阈值报警通知
Properties:
NotifyType: WebHook
WebHook:
URI: '{{ webhook }}'
Headers:
Content-Type: application/json
Content:
msgtype: markdown
markdown:
title: 监控结果(MonitoringResult)
text:
'Fn::Join':
- ''
- 'Fn::ListJoin':
- |
### 报警阈值(alarm threshold):{{ threshold }}
- 'Fn::Jq':
- First
- '.[0] | split(", ") | join("") | split("||") | join("|") | split(",") | join("") | split("|###") | join("###")'
- 'Fn::Jq':
- All
- '.[] | map(.[] | tostring)| join(" |")'
- 'Fn::Jq':
- All
- 'map(. | .threshold=.threshold+" |\n\n,")'
- 'Fn::Jq':
- All
- '.[] | .scalingGroupId = "### 伸缩组ID(scaling group ID):"+.scalingGroupId+"\n| 机型(instance type) |  可用区(zone)|现价(current price)|折扣%(discount%)|\n|:----|----:|:----:|:----|\n,"'
- 'Fn::MergeList':
'Fn::MergeList': '{{ instanceThresholdInfo.thresholdInfos }}'
Outputs:
allThresholdInfo:
Type: List
Value:
'Fn::Join':
- ''
- 'Fn::ListJoin':
- |
### 报警阈值(alarm threshold):{{ threshold }}
- 'Fn::Jq':
- First
- '.[0] | split(", ") | join("") | split("||") | join("|") | split(",") | join("") | split("|###") | join("###")'
- 'Fn::Jq':
- All
- '.[] | map(.[] | tostring)| join(" |")'
- 'Fn::Jq':
- All
- 'map(. | .threshold=.threshold+" |\n\n,")'
- 'Fn::Jq':
- All
- '.[] | .scalingGroupId = "### 伸缩组ID(scaling group ID):"+.scalingGroupId+"\n| 机型(instance type) |  可用区(zone)|现价(current price)|折扣%(discount%)|\n|:----|----:|:----:|:----|\n,"'
- 'Fn::MergeList':
'Fn::MergeList': '{{ instanceThresholdInfo.thresholdInfos }}'
Metadata:
ALIYUN::OOS::Interface:
ParameterGroups:
- Parameters:
- region
- scalingGroupId
- taskType
- threshold
- webhook
Label:
default:
zh-cn: 配置参数
en: Configure Parameters
- Parameters:
- rateControl
- OOSAssumeRole
Label:
default:
zh-cn: 高级选项
en: Control Options