ALIYUN::ECS::RunCommand类型用于在一台或多台ECS实例中执行一段Shell、PowerShell或者Bat类型的脚本。
语法
{
"Type": "ALIYUN::ECS::RunCommand",
"Properties": {
"Parameters": Map,
"Description": String,
"Timeout": Integer,
"ContentEncoding": String,
"Name": String,
"WorkingDir": String,
"CommandContent": String,
"Type": String,
"Frequency": String,
"EnableParameter": Boolean,
"InstanceIds": List,
"KeepCommand": Boolean,
"Sync": Boolean,
"Tags": List,
"RunAgainOn": List,
"WindowsPasswordName": String,
"RepeatMode": String,
"ResourceGroupId": String,
"ContainerName": String,
"ContainerId": String,
"Username": String
}
}
属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Parameters | Map | 否 | 是 | 脚本中包含自定义参数时,执行脚本时指定的自定义参数的键值对。例如:脚本内容为echo {{name}},则可以通过Parameters参数指定键值对{"name":"Jack"}。自定义参数将自动替换变量值name,得到一条新的脚本,实际执行的是echo Jack。 | 最多支持10个自定义参数。 键不允许为空字符串,最多支持64个字符。 值允许为空字符串。 自定义参数与原始脚本内容在Base64编码后,综合长度不能超过16KB。 设置的自定义参数名集合必须为创建脚本时定义的参数集的子集。 对于未指定的参数,您可以使用空字符串代替。 |
Description | String | 否 | 否 | 脚本描述。 | 支持全字符集,长度不超过512个字符。 |
Timeout | Integer | 否 | 是 | 执行脚本的超时时间。 | 单位:秒。 默认值:60。 当因为进程原因、缺失模块、缺失云助手客户端等原因无法运行脚本时,会出现超时现象。超时后,会强制终止脚本进程。 |
ContentEncoding | String | 否 | 是 | 脚本内容(CommandContent)的编码方式。 | 取值:
说明 当您错填该值,则会被当作Base64处理。 |
Name | String | 否 | 否 | 脚本名称。 | 支持全字符集,长度不超过128个字符。 |
WorkingDir | String | 否 | 是 | 脚本在ECS实例中的运行目录。 | 默认值:
|
CommandContent | String | 是 | 是 | 脚本的明文内容或者Base64编码后的内容。 | 脚本内容Base64编码后不能超过16KB。 EnableParameter取值为true时,可以在脚本内容中启用自定义参数功能:自定义参数写作两个大括号({{}})中,在两个大括号({{}})内参数名前后的空格以及换行符会被忽略。 自定义参数个数不能超过20个。自定义参数名可包含英文字母、数字、短划线(-)和下划线(_)。 单个自定义参数名不能超过64个字符。 |
Type | String | 是 | 是 | 运维脚本的语言类型。 | 取值:
|
Frequency | String | 否 | 否 | 周期任务的执行周期。 | 无 |
EnableParameter | Boolean | 否 | 是 | 脚本中是否包含自定义参数。 | 取值:
|
InstanceIds | List | 是 | 是 | ECS实例ID列表。 | 最多指定20台ECS实例,且ECS实例的状态必须是运行中。 |
KeepCommand | Boolean | 否 | 否 | 执行完该脚本后是否保留。 | 取值:
|
Sync | Boolean | 否 | 否 | 是否同步调用。 | 取值:
|
Tags | List | 否 | 是 | 标签。 | 最多支持添加20个标签。更多信息,请参见Tags属性。 |
RunAgainOn | List | 否 | 否 | 再次执行命令的阶段。 | 无 |
WindowsPasswordName | String | 否 | 否 | 在Windows实例中执行命令的用户的密码名称。 | 长度不得超过 255 个字符。 当您希望以非默认用户(System)在 Windows 实例中执行命令时,需要同时传入 说明 当您使用 Linux 实例的 root 用户或 Windows 实例的 System 用户执行命令时,不需要传递该参数。 |
RepeatMode | String | 否 | 否 | 设置命令执行的方式。 | 取值范围:
默认值:
注意事项:
|
ResourceGroupId | String | 否 | 否 | 命令执行的资源组ID。 | 当指定该参数时:
|
ContainerName | String | 否 | 否 | 容器名称。 | 注意事项:
|
ContainerId | String | 否 | 否 | 容器ID。 | 仅支持64位16进制字符串,允许存在 注意事项:
|
Username | String | 否 | 是 | 在ECS实例中执行命令的用户名称。 | 长度不得超过255个字符。
您也可以指定实例中已存在的其他用户执行命令,以普通用户执行云助手命令更加安全。更多信息,请参见设置普通用户执行云助手命令。 |
Tags语法
"Tags": [
{
"Key": String,
"Value": String
}
]
Tags属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
Key | String | 是 | 否 | 标签键。 | 长度为1~128个字符,不能以 |
Value | String | 否 | 否 | 标签值。 | 长度为0~128个字符,不能以 |
返回值
Fn::GetAtt
CommandId:脚本ID。
InvokeId:脚本执行ID。
InvokeInstances:执行命令的实例列表。
InvokeResults:执行命令的结果。
示例
YAML
格式
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InstanceId:
Type: String
AssociationProperty: ALIYUN::ECS::Instance::InstanceId
Resources:
RunCommand:
Type: ALIYUN::ECS::RunCommand
Properties:
CommandContent:
Fn::Sub:
|
#!/bin/sh
yum install -y tree
Type: RunShellScript
InstanceIds:
- Ref: InstanceId
Outputs:
CommandId:
Description: The id of command created.
Value:
Fn::GetAtt:
- RunCommand
- CommandId
InvokeId:
Description: The invoke id of command.
Value:
Fn::GetAtt:
- RunCommand
- InvokeId
JSON
格式
{
"ROSTemplateFormatVersion": "2015-09-01",
"Parameters": {
"InstanceId": {
"Type": "String",
"AssociationProperty": "ALIYUN::ECS::Instance::InstanceId"
}
},
"Resources": {
"RunCommand": {
"Type": "ALIYUN::ECS::RunCommand",
"Properties": {
"CommandContent": {
"Fn::Sub":
"#!/bin/sh\nyum install -y tree\n"
},
"Type": "RunShellScript",
"InstanceIds": [
{
"Ref": "InstanceId"
}
]
}
}
},
"Outputs": {
"CommandId": {
"Description": "The id of command created.",
"Value": {
"Fn::GetAtt": [
"RunCommand",
"CommandId"
]
}
},
"InvokeId": {
"Description": "The invoke id of command.",
"Value": {
"Fn::GetAtt": [
"RunCommand",
"InvokeId"
]
}
}
}
}
UpdatePolicy简介
当我们使用ALIYUN::ECS::RunCommand为一组ECS实例执行脚本后,需要对已执行脚本的这组ECS进行配置批量更新时,可以使用UpdatePolicy属性去完成对ECS::RunCommand配置更新策略的控制。UpdatePolicy属性语法参考:
UpdatePolicy语法
"UpdatePolicy": {
"RollingUpdate": Map
}
UpdatePolicy属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
RollingUpdate | Map | 否 | 是 | 控制更新已有的Command的策略。 |
RollingUpdate语法
"RollingUpdate": {
"MaxBatchSize": Integer,
"PauseTime": Integer
}
RollingUpdate属性
属性名称 | 类型 | 必须 | 允许更新 | 描述 | 约束 |
MaxBatchSize | Integer | 是 | 是 | 每个批次执行命令的ECS台数。 | 取值范围:1~1000。 |
PauseTime | Integer | 否 | 是 | 各个批次执行命令之间暂停的时间(单位:秒)默认为0。 | 取值范围:0~3600。 |
示例
使用以下模板为ECS实例执行一组相同配置的Command(包含3台ECS)。
{
"ROSTemplateFormatVersion": "2015-09-01",
"Resources": {
"RunCommand": {
"Type": "ALIYUN::ECS::RunCommand",
"Properties": {
"CommandContent": "xxx",
"Type": "RunShellScript",
"Sync": true,
"InstanceIds": [
"i-2zxxxx",
"i-2zxxxx",
"i-2zxxxx",
]
}
}
}
}
创建资源栈成功后对已执行Command的ECS实例进行配置更新,更新时可以配置UpdatePolicy属性。
{
"ROSTemplateFormatVersion": "2015-09-01",
"Resources": {
"RunCommand": {
"Type": "ALIYUN::ECS::RunCommand",
"Properties": {
"CommandContent": "xxx",
"Type": "RunShellScript",
"Sync": true,
"InstanceIds": [
"i-2zxxxx",
"i-2zxxxx",
"i-2zxxxx",
"i-2zxxxx",
"i-2zxxxx",
]
},
"UpdatePolicy": {
"RollingUpdate": {
"MaxBatchSize": 2
"PauseTime": 10
}
}
}
}
}
指定MaxBatchSize=2。 更新前InstanceIds内包含3台ECS实例,更新后InstanceIds内包含5台ECS实例,在更新资源栈的过程中,原有的3台机器,会分2个批次(2/1)进行变配更新(原有的InstanceIds信息会按照传入的顺序划分批次)。新增的2台机器会被一次性统一执行Command。