テンプレート名
ACS-ESS-RollingUpdateByDownloadFileAndRunCommand
テンプレートの説明
ファイルをダウンロードし、コマンドを実行して、スケーリンググループ内の Elastic Compute Service (ECS) インスタンスでローリングアップデートを実行します。
テンプレートタイプ
自動
所有者
Alibaba Cloud
入力パラメーター
パラメーター | 説明 | タイプ | 必須 | デフォルト値 | 制限 |
invokeType | 操作タイプ。 | String | はい | ||
scalingGroupId | スケーリンググループ ID。 | String | はい | ||
invokeSourcePath | ローリングアップデートを実行するために使用するファイルの URL。 | String | はい | ||
invokeDestinationDir | ローリングアップデートを実行するために使用するファイルをダウンロードするディレクトリ。 | String | はい | ||
rollbackSourcePath | ロールバックを実行するために使用するファイルの URL。 | String | はい | ||
rollbackDestinationDir | ロールバックを実行するために使用するファイルをダウンロードするディレクトリ。 | String | はい | ||
enterProcess | 実行前に一時停止するスケーリングプロセス。 | List | いいえ | ['ScaleIn', 'ScaleOut', 'HealthCheck', 'AlarmNotification', 'ScheduledAction'] | |
exitProcess | 実行後に再開するスケーリングプロセス。 | List | いいえ | ['ScaleIn', 'ScaleOut', 'HealthCheck', 'AlarmNotification', 'ScheduledAction'] | |
invokeScript | ローリングアップデートを実行するために使用するスクリプト。 | String | いいえ | "" | |
rollbackScript | ロールバックを実行するために使用するスクリプト。 | String | いいえ | "" | |
sourceExecutionId | ロールバックする CloudOps Orchestration Service (OOS) 実行の ID。 | String | いいえ | "" | |
whetherSaveToFile | ファイルの内容を特定のファイルに保存するかどうかを指定します。 | Boolean | いいえ | True | |
batchPauseOption | 一時停止ポリシー。 | String | いいえ | Automatic | |
batchNumber | バッチ数。 | Number | いいえ | 5 | |
OOSAssumeRole | OOS によってアシュームされる Resource Access Management (RAM) ロール。 | String | いいえ | "" |
出力パラメーター
パラメーター | 説明 | タイプ |
commandOutputs | List |
テンプレートを実行するために必要なポリシー
{
"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"
}
]
}
参照
ACS-ESS-RollingUpdateByDownloadFileAndRunCommand
テンプレートコンテンツ
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 }}'