すべてのプロダクト
Search
ドキュメントセンター

CloudOps Orchestration Service:ACS-ESS-RollingUpdateByDownloadOSSFileAndRunCommand

最終更新日:Jan 17, 2025

テンプレート名

ACS-ESS-RollingUpdateByDownloadOSSFileAndRunCommand

今すぐ実行

テンプレートの説明

Object Storage Service (OSS) オブジェクトをダウンロードし、コマンドを実行して、スケーリンググループ内の Elastic Compute Service (ECS) インスタンスでローリングアップデートを実行します。

テンプレートタイプ

自動化

所有者

Alibaba Cloud

入力パラメーター

パラメーター

説明

タイプ

必須

デフォルト値

制限

invokeType

操作タイプ。

文字列

はい

scalingGroupId

スケーリンググループ ID。

文字列

はい

invokeBucketName

ローリングアップデートを実行するために使用されるオブジェクトを格納するバケットの名前。

文字列

はい

invokeObjectName

ローリングアップデートを実行するために使用されるオブジェクトの名前。

文字列

はい

invokeDestinationDir

ローリングアップデートを実行するために使用されるオブジェクトがダウンロードされるディレクトリ。

文字列

はい

rollbackBucketName

ロールバックを実行するために使用されるオブジェクトを格納するバケットの名前。

文字列

はい

rollbackObjectName

ロールバックを実行するために使用されるオブジェクトの名前。

文字列

はい

rollbackDestinationDir

ロールバックを実行するために使用されるオブジェクトがダウンロードされるディレクトリ。

文字列

はい

enterProcess

実行前に一時停止されるスケーリングプロセス。

リスト

いいえ

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

exitProcess

実行後に再開されるスケーリングプロセス。

リスト

いいえ

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

invokeScript

ローリングアップデートを実行するために使用されるスクリプト。

文字列

いいえ

""

rollbackScript

ロールバックを実行するために使用されるスクリプト。

文字列

いいえ

""

sourceExecutionId

ロールバックされる CloudOps Orchestration Service (OOS) 実行の ID。

文字列

いいえ

""

whetherSaveToFile

オブジェクトの内容を特定のファイルに保存するかどうかを指定します。

ブール値

いいえ

True

URLExpirationTime

OSS オブジェクトのダウンロード URL の有効期間。

数値

いいえ

6000

OSSRegion

OSS バケットが存在するリージョン。

文字列

いいえ

{{ ACS::RegionId }}

batchPauseOption

一時停止ポリシー。

文字列

いいえ

Automatic

batchNumber

バッチ数。

数値

いいえ

5

OOSAssumeRole

OOS によってアシュームされる Resource Access Management (RAM) ロール。

文字列

いいえ

""

出力パラメーター

パラメーター

説明

タイプ

commandOutputs

リスト

テンプレートを実行するために必要なポリシー

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ess:CreateLifecycleHook",
                "ess:DescribeLifecycleHooks",
                "ess:DescribeScalingInstances",
                "ess:ModifyLifecycleHook",
                "ess:ResumeProcesses",
                "ess:SuspendProcesses"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "oss:GetObject"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "ecs:DescribeInstances",
                "ecs:DescribeInvocationResults",
                "ecs:DescribeInvocations",
                "ecs:RunCommand",
                "ecs:TagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "oos:ListExecutions"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

参照

ACS-ESS-RollingUpdateByDownloadOSSFileAndRunCommand

テンプレートコンテンツ

