模板名稱
ACS-ESS-RollingUpdateByReplaceSystemDiskInScalingGroup 通過更換系統硬碟的方式變換伸縮組內的ECS執行個體
模板描述
通過更換系統硬碟的方式變換伸縮組內的ECS執行個體
模板類型
自動化
所有者
Alibaba Cloud
輸入參數
參數名稱 | 描述 | 類型 | 是否必填 | 預設值 | 約束 |
invokeType | 操作類型 | String | 是 | ||
scalingGroupId | 伸縮組ID | String | 是 | ||
enterProcess | 執行開始要暫停伸縮組流程 | List | 否 | ['ScaleIn', 'ScaleOut', 'HealthCheck', 'AlarmNotification', 'ScheduledAction'] | |
exitProcess | 執行結束要恢複的伸縮組流程 | List | 否 | ['ScaleIn', 'ScaleOut', 'HealthCheck', 'AlarmNotification', 'ScheduledAction'] | |
lifecycleState | 生命週期狀態 | List | 否 | InService | |
imageId | 用於更新的鏡像 | String | 否 | "" | |
sourceImageId | 用於復原的鏡像 | String | 否 | "" | |
sourceExecutionId | 用於復原的OOS執行ID | String | 否 | "" | |
scalingConfigurationId | 伸縮配置ID | String | 否 | "" | |
batchPauseOption | 分批模式 | String | 否 | Automatic | |
batchNumber | 分批執行的批次 | Number | 否 | 5 | |
maxErrors | 分批執行的最大錯誤次數 | Number | 否 | 0 | |
OOSAssumeRole | OOS扮演的RAM角色 | String | 否 | "" |
輸出參數
參數名稱 | 描述 | 類型 |
commandOutputs | List |
執行此模板需要的權限原則
{
"Version": "1",
"Statement": [
{
"Action": [
"ess:DescribeScalingConfigurations",
"ess:DescribeScalingGroups",
"ess:DescribeScalingInstances",
"ess:EnterStandby",
"ess:ExitStandBy",
"ess:ModifyScalingConfiguration",
"ess:ResumeProcesses",
"ess:SetInstancesProtection",
"ess:SuspendProcesses"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"ecs:DescribeDisks",
"ecs:DescribeInstances",
"ecs:DescribeLaunchTemplateVersions",
"ecs:DescribeLaunchTemplates",
"ecs:ModifyInstanceAttribute",
"ecs:ReplaceSystemDisk",
"ecs:StartInstance",
"ecs:StopInstance",
"ecs:TagResources"
],
"Resource": "*",
"Effect": "Allow"
},
{
"Action": [
"oos:ListExecutions"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
詳情
ACS-ESS-RollingUpdateByReplaceSystemDiskInScalingGroup詳情
模板內容
FormatVersion: OOS-2019-06-01
Description:
en: Rolling update ECS instances that in scaling group by replace system disk
zh-cn: 通過更換系統硬碟的方式變換伸縮組內的ECS執行個體
name-en: ACS-ESS-RollingUpdateByReplaceSystemDiskInScalingGroup
name-zh-cn: 通過更換系統硬碟的方式變換伸縮組內的ECS執行個體
categories:
- elastic_manage
Parameters:
invokeType:
Label:
en: InvokeType
zh-cn: 操作類型
Type: String
AllowedValues:
- invoke
- rollback
scalingGroupId:
Label:
en: ScalingGroupId
zh-cn: 伸縮組ID
Type: String
enterProcess:
Label:
en: EnterProcess
zh-cn: 執行開始要暫停伸縮組流程
Type: List
Default:
- ScaleIn
- ScaleOut
- HealthCheck
- AlarmNotification
- ScheduledAction
exitProcess:
Label:
en: ExitProcess
zh-cn: 執行結束要恢複的伸縮組流程
Type: List
Default:
- ScaleIn
- ScaleOut
- HealthCheck
- AlarmNotification
- ScheduledAction
lifecycleState:
Label:
en: LifecycleState
zh-cn: 生命週期狀態
Description:
en: The lifecycle state of the ECS instance to be upgraded
zh-cn: 要升級的ECS執行個體所處的生命週期狀態
Type: List
AllowedValues:
- InService
- Protected
Default: InService
imageId:
Label:
en: InvokeImageId
zh-cn: 用於更新的鏡像
Type: String
Default: ''
sourceImageId:
Label:
en: RollbackImageId
zh-cn: 用於復原的鏡像
Type: String
Default: ''
sourceExecutionId:
Label:
en: SourceExecutionId
zh-cn: 用於復原的OOS執行ID
Type: String
Default: ''
scalingConfigurationId:
Label:
en: ScalingConfigurationId
zh-cn: 伸縮配置ID
Type: String
Default: ''
batchPauseOption:
Label:
en: BatchPauseOption
zh-cn: 分批模式
Type: String
AllowedValues:
- Automatic
- FirstBatchPause
- EveryBatchPause
Default: Automatic
batchNumber:
Label:
en: BatchNumber
zh-cn: 分批執行的批次
Type: Number
MinValue: 1
MaxValue: 100
Default: 5
maxErrors:
Label:
en: MaxErrors
zh-cn: 分批執行的最大錯誤次數
Type: Number
Default: 0
OOSAssumeRole:
Label:
en: OOSAssumeRole
zh-cn: OOS扮演的RAM角色
Type: String
Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: choiceNextTask
Action: 'ACS::Choice'
Description:
en: Choose next task by invoke type
zh-cn: 根據執行類型選擇任務
Properties:
DefaultTask: getInstance
Choices:
- When:
'Fn::Equals':
- rollback
- '{{ invokeType }}'
NextTask: getExecutionInstanceIds
- Name: getInstance
Description:
en: Views the ECS instances
zh-cn: 擷取ECS執行個體
Action: 'ACS::ExecuteApi'
Properties:
Service: ESS
API: DescribeScalingInstances
Parameters:
ScalingGroupId: '{{ scalingGroupId }}'
LifecycleStates: '{{ lifecycleState }}'
CreationTypes:
- AutoCreated
- Attached
Outputs:
instanceIds:
Type: List
ValueSelector: 'ScalingInstances.ScalingInstance | map({"InstanceId": (.InstanceId), "LifecycleState": (.LifecycleState)})[]'
- Name: whetherTheScalingGroupInstanceIsEmpty
Action: 'ACS::Choice'
Description:
en: Check whether the instances in the services in the scaling group are empty
zh-cn: 檢查伸縮組內服務中的執行個體是否為空白
Properties:
DefaultTask: whetherTosuspendProcess
Choices:
- When:
'Fn::Equals':
- [ ]
- '{{ getInstance.instanceIds }}'
NextTask: 'ACS::END'
- Name: whetherTosuspendProcess
Action: 'ACS::Choice'
Description:
en: Choose next task by process
zh-cn: 根據流程值判斷是否暫停流程
Properties:
DefaultTask: suspendProcess
Choices:
- When:
'Fn::Equals':
- []
- '{{ enterProcess }}'
NextTask: whetherToModifyScalingConfiguration
- Name: suspendProcess
Action: 'ACS::ExecuteAPI'
Description:
en: Suspend process
zh-cn: 暫停伸縮組流程
Properties:
Service: ESS
API: SuspendProcesses
Parameters:
ScalingGroupId: '{{ scalingGroupId }}'
Process: '{{ enterProcess }}'
- Name: whetherToModifyScalingConfiguration
Action: 'ACS::Choice'
Description:
en: Choose next task by ScalingConfigurationId
zh-cn: 根據伸縮配置ID判斷是否修改伸縮配置
Properties:
DefaultTask: modifyScalingConfiguration
Choices:
- When:
'Fn::Equals':
- ''
- '{{ scalingConfigurationId }}'
NextTask: invokeByReplaceImage
- Name: modifyScalingConfiguration
Action: 'ACS::ExecuteAPI'
Description:
en: Modify scaling configuration
zh-cn: 修改伸縮配置
Properties:
Service: ESS
API: ModifyScalingConfiguration
Parameters:
ScalingConfigurationId: '{{ scalingConfigurationId }}'
ImageId: '{{ imageId }}'
- Name: invokeByReplaceImage
Action: 'ACS::ESS::ReplaceSystemDisk'
Description:
en: Replaces the system disk of ECS instances
zh-cn: 更換系統硬碟
Properties:
instanceId:
Fn::Select:
- 'InstanceId'
- '{{ ACS::TaskLoopItem }}'
lifecycleState:
Fn::Select:
- 'LifecycleState'
- '{{ ACS::TaskLoopItem }}'
imageId: '{{ imageId }}'
scalingGroupId: '{{ scalingGroupId }}'
Loop:
Items: '{{ getInstance.instanceIds }}'
BatchPauseOption: '{{ batchPauseOption }}'
MaxErrors: '{{ maxErrors }}'
Concurrency:
'Fn::CalculateBatch':
- '{{ batchNumber }}'
- '{{ getInstance.instanceIds }}'
Outputs:
newSystemDiskIds:
AggregateType: 'Fn::ListJoin'
AggregateField: newSystemDiskId
Outputs:
newSystemDiskId:
Type: String
ValueSelector: newSystemDiskId
- Name: tagInstance
Action: ACS::ExecuteApi
Description:
en: Creates and attaches tag to ECS instance
zh-cn: 建立並掛載標籤到ECS執行個體
Properties:
Service: ECS
API: TagResources
Parameters:
ResourceIds:
- Fn::Select:
- 'InstanceId'
- '{{ ACS::TaskLoopItem }}'
ResourceType: Instance
Tags:
- Key: 'ess:rollingupdate'
Value: 'oos:{{ ACS::ExecutionId }}'
Loop:
Items: '{{ getInstance.instanceIds }}'
Mode: Concurrency
MaxErrors: 0
Concurrency: 10
- Name: whetherToResumeProcesses
Action: 'ACS::Choice'
Description:
en: Choose next task by process
zh-cn: 根據流程值判斷是否恢複流程
Properties:
DefaultTask: resumeProcesses
Choices:
- When:
'Fn::Equals':
- []
- '{{ exitProcess }}'
NextTask: 'ACS::END'
- Name: resumeProcesses
Action: 'ACS::ExecuteAPI'
OnSuccess: 'ACS::END'
Description:
en: Resume process
zh-cn: 恢複伸縮組流程
Properties:
Service: ESS
API: ResumeProcesses
Parameters:
ScalingGroupId: '{{ scalingGroupId }}'
Process: '{{ exitProcess }}'
- Name: getExecutionInstanceIds
Action: 'ACS::ExecuteAPI'
Description:
en: Get the instance that has been executed
zh-cn: 擷取已經執行過執行指令碼的執行個體
Properties:
Service: OOS
API: ListExecutions
Parameters:
ParentExecutionId: '{{ sourceExecutionId }}'
Outputs:
instanceIds:
Type: List
ValueSelector: 'Executions[].Parameters.instanceId'
lifecycleStates:
Type: List
ValueSelector: '.Executions | map({"InstanceId": (.Parameters.instanceId), "LifecycleState": (.Parameters.lifecycleState)})[]'
- Name: getExistInstanceIds
Description:
en: Views the ECS instances
zh-cn: 擷取ECS執行個體
Action: ACS::SelectTargets
Properties:
ResourceType: ALIYUN::ECS::Instance
Filters:
- Type: ResourceIds
ResourceIds: '{{ getExecutionInstanceIds.instanceIds }}'
Outputs:
instanceIds:
Type: List
ValueSelector: Instances.Instance[].InstanceId
- Name: getRollbackProcess
Action: 'ACS::ExecuteAPI'
Description:
en: Views resource parameters
zh-cn: 擷取源執行的參數
Properties:
Service: OOS
API: ListExecutions
Parameters:
ExecutionId: '{{ sourceExecutionId }}'
Outputs:
enterProcess:
Type: List
ValueSelector: 'Executions[].Parameters.enterProcess[]'
exitProcess:
Type: List
ValueSelector: 'Executions[].Parameters.exitProcess[]'
- Name: suspendProcessWithRollBack
Action: 'ACS::ExecuteAPI'
Description:
en: Suspend process
zh-cn: 暫停伸縮組流程
Properties:
Service: ESS
API: SuspendProcesses
Parameters:
ScalingGroupId: '{{ scalingGroupId }}'
Process: '{{ getRollbackProcess.enterProcess }}'
- Name: rollbackByReplaceImage
Action: 'ACS::ESS::ReplaceSystemDisk'
Description:
en: Replaces the system disk of ECS instances
zh-cn: 更換系統硬碟
Properties:
instanceId: '{{ ACS::TaskLoopItem }}'
lifecycleState:
Fn::Jq:
- First
- '.[] | select(.InstanceId == "{{ ACS::TaskLoopItem }}") | .LifecycleState'
- '{{ getExecutionInstanceIds.lifecycleStates }}'
imageId: '{{ sourceImageId }}'
scalingGroupId: '{{ scalingGroupId }}'
rollBack: 'true'
Loop:
Items: '{{ getExistInstanceIds.instanceIds }}'
BatchPauseOption: '{{ batchPauseOption }}'
MaxErrors: '{{ maxErrors }}'
Concurrency:
'Fn::CalculateBatch':
- '{{ batchNumber }}'
- '{{ getExistInstanceIds.instanceIds }}'
Outputs:
newSystemDiskIds:
AggregateType: 'Fn::ListJoin'
AggregateField: newSystemDiskId
Outputs:
newSystemDiskId:
Type: String
ValueSelector: newSystemDiskId
- Name: whetherToResumeProcessesWithRollback
Action: 'ACS::Choice'
Description:
en: Choose next task by process
zh-cn: 根據流程值判斷是否恢複流程
Properties:
DefaultTask: resumeProcessesWithRollback
Choices:
- When:
'Fn::Equals':
- []
- '{{ getRollbackProcess.exitProcess }}'
NextTask: 'ACS::END'
- Name: resumeProcessesWithRollback
Action: 'ACS::ExecuteAPI'
Description:
en: Resume process
zh-cn: 恢複伸縮組流程
Properties:
Service: ESS
API: ResumeProcesses
Parameters:
ScalingGroupId: '{{ scalingGroupId }}'
Process: '{{ getRollbackProcess.exitProcess }}'
Outputs:
commandOutputs:
Type: List
Value:
'Fn::If':
- 'Fn::Equals':
- invoke
- '{{ invokeType }}'
- '{{ invokeByReplaceImage.newSystemDiskIds }}'
- '{{ rollbackByReplaceImage.newSystemDiskIds }}'