Todos os produtos
Search
Central de documentação

CloudOps Orchestration Service:ACS-ESS-RollingUpdateByRunCommandInScalingGroup

Última atualização: Jun 28, 2026

Nome do modelo

Executa atualizações contínuas em instâncias ECS de um grupo de dimensionamento por meio da execução de comandos.

Executar agora

Descrição do modelo

Executa atualizações contínuas em instâncias ECS de um grupo de dimensionamento por meio da execução de comandos.

Tipo de modelo

automation

Proprietário

Alibaba Cloud

Parâmetros de entrada

Parâmetro

Descrição

Tipo

Obrigatório

Padrão

Restrições

invokeType

Tipo de operação. Defina como invoke para executar uma atualização ou rollback para reverter uma atualização anterior.

String

Sim

scalingGroupId

ID do grupo de dimensionamento que contém as instâncias ECS de destino.

String

Sim

enterProcess

Processos do grupo de dimensionamento a suspender antes do início da atualização. A suspensão desses processos impede que o Auto Scaling interfira na atualização.

List

Não

['ScaleIn', 'ScaleOut', 'HealthCheck', 'AlarmNotification', 'ScheduledAction']

exitProcess

Processos do grupo de dimensionamento a retomar após a conclusão da atualização. Geralmente, corresponde aos mesmos valores de enterProcess.

List

Não

['ScaleIn', 'ScaleOut', 'HealthCheck', 'AlarmNotification', 'ScheduledAction']

lifecycleState

Estado do ciclo de vida das instâncias de destino. Especifique InService para instâncias ativas ou Protected para instâncias protegidas contra redução de escala.

List

Não

InService

commandType

Tipo de script a executar. Valores válidos: RunShellScript (Linux), RunBatScript (Windows) e RunPowerShellScript (Windows).

String

Não

RunShellScript

invokeScript

Script de atualização a executar em cada instância, como um script shell que baixa o código mais recente da aplicação e reinicia um serviço.

String

Não

""

rollbackScript

Script de reversão a executar em cada instância. Este script deve desfazer as alterações feitas pelo invokeScript.

String

Não

""

sourceExecutionId

ID da execução original do OOS a reverter. Necessário apenas quando invokeType estiver definido como rollback.

String

Não

""

batchPauseOption

Política de pausa entre lotes. Automatic executa todos os lotes sem pausas. FirstBatchPause interrompe a operação após o primeiro lote. EveryBatchPause pausa a operação após cada lote.

String

Não

Automatic

batchNumber

Quantidade de lotes para dividir as instâncias. Por exemplo, se houver 10 instâncias e este valor for definido como 5, cada lote processará 2 instâncias.

Number

Não

5

OOSAssumeRole

Função RAM assumida pelo OOS para realizar a atualização. Caso não seja especificada, o OOS utiliza as permissões do usuário atual.

String

Não

""

Parâmetros de saída

Parâmetro

Descrição

Tipo

commandOutputs

Saídas de comando de cada instância, correspondentes à operação especificada por invokeType.

List

Política de permissão necessária

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ess:DescribeScalingInstances",
                "ess:EnterStandby",
                "ess:ExitStandBy",
                "ess:ResumeProcesses",
                "ess:SetInstancesProtection",
                "ess:SuspendProcesses"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ecs:DescribeInstances",
                "ecs:DescribeInvocationResults",
                "ecs:DescribeInvocations",
                "ecs:RunCommand",
                "ecs:TagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "oos:ListExecutions"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

Detalhes

Detalhes do ACS-ESS-RollingUpdateByRunCommandInScalingGroup

Conteúdo do modelo

