全部产品
Search
文档中心

CloudOps Orchestration Service:ACS-ESS-RollingUpdateByDownloadFileAndRunCommand

更新时间:Jun 28, 2025

Nama template

ACS-ESS-RollingUpdateByDownloadFileAndRunCommand

Jalankan Sekarang

Deskripsi template

Mengunduh file dan menjalankan perintah untuk melaksanakan pembaruan bergulir pada instance Elastic Compute Service (ECS) di dalam grup penskalaan.

Tipe template

Otomatis

Pemilik

Alibaba Cloud

Parameter input

Parameter

Deskripsi

Tipe

Diperlukan

Nilai default

Batas

invokeType

Tipe operasi.

String

Ya

scalingGroupId

ID grup penskalaan.

String

Ya

invokeSourcePath

URL file yang digunakan untuk melakukan pembaruan bergulir.

String

Ya

invokeDestinationDir

Direktori tempat file yang digunakan untuk melakukan pembaruan bergulir diunduh.

String

Ya

rollbackSourcePath

URL file yang digunakan untuk melakukan rollback.

String

Ya

rollbackDestinationDir

Direktori tempat file yang digunakan untuk melakukan rollback diunduh.

String

Ya

enterProcess

Proses penskalaan yang akan ditangguhkan sebelum eksekusi.

List

Tidak

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

exitProcess

Proses penskalaan yang akan dilanjutkan setelah eksekusi.

List

Tidak

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

invokeScript

Skrip yang digunakan untuk melakukan pembaruan bergulir.

String

Tidak

""

rollbackScript

Skrip yang digunakan untuk melakukan rollback.

String

Tidak

""

sourceExecutionId

ID eksekusi CloudOps Orchestration Service (OOS) yang akan dibatalkan.

String

Tidak

""

whetherSaveToFile

Menentukan apakah akan menyimpan konten file ke file tertentu.

Boolean

Tidak

True

batchPauseOption

Kebijakan jeda.

String

Tidak

Automatic

batchNumber

Jumlah batch.

Number

Tidak

5

OOSAssumeRole

Peran Resource Access Management (RAM) yang diasumsikan oleh OOS.

String

Tidak

""

Parameter output

Parameter

Deskripsi

Tipe

commandOutputs

List

Kebijakan yang diperlukan untuk mengeksekusi template

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ess:CreateLifecycleHook",
                "ess:DescribeLifecycleHooks",
                "ess:DescribeScalingInstances",
                "ess:ModifyLifecycleHook",
                "ess:ResumeProcesses",
                "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"
        }
    ]
}

Referensi

ACS-ESS-RollingUpdateByDownloadFileAndRunCommand

Isi Template

