全部產品
Search
文件中心

:ALIYUN::ECS::RunCommand

更新時間:Oct 24, 2024

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。

  • 設定的自訂參數名集合必須為建立指令碼時定義的參數集的子集。

  • 對於未指定的參數,您可以使用Null 字元串代替。

Description

String

指令碼描述。

支援全字元集,長度不超過512個字元。

Timeout

Integer

執行指令碼的逾時時間。

單位:秒。

預設值:60。

當因為進程原因、缺失模組、缺失雲助手用戶端等原因無法運行指令碼時,會出現逾時現象。逾時後,會強制終止指令碼進程。

ContentEncoding

String

指令碼內容(CommandContent)的編碼方式。

取值:

  • Base64(預設值):Base64編碼。

  • PlainText:不編碼,採用明文傳輸。

說明

當您錯填值時,會被當作Base64處理。

Name

String

指令碼名稱。

支援全字元集,長度不超過128個字元。

WorkingDir

String

指令碼在ECS執行個體中的運行目錄。

預設值:

  • Linux執行個體:/root

  • Windows執行個體:C:\Windows\System32\

CommandContent

String

指令碼的明文內容或者Base64編碼後的內容。

  • 指令碼內容Base64編碼後不能超過16KB。

  • EnableParameter取值為true時,可以在指令碼內容中啟用自訂參數功能:自訂參數寫作兩個大括弧({{}})中,在兩個大括弧({{}})內參數名前後的空格以及分行符號會被忽略。

  • 自訂參數個數不能超過10個。自訂參數名可包含英文字母、數字、短劃線(-)和底線(_)。 單個自訂參數名不能超過64個字元。

Type

String

營運指令碼的語言類型。

取值:

  • RunBatScript:適用於Windows執行個體的Bat指令碼。

  • RunPowerShellScript:適用於Windows執行個體的PowerShell指令碼。

  • RunShellScript:適用於Linux執行個體的Shell指令碼 。

Frequency

String

周期任務的執行循環。

EnableParameter

Boolean

指令碼中是否包含自訂參數。

取值:

  • true:包含自訂參數。

  • false(預設值):不包含自訂參數。

InstanceIds

List

ECS執行個體ID列表。

最多指定20台ECS執行個體,且ECS執行個體的狀態必須是運行中。

KeepCommand

Boolean

執行完該指令碼後是否保留。

取值:

  • true:保留。可以通過InvokeCommand再次執行。會佔用雲助手指令碼的保有量配額。

  • false(預設值):不保留,執行完成後自動刪除,不佔用雲助手指令碼的保有量配額。

Sync

Boolean

是否同步調用。

取值:

  • true:同步調用。

  • false:非同步呼叫。

Tags

List

標籤。

最多支援添加20個標籤。更多資訊,請參見Tags屬性

RunAgainOn

List

再次執行命令的階段。

WindowsPasswordName

String

在Windows執行個體中執行命令的使用者的密碼名稱。

長度不得超過 255 個字元。

當您希望以非預設使用者(System)在 Windows 執行個體中執行命令時,需要同時傳入Username和該參數。為降低密碼泄露的風險,需要將密碼明文託管在營運編排服務的參數倉庫中,此處僅傳入密碼的名稱。更多資訊,請參見加密參數以及設定普通使用者執行雲助手命令

說明

當您使用 Linux 執行個體的 root 使用者或 Windows 執行個體的 System 使用者執行命令時,不需要傳遞該參數。

RepeatMode

String

設定命令執行的方式。

取值範圍:

  • Once:立即執行命令。

  • Period:定時執行命令。當該參數取值為Period時,必須同時指定Frequency參數。

  • NextRebootOnly:當執行個體下一次啟動時,自動執行命令。

  • EveryReboot:執行個體每一次啟動都將自動執行命令。

預設值:

  • 當不指定Frequency參數時,預設值為Once

  • 當指定Frequency參數時,無論是否已設定了該參數值,都將按照Period處理。

注意事項:

  • 您可以調用StopInvocation停止待執行的命令或定時執行的命令。

  • 當該參數取值Period或者EveryReboot時,您可以調用DescribeInvocationResults,然後指定IncludeHistory=true查看命令定時執行的記錄。

ResourceGroupId

String

命令執行的資源群組ID。

當指定該參數時:

ContainerName

String

容器名稱。

注意事項:

  • 如果指定了該參數,雲助手將在執行個體的指定容器內執行指令碼。

  • 如果指定了該參數,僅支援在雲助手Agent版本不低於 2.2.3.344 的 Linux 執行個體內運行。

  • 如果指定了該參數,已指定的Username參數和WorkingDir參數將不會生效。僅支援通過容器預設使用者在容器的預設工作目錄下執行命令。詳細資料,請參見使用雲助手在容器內執行命令

  • 如果指定了該參數,在Linux容器中只支援執行Shell指令碼,不支援在指令碼開頭使用類似#!/usr/bin/python命令的形式指定指令碼內容的解譯器。詳細資料,請參見使用雲助手在容器內執行命令

ContainerId

String

容器ID。

僅支援64位16進位字串,允許存在docker://containerd://或者cri-o://首碼來明確指定的容器運行時。

注意事項:

  • 如果指定了該參數,雲助手將在執行個體的指定容器內執行指令碼。

  • 如果指定了該參數,僅支援在雲助手Agent版本不低於2.2.3.344的Linux執行個體內運行。

  • 如果指定了該參數,已指定的Username參數和WorkingDir參數將不會生效。僅支援通過容器預設使用者在容器的預設工作目錄下執行命令。詳細資料,請參見使用雲助手在容器內執行命令

  • 如果指定了該參數,在Linux容器中只支援執行Shell指令碼,不支援在指令碼開頭使用類似#!/usr/bin/python命令的形式指定指令碼內容的解譯器。詳細資料,請參見使用雲助手在容器內執行命令

Username

String

在ECS執行個體中執行命令的使用者名稱。

長度不得超過255個字元。

  • Linux系統的ECS執行個體,預設以root使用者執行命令。

  • Windows系統的ECS執行個體,預設以System使用者執行命令。

您也可以指定執行個體中已存在的其他使用者執行命令,以普通使用者執行雲助手命令更加安全。更多資訊,請參見設定普通使用者執行雲助手命令

Tags文法

"Tags": [
  {
    "Key": String,
    "Value": String
  }
]

Tags屬性

屬性名稱

類型

必須

允許更新

描述

約束

Key

String

標籤鍵。

長度為1~128個字元,不能以aliyunacs:開頭,不能包含http://或者https://

Value

String

標籤值。

長度為0~128個字元,不能以aliyunacs:開頭,不能包含http://或者https://

傳回值

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文法

"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。