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。 |
|
Description | String | 否 | 否 | 指令碼描述。 | 支援全字元集,長度不超過512個字元。 |
Timeout | Integer | 否 | 是 | 執行指令碼的逾時時間。 | 單位:秒。 預設值:60。 當因為進程原因、缺失模組、缺失雲助手用戶端等原因無法運行指令碼時,會出現逾時現象。逾時後,會強制終止指令碼進程。 |
ContentEncoding | String | 否 | 是 | 指令碼內容(CommandContent)的編碼方式。 | 取值:
說明 當您錯填值時,會被當作Base64處理。 |
Name | String | 否 | 否 | 指令碼名稱。 | 支援全字元集,長度不超過128個字元。 |
WorkingDir | String | 否 | 是 | 指令碼在ECS執行個體中的運行目錄。 | 預設值:
|
CommandContent | String | 是 | 是 | 指令碼的明文內容或者Base64編碼後的內容。 |
|
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。