基于OOS实现包年包月实例到期后提前一天转按量-阿里云开发者社区

开发者社区> 开发与运维> 正文

基于OOS实现包年包月实例到期后提前一天转按量

简介: 通过运维编排服务在包年包月实例到期前一天及时将实例转成按量付费,以降低成本。

OOS简介
Operation Orchestration Service,简称OOS,是全面、免费的云上自动化运维平台,提供运维任务的管理和执行。典型使用场景包括:事件驱动运维,批量操作运维,定时运维任务,跨地域运维等,OOS为重要运维场景提供审批,通知等功能。OOS帮您实现标准化运维任务,从而实践运维即代码(Operations as Code)的先进理念。关于OOS更详细的介绍请参见什么是运维编排服务

场景介绍
当账户下有一批自动续费的ECS实例,在实例到期当天如果不能及时释放实例或转成按量,实例会自动续费,产生一批额外的费用。使用OOS可以实现把到期实例提前一天转成按量付费,以降低成本,节省费用。

创建模板
1.登陆OOS控制台,找到我的模板,点击创建模板。
image.png
2.选择空白模版。
image.png
3.复制下文提供的模板到YAML栏中,输入模板名称,点击创建模板。
image.png

模板内容:

Description: Modify prepaid instance charge type.
FormatVersion: OOS-2019-06-01
Parameters:
  regionId:
    Type: String
    Description:
      en: The id of region.
      zh-cn: 地域ID。
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  targets:
    Type: Json
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: regionId
  rateControl:
    Description:
      en: Concurrency ratio of task execution.
      zh-cn: 任务执行的并发比率。
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 10
  OOSAssumeRole:
    Description:
      en: The RAM role to be assumed by OOS.
      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: describeInstances
    Action: 'ACS::ExecuteAPI'
    Description:
      zh-cn: Get Instance by expired time.
      en: 根据到期时间过滤实例。
    Properties:
      Service: ECS
      API: DescribeInstances
      Parameters:
        RegionId: '{{ regionId }}'
        InstanceIds: '{{ getInstance.instanceIds }}'
        InstanceChargeType: PrePaid
        Filter3Key: ExpiredStartTime
        Filter4Key: ExpiredEndTime
        Filter3Value:
          'Fn::FormatUTCTime':
            - 'Fn::AddHour':
                - '{{ACS::CurrentUTCTime}}'
                - 24
            - '%Y-%m-%dT00:00Z'
        Filter4Value:
          'Fn::FormatUTCTime':
            - 'Fn::AddHour':
                - '{{ACS::CurrentUTCTime}}'
                - 48
            - '%Y-%m-%dT00:00Z'
    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: PostPaid
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ describeInstances.instanceIds }}'
Outputs:
  InstanceIds:
    Type: List
    Value: '{{ describeInstances.instanceIds }}'

定时执行模版
1.找到定时运维,点击创建,选择周期性重复执行,设置定时执行的规则。
截图所示规则:截止规则结束时间,每天0点0分定时执行制指定模板。
image.png
2.模板选择,选择上文创建的模板。
image.png
3.参数设置,设置目标地域,选择对应的实例。点击立即执行。
image.png
4.在执行详情页中可以查看定时执行列表和所操作的资源。
image.png

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章