FormatVersion: OOS-2019-06-01
Description:
  en: Performs a rolling update on ECS instances in a scaling group by executing a command.
  zh-cn: 通过执行命令的方式滚动更新伸缩组内的ECS实例
  name-en: Perform Rolling Update in Scaling Group by Running Command
  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 target ECS instance.
      zh-cn: 要升级的ECS实例所处的生命周期状态
    Type: List
    AllowedValues:
      - InService
      - Protected
    Default: InService
  commandType:
    Label:
      en: CommandType
      zh-cn: 命令类型
    Type: String
    AllowedValues:
      - RunBatScript
      - RunPowerShellScript
      - RunShellScript
    Default: RunShellScript
  invokeScript:
    Label:
      en: InvokeScript
      zh-cn: 用于执行的脚本
    Type: String
    Default: ''
  rollbackScript:
    Label:
      en: RollbackScript
      zh-cn: 用于回滚的脚本
    Type: String
    Default: ''
  sourceExecutionId:
    Label:
      en: SourceExecutionId
      zh-cn: 用于回滚的OOS执行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
  OOSAssumeRole:
    Label:
      en: OOSAssumeRole
      zh-cn: OOS扮演的RAM角色
    Type: String
    Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: choiceNextTask
    Action: 'ACS::Choice'
    Description:
      en: Selects the next task based on the value of invokeType.
      zh-cn: 根据执行类型选择任务
    Properties:
      DefaultTask: getInstance
      Choices:
        - When:
            'Fn::Equals':
              - rollback
              - '{{ invokeType }}'
          NextTask: getExecutionInstanceIds
  - Name: getInstance
    Description:
      en: Retrieves the ECS instances in the scaling group.
      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: Checks if the scaling group has any instances that match the specified state.
      zh-cn: 检查伸缩组内服务中的实例是否为空
    Properties:
      DefaultTask: whetherTosuspendProcess
      Choices:
        - When:
            'Fn::Equals':
              - [ ]
              - '{{ getInstance.instanceIds }}'
          NextTask: 'ACS::END'
  - Name: whetherTosuspendProcess
    Action: 'ACS::Choice'
    Description:
      en: Determines whether to suspend scaling processes based on the enterProcess parameter.
      zh-cn: 根据流程值判断是否暂停流程
    Properties:
      DefaultTask: suspendProcess
      Choices:
        - When:
            'Fn::Equals':
              - []
              - '{{ enterProcess }}'
          NextTask: invokeByRunCommand
  - Name: suspendProcess
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Suspends the specified scaling group processes.
      zh-cn: 暂停伸缩组流程
    Properties:
      Service: ESS
      API: SuspendProcesses
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        Process: '{{ enterProcess }}'
  - Name: invokeByRunCommand
    Action: 'ACS::ESS::RunCommand'
    Description:
      en: Runs the specified command on the target instances by using Cloud Assistant.
      zh-cn: 执行云助手命令
    Properties:
      commandContent: '{{ invokeScript }}'
      instanceId:
        Fn::Select:
          - 'InstanceId'
          - '{{ ACS::TaskLoopItem }}'
      lifecycleState:
        Fn::Select:
          - 'LifecycleState'
          - '{{ ACS::TaskLoopItem }}'
      commandType: '{{ commandType }}'
      scalingGroupId: '{{ scalingGroupId }}'
    Loop:
      Items: '{{ getInstance.instanceIds }}'
      BatchPauseOption: '{{ batchPauseOption }}'
      Concurrency:
        'Fn::CalculateBatch':
          - '{{ batchNumber }}'
          - '{{ getInstance.instanceIds }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: invocationOutput
  - Name: tagInstance
    Action: ACS::ExecuteApi
    Description:
      en: Applies a tag to the updated ECS instances for tracking.
      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: Determines whether to resume scaling processes based on the exitProcess parameter.
      zh-cn: 根据流程值判断是否恢复流程
    Properties:
      DefaultTask: resumeProcesses
      Choices:
        - When:
            'Fn::Equals':
              - []
              - '{{ exitProcess }}'
          NextTask: 'ACS::END'
  - Name: resumeProcesses
    Action: 'ACS::ExecuteAPI'
    OnSuccess: 'ACS::END'
    Description:
      en: Resumes the specified scaling group processes.
      zh-cn: 恢复伸缩组流程
    Properties:
      Service: ESS
      API: ResumeProcesses
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        Process: '{{ exitProcess }}'
  - Name: getExecutionInstanceIds
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Retrieves the instance IDs from a previous execution for a rollback.
      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: Filters the list of instances to include only those that still exist.
      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: Retrieves the process parameters from the original execution.
      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: Suspends the scaling group processes for a rollback.
      zh-cn: 暂停伸缩组流程
    Properties:
      Service: ESS
      API: SuspendProcesses
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        Process: '{{ getRollbackProcess.enterProcess }}'
  - Name: rollbackByRunCommand
    Action: 'ACS::ESS::RunCommand'
    Description:
      en: Runs the rollback command by using Cloud Assistant.
      zh-cn: 执行云助手命令
    Properties:
      commandContent: '{{ rollbackScript }}'
      instanceId: '{{ ACS::TaskLoopItem }}'
      lifecycleState:
        Fn::Jq:
          - First
          - '.[] | select(.InstanceId == "{{ ACS::TaskLoopItem }}") | .LifecycleState'
          - '{{ getExecutionInstanceIds.lifecycleStates }}'
      commandType: RunShellScript
      scalingGroupId: '{{ scalingGroupId }}'
      rollBack: 'true'
    Loop:
      Items: '{{ getExistInstanceIds.instanceIds }}'
      BatchPauseOption: '{{ batchPauseOption }}'
      Concurrency:
        'Fn::CalculateBatch':
          - '{{ batchNumber }}'
          - '{{ getExistInstanceIds.instanceIds }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: invocationOutput
  - Name: whetherToResumeProcessesWithRollback
    Action: 'ACS::Choice'
    Description:
      en: Determines whether to resume scaling processes after a rollback.
      zh-cn: 根据流程值判断是否恢复流程
    Properties:
      DefaultTask: resumeProcessesWithRollback
      Choices:
        - When:
            'Fn::Equals':
              - []
              - '{{ getRollbackProcess.exitProcess }}'
          NextTask: 'ACS::END'
  - Name: resumeProcessesWithRollback
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Resumes the scaling group processes after a rollback.
      zh-cn: 恢复伸缩组流程
    Properties:
      Service: ESS
      API: ResumeProcesses
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        Process: '{{ getRollbackProcess.exitProcess }}'
Outputs:
  commandOutputs:
    Type: List
    Value:
      'Fn::If':
        - 'Fn::Equals':
            - invoke
            - '{{ invokeType }}'
        - '{{ invokeByRunCommand.commandOutputs }}'
        - '{{ rollbackByRunCommand.commandOutputs }}'