批量修改ECS实例的计费方式

背景

在一些场景下,根据实例的使用需求变化需要将包年包月转按量付费或者按量付费转包年包月。针对批量实例的场景,一台一台手动操作不仅效率低下还容易出错。本文将介绍通过系统运维管理执行的方式批量修改ECS实例的计费方式。ECS实例的计费方式主要有两种,包年包月按量付费

前提条件

  1. 包年包月转按量付费的前提条件,参见包年包月转按量付费

  2. 按量付费转包年包月的前提条件,参见按量付费转包年包月

操作步骤

  1. 登录系统运维管理管理控制台。

  2. 单击公共模板

  3. 选择批量修改实例的计费方式,对其单击创建执行Screenshot 2023-04-11 at 16.18.04.png

  4. 单击下一步,设置参数image.png

  5. 输入以下的参数:

    1. instanceChargeType:实例需要修改的目标计费方式

      1. period:(按量计费转包年包月时必填) 续费时长。PeriodUnit=Week时,Period取值:1~4,PeriodUnit=Month时,Period取值:1~12,24, 36, 48, 60。

      2. periodUnit:(按量计费转包年包月时必填) 续费时长的时间单位

    2. includeDataDisks:(按量计费转包年包月时必填) 是否将实例挂载的所有按量付费数据盘一起转换为包年包月数据盘

    3. networkChargeType:网络需要修改的目标计费方式

    4. regionId:地域ID

    5. targets:目标实例

    6. rateControl:(选填) 任务执行的并发比率

    7. OOSAssumeRole:(选填) OOS扮演的RAM角色Screenshot 2023-04-11 at 16.38.42.png

  6. 单击下一步:确认,单击确认风险并执行

  7. 执行管理中可查看刚刚创建的执行,若创建执行成功,且执行状态处于运行中,则表示修改ECS实例的计费方式正在进行中。

  8. 当执行状态转换为成功时,则表示修改ECS实例的计费方式成功。可以在ECS实例页面查看修改后的计费方式。

  9. 如需更多了解修改ECS实例的计费方式过程,当创建执行成功后,您可单击该执行的详情,查看执行日志,实时了解执行的进度和状态。

附录

公共模板 ACS-ECS-BulkyModifyInstanceChargeType

FormatVersion: OOS-2019-06-01
Description:
  en: Bulky modify instance charge type
  zh-cn: 批量修改实例的计费方式
  name-en: ACS-ECS-BulkyModifyInstanceChargeType
  name-zh-cn: 批量修改实例的计费方式
  categories:
    - instance_manage
Parameters:
  regionId:
    Type: String
    Label:
      en: RegionId
      zh-cn: 地域ID
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  targets:
    Type: Json
    Label:
      en: TargetInstance
      zh-cn: 目标实例
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: regionId
  instanceChargeType:
    Label:
      en: InstanceChargeType
      zh-cn: 实例需要修改的目标计费方式
    Type: String
    AllowedValues:
      - PostPaid
      - PrePaid
    Default: PostPaid
  periodUnit:
    Label:
      en: PeriodUnit
      zh-cn: 续费时长的时间单位
    Type: String
    AllowedValues:
      - Week
      - Month
    Default: Month
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${instanceChargeType}
              - PostPaid
  period:
    Description:
      en: The period of the instance
      zh-cn: PeriodUnit=Week时,Period取值:1~4,PeriodUnit=Month时,Period取值:1~12,24, 36, 48, 60
    Label:
      en: Period
      zh-cn: 续费时长
    Type: Number
    Default: 1
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${instanceChargeType}
              - PostPaid
  includeDataDisks:
    Description:
      en: Specifies whether to change the billing method of all data disks attached to the instance from pay-as-you-go to subscription
      zh-cn: 是否将实例挂载的所有按量付费数据盘一起转换为包年包月数据盘
    Label:
      en: IncludeDataDisks
      zh-cn: 是否转换数据盘
    Type: Boolean
    Default: false
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${instanceChargeType}
              - PostPaid
  networkChargeType:
    Label:
      en: NetworkChargeType
      zh-cn: 网络需要修改的目标计费方式
    Type: String
    AllowedValues:
      - PayByBandwidth
      - PayByTraffic
      - ''
    Default: PayByTraffic
  rateControl:
    Label:
      en: RateControl
      zh-cn: 任务执行的并发比率
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 10
  OOSAssumeRole:
    Label:
      en: OOSAssumeRole
      zh-cn: OOS扮演的RAM角色
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: getInstance
    Description:
      en: Views the ECS instances
      zh-cn: 获取ECS实例
    Action: ACS::SelectTargets
    Properties:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ targets }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: Instances.Instance[].InstanceId
  - Name: modifyInstanceChargeType
    Description:
      en: Modify instance charge type
      zh-cn: 修改实例计费方式
    Action: ACS::ECS::ModifyInstanceChargeType
    Properties:
      regionId: '{{ regionId }}'
      instanceId: '{{ ACS::TaskLoopItem }}'
      instanceChargeType: '{{ instanceChargeType }}'
      networkChargeType: '{{ networkChargeType }}'
      period: '{{ period }}'
      periodUnit: '{{ periodUnit }}'
      includeDataDisks: '{{ includeDataDisks }}'
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ getInstance.instanceIds }}'
Metadata:
  ALIYUN::OOS::Interface:
    ParameterGroups:
      - Parameters:
          - instanceChargeType
          - period
          - periodUnit
          - includeDataDisks
          - networkChargeType
        Label:
          default:
            zh-cn: 计费方式参数选择
            en: Choose the parameter of instnace charge type
      - Parameters:
          - regionId
          - target
        Label:
          default:
            zh-cn: 选择实例
            en: Select ECS Instances
      - Parameters:
          - rateControl
          - OOSAssumeRole
        Label:
          default:
            zh-cn: 高级选项
            en: Control Options