FormatVersion: OOS-2019-06-01
Description:
  en: Rolling update ECS instances that in scaling group by download file and run command
  zh-cn: 通过下载文件并执行命令的方式滚动更新伸缩组内的ECS实例
  name-en: ACS-ESS-RollingUpdateByDownloadFileAndRunCommand
  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
  invokeSourcePath:
    Type: String
    Label:
      en: InvokeSourcePath
      zh-cn: 用于升级的文件URL
  invokeDestinationDir:
    Label:
      en: InvokeDestinationDir
      zh-cn: 用于升级的文件存储目录
    Type: String
  invokeScript:
    Label:
      en: InvokeScript
      zh-cn: 用于升级的脚本
    Type: String
    AssociationProperty: Code
    Default: ''
  rollbackSourcePath:
    Type: String
    Label:
      en: InvokeSourcePath
      zh-cn: 用于回滚的文件URL
  rollbackDestinationDir:
    Label:
      en: InvokeDestinationDir
      zh-cn: 用于回滚的文件存储目录
    Type: String
  rollbackScript:
    Label:
      en: RollbackScript
      zh-cn: 用于回滚的脚本
    Type: String
    AssociationProperty: Code
    Default: ''
  sourceExecutionId:
    Label:
      en: SourceExecutionId
      zh-cn: 用于回滚的OOS执行ID
    Type: String
    Default: ''
  whetherSaveToFile:
    Label:
      en: whetherSaveToFile
      zh-cn: 是否将内容下载到特定文件
    Type: Boolean
    Default: true
  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: getLifecycleHook
    Action: ACS::ExecuteAPI
    Description:
      en: Get lifecycle hook
      zh-cn: 获取生命周期挂钩
    Properties:
      Service: ESS
      API: DescribeLifecycleHooks
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        LifecycleHookName: ACS-ESS-LifeCycleDownloadFileAndRunCommand
    Outputs:
      totalCount:
        Type: String
        ValueSelector: .TotalCount
  - 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 }}'
        LifecycleState: InService
        CreationTypes:
          - AutoCreated
          - Attached
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: 'ScalingInstances.ScalingInstance[].InstanceId'
  - Name: createLifecycleHookOfUpgrade
    When:
      Fn::Equals:
        - '{{ getLifecycleHook.totalCount }}'
        - 0
    Action: ACS::ExecuteAPI
    Description:
      en: Create lifecycle hook of upgrade
      zh-cn: 创建用于升级的生命周期挂钩
    Properties:
      Service: ESS
      API: CreateLifecycleHook
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        NotificationMetadata: '{"sourcePath":"{{ invokeSourcePath }}","destinationDir":"{{ invokeDestinationDir }}","commandContent":"{{ invokeScript }}","timeout":"600","regionId":"${regionId}","instanceIds":"${instanceIds}","lifecycleHookId":"${lifecycleHookId}","lifecycleActionToken":"${lifecycleActionToken}","rateControl":"{\"Mode\":\"Concurrency\",\"MaxErrors\":0,\"Concurrency\":10}","OOSAssumeRole":"OOSServiceRole"}'
        LifecycleTransition: SCALE_OUT
        LifecycleHookName: ACS-ESS-LifeCycleDownloadFileAndRunCommand
        NotificationArn: acs:oos:{{ ACS::RegionId }}:{{ACS::AccountId}}:template/ACS-ESS-LifeCycleDownloadFileAndRunCommand
  - Name: modifyLifecycleHookOfUpgrade
    When:
      Fn::Equals:
        - '{{ getLifecycleHook.totalCount }}'
        - 1
    Action: ACS::ExecuteAPI
    Description:
      en: Modify lifecycle hook of upgrade
      zh-cn: 修改用于升级的生命周期挂钩
    Properties:
      Service: ESS
      API: ModifyLifecycleHook
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        NotificationMetadata: '{"sourcePath":"{{ invokeSourcePath }}","destinationDir":"{{ invokeDestinationDir }}","commandContent":"{{ invokeScript }}","timeout":"600","regionId":"${regionId}","instanceIds":"${instanceIds}","lifecycleHookId":"${lifecycleHookId}","lifecycleActionToken":"${lifecycleActionToken}","rateControl":"{\"Mode\":\"Concurrency\",\"MaxErrors\":0,\"Concurrency\":10}","OOSAssumeRole":"OOSServiceRole"}'
        LifecycleTransition: SCALE_OUT
        LifecycleHookName: ACS-ESS-LifeCycleDownloadFileAndRunCommand
  - 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: invokeByDownloadFileAndRunCommand
  - Name: suspendProcess
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Suspend process
      zh-cn: 暂停伸缩组流程
    Properties:
      Service: ESS
      API: SuspendProcesses
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        Process: '{{ enterProcess }}'
  - Name: invokeByDownloadFileAndRunCommand
    Action: ACS::ESS::DownloadFileAndRunCommand
    Description:
      en: Upgrade by downloading files to the instance and executing commands
      zh-cn: 通过下载文件到实例并执行命令的方式进行升级
    Properties:
      instanceId: '{{ ACS::TaskLoopItem }}'
      sourceType: 'https'
      sourcePath: '{{ invokeSourcePath }}'
      destinationDir: '{{ invokeDestinationDir }}'
      commandContent: '{{ invokeScript }}'
      whetherSaveToFile: '{{ whetherSaveToFile }}'
    Loop:
      Items: '{{ getInstance.instanceIds }}'
      BatchPauseOption: '{{ batchPauseOption }}'
      Concurrency:
        'Fn::CalculateBatch':
          - '{{ batchNumber }}'
          - '{{ getInstance.instanceIds }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: runCommandOutput
  - Name: tagInstance
    Action: ACS::ExecuteApi
    Description:
      en: Creates and attaches tag to ECS instance
      zh-cn: 创建并挂载标签到ECS实例
    Properties:
      Service: ECS
      API: TagResources
      Parameters:
        ResourceIds:
          - '{{ 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'
  - 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: rollbackByDownloadFileAndRunCommand
    Action: ACS::ESS::DownloadFileAndRunCommand
    Description:
      en: Rollback by downloading files to the instance and executing commands
      zh-cn: 通过下载文件到实例并执行命令的方式进行回滚
    Properties:
      instanceId: '{{ ACS::TaskLoopItem }}'
      sourceType: 'https'
      sourcePath: '{{ rollbackSourcePath }}'
      destinationDir: '{{ rollbackDestinationDir }}'
      commandContent: '{{ rollbackScript }}'
      whetherSaveToFile: '{{ whetherSaveToFile }}'
    Loop:
      Items: '{{ getExistInstanceIds.instanceIds }}'
      BatchPauseOption: '{{ batchPauseOption }}'
      Concurrency:
        'Fn::CalculateBatch':
          - '{{ batchNumber }}'
          - '{{ getExistInstanceIds.instanceIds }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: runCommandOutput
  - Name: modifyLifecycleHookOfRollback
    When:
      Fn::Equals:
        - '{{ getLifecycleHook.totalCount }}'
        - 1
    Action: ACS::ExecuteAPI
    Description:
      en: Modify lifecycle hook of rollback
      zh-cn: 修改用于回滚的生命周期挂钩
    Properties:
      Service: ESS
      API: ModifyLifecycleHook
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        NotificationMetadata: '{"sourcePath":"{{ rollbackSourcePath }}","destinationDir":"{{ rollbackDestinationDir }}","commandContent":"{{ rollbackScript }}","timeout":"600","regionId":"${regionId}","instanceIds":"${instanceIds}","lifecycleHookId":"${lifecycleHookId}","lifecycleActionToken":"${lifecycleActionToken}","rateControl":"{\"Mode\":\"Concurrency\",\"MaxErrors\":0,\"Concurrency\":10}","OOSAssumeRole":"OOSServiceRole"}'
        LifecycleTransition: SCALE_OUT
        LifecycleHookName: ACS-ESS-LifeCycleDownloadFileAndRunCommand
  - 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 }}'
        - '{{ invokeByDownloadFileAndRunCommand.commandOutputs }}'
        - '{{ rollbackByDownloadFileAndRunCommand.commandOutputs }}'