すべてのプロダクト
Search
ドキュメントセンター

CloudOps Orchestration Service:スケーリンググループの既存のインスタンスタイプの割引または価格のアラーム

最終更新日:Jan 17, 2025

テンプレート名

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