FormatVersion: OOS-2019-06-01
Description:
  en: Rolling update ECS instances that in scaling group by download OOS file and run command
  zh-cn: 通过下载OSS文件并执行命令的方式滚动更新伸缩组内的ECS实例
  name-en: ACS-ESS-RollingUpdateByDownloadOSSFileAndRunCommand
  name-zh-cn: 通过下载OSS文件并执行命令的方式滚动更新伸缩组内的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
  invokeBucketName:
    Type: String
    Label:
      en: InvokeBucketName
      zh-cn: 用于升级的Bucket名称
  invokeObjectName:
    Label:
      en: InvokeObjectName
      zh-cn: 用于升级的Object名称
    Type: String
  invokeDestinationDir:
    Label:
      en: InvokeDestinationDir
      zh-cn: 用于升级的文件存储目录
    Type: String
  invokeScript:
    Label:
      en: InvokeScript
      zh-cn: 用于升级的脚本
    Type: String
    AssociationProperty: Code
    Default: ''
  rollbackBucketName:
    Type: String
    Label:
      en: RollbackBucketName
      zh-cn: 用于回滚的Bucket名称
  rollbackObjectName:
    Label:
      en: RollbackObjectName
      zh-cn: 用于回滚的Object名称
    Type: String
  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
  URLExpirationTime:
    Label:
      en: OOSFileDownloadURLExpirationTime
      zh-cn: OSS ファイルダウンロードリンクの有効期限
    Type: Number
    Default: 6000
  OSSRegion:
    Label:
      en: OSSRegion
      zh-cn: OSS 所在地域
    Description:
      en: When the region where the OSS is located is different from the current region, the OSS file will be downloaded through the public network, and the ECS in the scaling group must be able to access the public network.
      zh-cn: OSS 所在地域和当前地域不同时会通过公网下载 OSS 文件,需要伸縮組内的 ECS 能訪問公網。
    Type: String
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  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-LifeCycleDownloadOSSFileAndRunCommand
    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: 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: invokeByDownloadOSSFileAndRunCommand
  - Name: suspendProcess
    Action: 'ACS::ExecuteAPI'
    Description:
      en: Suspend process
      zh-cn: 停止伸縮組流程
    Properties:
      Service: ESS
      API: SuspendProcesses
      Parameters:
        ScalingGroupId: '{{ scalingGroupId }}'
        Process: '{{ enterProcess }}'
  - Name: invokeByDownloadOSSFileAndRunCommand
    Action: ACS::ECS::DownloadOSSFileAndRunCommand
    Description:
      en: Upgrade by downloading files to the instance and executing commands
      zh-cn: 通过下载文件到インスタンス并実行命令的方式進行升級
    Properties:
      instanceId: '{{ ACS::TaskLoopItem }}'
      bucketName: '{{ invokeBucketName }}'
      objectName: '{{ invokeObjectName }}'
      URLExpirationTime: '{{ URLExpirationTime }}'
      OSSRegion: '{{ OSSRegion }}'
      commandContent: '{{ invokeScript }}'
      destinationDir: '{{ invokeDestinationDir }}'
      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: 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: '{"bucketName":"{{ invokeBucketName }}","objectName":"{{ invokeObjectName }}","URLExpirationTime":"{{ URLExpirationTime }}","OSSRegion":"{{ OSSRegion }}","destinationDir":"{{ invokeDestinationDir }}","OSSRegion":"{{ OSSRegion }}","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-LifeCycleDownloadOSSFileAndRunCommand
        NotificationArn: acs:oos:{{ ACS::RegionId }}:{{ACS::AccountId}}:template/ACS-ESS-LifeCycleDownloadOSSFileAndRunCommand
  - 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: '{"bucketName":"{{ invokeBucketName }}","objectName":"{{ invokeObjectName }}","URLExpirationTime":"{{ URLExpirationTime }}","OSSRegion":"{{ OSSRegion }}","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-LifeCycleDownloadOSSFileAndRunCommand
  - 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: rollbackByDownloadOSSFileAndRunCommand
    Action: ACS::ECS::DownloadOSSFileAndRunCommand
    Description:
      en: Rollback by downloading files to the instance and executing commands
      zh-cn: 通过下载文件到インスタンス并実行命令的方式進行回滾
    Properties:
      instanceId: '{{ ACS::TaskLoopItem }}'
      bucketName: '{{ rollbackBucketName }}'
      objectName: '{{ rollbackObjectName }}'
      URLExpirationTime: '{{ URLExpirationTime }}'
      OSSRegion: '{{ OSSRegion }}'
      commandContent: '{{ rollbackScript }}'
      destinationDir: '{{ rollbackDestinationDir }}'
      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: '{"bucketName":"{{ rollbackBucketName }}","objectName":"{{ rollbackObjectName }}","URLExpirationTime":"{{ URLExpirationTime }}","OSSRegion":"{{ OSSRegion }}","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-LifeCycleDownloadOSSFileAndRunCommand
  - 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 }}'
        - '{{ invokeByDownloadOSSFileAndRunCommand.commandOutputs }}'
        - '{{ rollbackByDownloadOSSFileAndRunCommand.commandOutputs }}'