基於OOS實現生命週期掛鉤綁定EIP到實例
OOS簡介
Operation Orchestration Service,簡稱OOS,是全面、免費的雲上自動化運維平臺,提供運維任務的管理和執行。典型使用場景包括:事件驅動運維,批量操作運維,定時運維任務,跨地域運維等,OOS為重要運維場景提供審批,通知等功能。OOS幫您實現標準化運維任務,從而實踐運維即代碼(Operations as Code)的先進理念。關於OOS更詳細的介紹請參見什麼是運維編排服務。
ESS簡介
使用彈性伸縮(Auto Scaling),您可以根據業務需求和策略設置伸縮規則,在業務需求增長時自動為您增加ECS實例以保證計算能力,在業務需求下降時自動減少ECS實例以節約成本。彈性伸縮不僅適合業務量不斷波動的應用程序,同時也適合業務量穩定的應用程序。關於ESS更詳細的介紹請參見什麼是彈性伸縮。
場景介紹
ESS生命週期掛鉤使用OOS模板實現自動綁定賬戶下已有EIP到實例。
操作步驟
1.登陸OOS控制檯,找到我的模板,點擊創建模板。
2.選擇空白模版。
3.複製下文提供的模板到YAML欄中,輸入模板名稱(ECS-DescribeAndAssociateEipAddress),點擊創建模板。ECS-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控制檯,在目標伸縮組生命週期欄新建生命週期掛鉤。
6.配置生命週期掛鉤參數,設置參數(本模板使用默認參數即可),單擊確認。
7.創建彈性擴張類型的規則,執行規則,彈出的實例會自動掛載EIP。注意:當賬號下EIP不足時彈性擴張活動會失敗。