Nama Template
ACS-ECS-AlarmDiscountOrPriceInScalingGroupExistingInstanceTypes
Deskripsi Template
Memantau harga atau diskon dari instans preemptible dalam grup penskalaan yang ditentukan dan mengirimkan notifikasi peringatan jika harga atau diskon melebihi ambang batas tertentu.
Tipe Template
Otomatis
Pemilik
Alibaba Cloud
Parameter Input
Parameter | Deskripsi | Tipe | Diperlukan | Nilai Default | Batasan |
scalingGroupId | ID grup penskalaan. | Daftar | Ya | ||
threshold | Ambang batas harga atau diskon. | Nomor | Ya | ||
webhook | URL webhook chatbot DingTalk untuk menerima notifikasi peringatan. | String | Ya | ||
region | ID wilayah. | String | Tidak | {{ ACS::RegionId }} | |
taskType | Jenis tugas pemantauan. | String | Tidak | Diskon | |
rateControl | Pengaturan kontrol laju. | Json | Tidak | {'Mode': 'Concurrency', 'MaxErrors': 100, 'Concurrency': 10} | |
OOSAssumeRole | Peran Resource Access Management (RAM) yang diasumsikan oleh CloudOps Orchestration Service (OOS). | String | Tidak | OOSServiceRole |
Parameter Output
Parameter | Deskripsi | Tipe |
allThresholdInfo | Daftar |
Kebijakan Izin yang Diperlukan untuk Menjalankan Template
{
"Version": "1",
"Statement": [
{
"Action": [
"ess:DescribeScalingGroups",
"ess:DescribeScalingInstances"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ecs:DescribeInstances",
"ecs:DescribeSpotPriceHistory"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Referensi
Untuk informasi lebih lanjut, lihat ACS-ECS-AlarmDiscountOrPriceInScalingGroupExistingInstanceTypes.yml di GitHub.
Isi Template
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