Nama Template
ACS-ECS-AlarmWhenDiscountOrSpotPriceExceedsThresholdByScalingGroup
Deskripsi Template
Memantau harga atau diskon dari instans preemptible di 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 diskon atau harga spot. | Angka | Ya | ||
webhook | URL webhook chatbot DingTalk. | String | Ya | ||
region | ID wilayah. | String | Tidak | {{ ACS::RegionId }} | |
taskType | Tipe pekerjaan pemantauan. | String | Tidak | Discount | |
rateControl | Pengaturan kontrol laju. | Json | Tidak | {'Mode': 'Concurrency', 'MaxErrors': 100, 'Concurrency': 10} | |
OOSAssumeRole | Peran Manajemen Akses Sumber Daya (RAM) yang diasumsikan oleh Layanan Orkestrasi CloudOps (OOS). | String | Tidak | OOSServiceRole |
Parameter Output
Parameter | Deskripsi | Tipe |
allThresholdInfo | Daftar |
Kebijakan Izin yang Dibutuhkan untuk Menjalankan Template
{
"Version": "1",
"Statement": [
{
"Action": [
"ess:DescribeScalingConfigurations",
"ess:DescribeScalingGroups"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ecs:DescribeSpotPriceHistory",
"ecs:DescribeVSwitches"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
Referensi
Untuk informasi lebih lanjut, lihat ACS-ECS-AlarmWhenDiscountOrSpotPriceExceedsThresholdByScalingGroup.yml di GitHub.
Isi Template
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: deskripsi dalam bahasa Cina
name-en: ACS-ECS-AlarmWhenDiscountOrSpotPriceExceedsThresholdByScalingGroup
name-zh-cn: deskripsi dalam bahasa Cina
Parameters:
region:
Type: String
Label:
en: RegionId
zh-cn: deskripsi dalam bahasa Cina
Description:
en: The region id
zh-cn: deskripsi dalam bahasa Cina
AssociationProperty: RegionId
Default: '{{ ACS::RegionId }}'
scalingGroupId:
Description:
en: The scaling group id
zh-cn: deskripsi dalam bahasa Cina
Label:
en: ScalingGroupId
zh-cn: deskripsi dalam bahasa Cina
Type: List
taskType:
Description:
en: The monitoring threshold task type (Discount: Monitor discount, Price: monitor price)
zh-cn: deskripsi dalam bahasa Cina
Label:
en: TaskType
zh-cn: deskripsi dalam bahasa Cina
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: deskripsi dalam bahasa Cina
Label:
en: Threshold
zh-cn: deskripsi dalam bahasa Cina
Type: Number
webhook:
Label:
en: Webhook
zh-cn: deskripsi dalam bahasa Cina
Description:
en: example:https://oapi.dingtalk.com/robot/send?access_token=bac51db2e39418ec6c2dbb27fd111bc7xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
zh-cn: deskripsi dalam bahasa Cina
Type: String
rateControl:
Label:
en: RateControl
zh-cn: deskripsi dalam bahasa Cina
Type: Json
AssociationProperty: RateControl
Default:
Mode: Concurrency
MaxErrors: 100
Concurrency: 10
OOSAssumeRole:
Label:
en: OOSAssumeRole
zh-cn: deskripsi dalam bahasa Cina
Type: String
Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: describeScalingGroups
Action: 'ACS::ExecuteAPI'
Description:
en: Describe the scaling groups
zh-cn: deskripsi dalam bahasa Cina
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: deskripsi dalam bahasa Cina
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: deskripsi dalam bahasa Cina
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: deskripsi dalam bahasa Cina
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: deskripsi dalam bahasa Cina
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: deskripsi dalam bahasa Cina
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: deskripsi dalam bahasa Cina
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 (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 = "### 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':
- |
### The alert threshold (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 = "### 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: deskripsi dalam bahasa Cina
en: Configure Parameters
- Parameters:
- rateControl
- OOSAssumeRole
Label:
default:
zh-cn: deskripsi dalam bahasa Cina
en: Control Options