阿里云OOS自定义模板-批量解绑并释放ECS实例的EIP,并绑定新EIP

  • 2021年4月26日
  • 技术

介绍:Operation Orchestration Service,简称OOS,是阿里云提供的自动化运维平台。您可以创建自定义的模板,或使用阿里云提供的公共模板,对ECS、RDS、SLB、VPC等资源进行自动化运维。

地址:https://oos.console.aliyun.com/

这是第一个版本:

这个版本只支持释放EIP,因为OOS有绑定EIP的公共模板就没有做绑定的操作

FormatVersion: OOS-2021-04-20
Description:
  en: Bulky Unassociate and release elastic IP (EIP) address by specified ECS instances.
  zh-cn: 批量解绑ECS实例的EIP。
  name-en: ECS-BulkyUnassociateAndReleaseEIPs
  name-zh-cn: 批量解绑并释放ECS实例的EIP
Parameters:
  regionId:
    Type: String
    Description:
      en: The id of region.
      zh-cn: 地域ID。
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  targets:
    Type: Json
    Description:
      en: The scope of instances.
      zh-cn: 要选择的实例范围。
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: regionId
  rateControl:
    Description:
      en: Concurrency rate of task execution.
      zh-cn: 任务执行的并发比率。
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 5
  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: detachNetWorkInterfaceAndEipAndAttachFromInstance
    Action: 'ACS::ECS::ReleaseEipAddress'
    Description:
      en: Detach and delete the network interface and eip from the instance.
      zh-cn: 将弹性IP从实例上解绑并删除。
    Properties:
      regionId: '{{ regionId }}'
      instanceId: '{{ ACS::TaskLoopItem }}'
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ getInstance.instanceIds }}'

但是之前解绑释放EIP(弹性ip)并且再绑定EIP会出现一个问题.阿里云的机制绑定EIP时会优先绑定之前已经绑定过的EIP,如果之前的EIP还未被使用就会重新被绑定,但是目前业务需求是需要每次EIP必须和之前不一样,于是修改了一下;

第二个版本:

FormatVersion: OOS-2021-04-20
Description: ''
Parameters:
  regionId:
    Type: String
    Description:
      en: The id of region.
      zh-cn: 地域ID。
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  targets:
    Type: Json
    Description:
      en: The scope of instances.
      zh-cn: 要选择的实例范围。
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: regionId
  internetChargeType:
    Description:
      en: EIP measurement method
      zh-cn: EIP的计费方式
    Type: String
    AllowedValues:
      - PayByBandwidth
      - PayByTraffic
    Default: PayByBandwidth
  bandwidth:
    Description:
      en: Peak bandwidth of eip
      zh-cn: EIP的带宽峰值
    Type: Number
    Default: 5
  rateControl:
    Description:
      en: Concurrency rate of task execution.
      zh-cn: 任务执行的并发比率。
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 5
  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: detachNetWorkInterfaceAndEipAndAttachFromInstance
    Action: 'ACS::Template'
    Properties:
      TemplateName: ECS-AllocateEipAddressAndAttachToInstance
      Parameters:
        regionId: '{{ regionId }}'
        internetChargeType: '{{ internetChargeType }}'
        bandwidth: '{{ bandwidth }}'
        instanceId: '{{ ACS::TaskLoopItem }}'
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ getInstance.instanceIds }}'

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注