大數據

基於OOS實現生命週期掛鉤綁定EIP到實例

OOS簡介

Operation Orchestration Service,簡稱OOS,是全面、免費的雲上自動化運維平臺,提供運維任務的管理和執行。典型使用場景包括:事件驅動運維,批量操作運維,定時運維任務,跨地域運維等,OOS為重要運維場景提供審批,通知等功能。OOS幫您實現標準化運維任務,從而實踐運維即代碼(Operations as Code)的先進理念。關於OOS更詳細的介紹請參見什麼是運維編排服務

ESS簡介

使用彈性伸縮(Auto Scaling),您可以根據業務需求和策略設置伸縮規則,在業務需求增長時自動為您增加ECS實例以保證計算能力,在業務需求下降時自動減少ECS實例以節約成本。彈性伸縮不僅適合業務量不斷波動的應用程序,同時也適合業務量穩定的應用程序。關於ESS更詳細的介紹請參見什麼是彈性伸縮

場景介紹

ESS生命週期掛鉤使用OOS模板實現自動綁定賬戶下已有EIP到實例。

操作步驟

1.登陸OOS控制檯,找到我的模板,點擊創建模板
image.png
2.選擇空白模版。
image.png
3.複製下文提供的模板到YAML欄中,輸入模板名稱(ECS-DescribeAndAssociateEipAddress,點擊創建模板
image.pngECS-DescribeAndAssociateEipAddress內容:

FormatVersion: OOS-2019-06-01
Description: Attach eip to instance.
Parameters:
  regionId:
    Description: The ID of region.
    Type: String
    Default: '{{ ACS::RegionId }}'
  instanceId:
    Description: The id Instance.
    Type: String
  instanceType:
    Description: The type of instance.
    Type: String
    AllowedValues:
      - Nat
      - SlbInstance
      - EcsInstance
      - NetworkInterface
      - HaVip
    Default: EcsInstance
Tasks:
  - Name: describeEipAddresses
    Action: 'ACS::ExecuteApi'
    Description: Views the eip attr.
    Properties:
      Service: VPC
      API: DescribeEipAddresses
      Parameters:
        RegionId: '{{ regionId }}'
        Status: Available
    Outputs:
      allocationId:
        Type: String
        ValueSelector: 'EipAddresses.EipAddress[].AllocationId'
  - Name: AssociateEipAddress
    Action: 'ACS::ExecuteAPI'
    Description: Associate Eip address to instance.
    Properties:
      Service: VPC
      API: AssociateEipAddress
      Parameters:
        RegionId: '{{ regionId }}'
        AllocationId: '{{ describeEipAddresses.allocationId }}'
        InstanceId: '{{ instanceId }}'
        InstanceType: '{{ instanceType }}'

4.重複以上步驟,創建模板ESS-LifeCycleDescribeAndAssociateEipAddress。

ESS-LifeCycleDescribeAndAssociateEipAddress內容:

FormatVersion: OOS-2019-06-01
Description:
  en: Use lifecycleHook to get available EIP and attach them to the instance(only supports elastic expansion activities).
  zh-cn: 使用生命週期掛鉤獲取可用彈性IP並將其綁定到實例(僅支持彈性擴張活動)。
  name-en: ESS-LifeCycleDescribeAndAssociateEipAddress
  name-zh-cn: 使用生命週期掛鉤綁定EIP到實例
  categories:
    - elastic_manage
Parameters:
  regionId:
    Description:
      name-en: regionId
      name-zh-cn: 地域ID
      en: The ID of region.
      zh-cn: '地域ID,請使用彈性伸縮系統默認值 ${regionId}'
    Type: String
    Default: '${regionId}'
  instanceIds:
    Description:
      name-en: instanceIds
      name-zh-cn: ECS實例ID列表
      en: The ID list of the ECS instance.
      zh-cn: 'ECS實例ID列表,請使用彈性伸縮系統默認值 ["${instanceId}"]'
    Type: List
    Default:
      - '${instanceIds}'
  lifecycleHookId:
    Description:
      name-en: lifecycleHookId
      name-zh-cn: 生命週期掛鉤ID
      en: The ID of the lifecycle hook.
      zh-cn: '生命週期掛鉤ID,請使用彈性伸縮系統默認值 ${lifecycleHookId}'
    Type: String
    Default: '${lifecycleHookId}'
  lifecycleActionToken:
    Description:
      name-en: lifecycleActionToken
      name-zh-cn: 實例關聯的特定伸縮活動的令牌
      en: The token that indicates a specific scaling activity associated with an instance.
      zh-cn: '實例關聯的特定伸縮活動的令牌,請使用彈性伸縮系統默認值 ${lifecycleActionToken}'
    Type: String
    Default: '${lifecycleActionToken}'
  rateControl:
    Description:
      name-en: rateControl
      name-zh-cn: 速率控制
      en: Concurrency ratio of task execution.
      zh-cn: 任務執行的併發比率。
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 1
  OOSAssumeRole:
    Description:
      name-en: OOSAssumeRole
      name-zh-cn: OOS扮演的RAM角色
      en: The RAM role to be assumed by OOS.
      zh-cn: OOS扮演的RAM角色。
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: describeAndAssociateEipAddress
    Action: 'ACS::Template'
    OnSuccess: CompleteLifecycleActionForContinue
    OnError: CompleteLifecycleActionForAbandon
    Description:
      en: Views available eip and attach to instace.
      zh-cn: 獲取賬戶下可用EIP並綁定到實例上。
    Properties:
      TemplateName: ECS-DescribeAndAssociateEipAddress
      Parameters:
        regionId: '{{ regionId }}'
        instanceId: '{{ ACS::TaskLoopItem }}'
        instanceType: 'EcsInstance'
    Loop:
      RateControl: '{{ rateControl }}'
      Items: '{{ instanceIds }}'
  - Name: CompleteLifecycleActionForContinue
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Modify lifecycle action for continue.
      zh-cn: 修改伸縮活動的等待狀態為繼續完成。
    OnSuccess: 'ACS::END'
    Properties:
      Service: ESS
      API: CompleteLifecycleAction
      Parameters:
        RegionId: '{{ regionId }}'
        LifecycleHookId: '{{ lifecycleHookId }}'
        LifecycleActionToken: '{{ lifecycleActionToken }}'
        LifecycleActionResult: CONTINUE
  - Name: CompleteLifecycleActionForAbandon
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Complete lifecycle action for Abandon.
      zh-cn: 修改伸縮活動的等待狀態為棄用。
    Properties:
      Service: ESS
      API: CompleteLifecycleAction
      Parameters:
        RegionId: '{{ regionId }}'
        LifecycleHookId: '{{ lifecycleHookId }}'
        LifecycleActionToken: '{{ lifecycleActionToken }}'
        LifecycleActionResult: ABANDON

5.登陸ESS控制檯,在目標伸縮組生命週期欄新建生命週期掛鉤

image.png

6.配置生命週期掛鉤參數,設置參數(本模板使用默認參數即可),單擊確認

image.png

7.創建彈性擴張類型的規則,執行規則,彈出的實例會自動掛載EIP。注意:當賬號下EIP不足時彈性擴張活動會失敗。

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *