全部產品
Search
文件中心

:建立和更新自訂鏡像

更新時間:Aug 15, 2024

如您正在使用自訂鏡像,出於安全考慮,需及時更新鏡像,例如安裝最新的作業系統補丁、升級中介軟體軟體、在鏡像中安裝最新的第三方軟體等。您可以使用OOS提供鏡像更新公用模板自動更新鏡像,降低營運成本。

解決方案

OOS專門為更新鏡像的情境提供了更新鏡像的公用模板,實現了一鍵自動化的鏡像更新服務。您只需選擇一個源鏡像(待更新的鏡像),補充更新鏡像所需的Shell命令(如果是Linux執行個體)等必要參數,然後點擊建立執行就可以一鍵產生新鏡像。使用OOS更新鏡像,您無需安裝任何額外工具,無需關心ECS的建立、登入、修改、釋放等步驟,無需設定環境變數和登入密鑰。您還可以自訂OOS模板,實現定時或者批量的自動化更新鏡像。

更新鏡像的其他方式及對比

構建方式

工具與依賴

優點

缺點

使用OOS建立和更新自訂鏡像

開通即可,無其他依賴

  • 官方推薦,安全可靠

  • 線上使用,無需安裝

  • 官方模板,無需編碼

  • 無需提供登入密鑰

  • 可自訂模板

  • 可視化執行過程

  • 可批量和定時操作

  • 使用快照建立自訂鏡像

  • 使用執行個體建立自訂鏡像

無其他依賴

ECS控制台操作,簡單易用

  • 執行個體和快照需要手動建立

  • 操作步驟繁瑣,容易出錯,效率低

使用Packer建立自訂鏡像

需要安裝Packer

開源,多雲的支援

  • 需要安裝和維護

  • 需要自己編寫指令碼

操作步驟

  1. 登入CloudOps Orchestration Service控制台。

  2. 選擇自動化任務 > 公用工作範本

  3. 選擇更新鏡像,單擊建立執行

  4. 單擊下一步:設定參數

  5. 按需設定以下參數。

    • 選擇源鏡像:指定您要更新的源鏡像。

    • 鏡像設定:定義更新後鏡像的名稱與標籤。

    • 配置中轉執行個體:設定臨時ECS執行個體的規格與配置。

    • 更新鏡像配置:確定更新方式、命令類型及命令指令碼。

    • 進階選項:OOS預設使用當前登入使用者的許可權執行動作;如果指定了RAM角色名稱,OOS扮演該RAM角色執行動作。

  • 單擊下一步:確認,單擊確認風險並執行

  • 自動化任務 > 任務執行管理中可查看剛剛建立的執行,若建立執行成功,且執行狀態處於運行中,則表示更新鏡像進行中中。

  • 當執行狀態轉換為成功時,則表示鏡像更新成功,可在執行詳情中查看新鏡像ID。

  • 如需更多瞭解鏡像更新過程,當建立執行成功後,您可單擊該執行的詳情,查看執行日誌,即時瞭解執行的進度和狀態。

附錄1:公用模板和背後邏輯

ACS-ECS-UpdateImage公用模板內容如下:

FormatVersion: OOS-2019-06-01
Description: Updates an existing ECS image via ECS Cloud Assistant then creates a
  ECS image.
Parameters:
  sourceImageId:
    Description: The image ID for the ECS instances, centos_6_10_64_20G_alibase_20190326.vhd,
      for example.
    Type: String
    AllowedPattern: '[A-Za-z0-9_\-\.]*'
    MinLength: 1
    MaxLength: 40
  instanceType:
    Description: The instance type for the ECS instances, ecs.g5.large, for example.
    Type: String
    AllowedPattern: ecs\.[A-Za-z0-9\.\-]*
    MinLength: 1
    MaxLength: 30
  securityGroupId:
    Description: The security group ID for the ECS instances, sg-xxxxxxxxxxxxxxxxxxxx,
      for example.
    Type: String
    AllowedPattern: sg-[A-Za-z0-9]*
    MinLength: 1
    MaxLength: 30
  vSwitchId:
    Description: The virtual switch ID for the ECS instances, vsw-xxxxxxxxxxxxxxxxxxxx,
      for example.
    Type: String
    AllowedPattern: vsw-[A-Za-z0-9]*
    MinLength: 1
    MaxLength: 30
  commandContent:
    Description: The content of command.
    Type: String
  commandType:
    Description: The type of command to run in ECS instance.
    Type: String
    AllowedValues:
    - RunBatScript
    - RunPowerShellScript
    - RunShellScript
    MinLength: 1
    MaxLength: 30
  targetImageName:
    Description: The name of image.
    Type: String
    AllowedPattern: '[A-Za-z0-9\-_]*'
    MinLength: 1
    MaxLength: 30
  OOSAssumeRole:
    Description: The RAM role to be assumed by OOS.
    Type: String
    Default: OOSServiceRole
RamRole: '{{ OOSAssumeRole }}'
Tasks:
- Name: checkNewImageName
  Action: ACS::CheckFor
  Description: Check image name is available.
  Properties:
    Service: ECS
    API: DescribeImages
    Parameters:
      ImageName: '{{ targetImageName }}'
    DesiredValues:
    - 0
    PropertySelector: TotalCount
- Name: runInstances
  Action: ACS::ECS::RunInstances
  Description: Create a ECS instance for the cloud assistant.
  Properties:
    imageId: '{{ sourceImageId }}'
    instanceType: '{{ instanceType }}'
    securityGroupId: '{{ securityGroupId }}'
    vSwitchId: '{{ vSwitchId }}'
  Outputs:
    instanceId:
      ValueSelector: instanceIds[0]
      Type: String
- Name: installCloudAssistant
  Action: ACS::ECS::InstallCloudAssistant
  Description: Install cloud assostant for ECS instance.
  OnError: deleteInstance
  Properties:
    instanceId: '{{ runInstances.instanceId }}'
- Name: runCommand
  Action: ACS::ECS::RunCommand
  Description: Run command on ECS instance.
  OnError: deleteInstance
  Properties:
    commandContent: '{{ commandContent }}'
    commandType: '{{ commandType }}'
    instanceId: '{{ runInstances.instanceId }}'
- Name: stopInstance
  Action: ACS::ECS::StopInstance
  Description: Stops the ECS instance by the instance ID.
  Properties:
    instanceId: '{{ runInstances.instanceId }}'
- Name: createImage
  Action: ACS::ECS::CreateImage
  Description: Create image with the specified image name and instance ID.
  OnError: deleteInstance
  Properties:
    imageName: '{{ targetImageName }}'
    instanceId: '{{ runInstances.instanceId }}'
  Outputs:
    imageId:
      ValueSelector: imageId
      Type: String
- Name: deleteInstance
  Action: ACS::ExecuteAPI
  Description: Deletes the ECS instance by the instance ID.
  Properties:
    Service: ECS
    API: DeleteInstance
    Risk: Normal
    Parameters:
      InstanceId: '{{ runInstances.instanceId }}'
      Force: true
Outputs:
  imageId:
    Type: String
    Value: '{{ createImage.imageId }}'        

該模板順序執行以下任務:

  1. 檢查您打算為新鏡像設定的名稱是否可用。

  2. 建立並運行一台臨時ECS執行個體。該執行個體會根據您輸入的參數進行建立,即執行個體將使用的鏡像是您待更新的源鏡像,執行個體屬性將是您參數中允許的執行個體屬性。

  3. 如果臨時ECS執行個體上沒有安裝雲助手用戶端,則需要進行安裝。

  4. 在臨時ECS執行個體上通過雲助手執行用來更新的命令,並等待執行成功,更新命令成功。

  5. 當臨時ECS執行個體執行更新命令成功後,停止臨時ECS執行個體。

  6. 當臨時ECS執行個體停止後,對該執行個體建立鏡像,並等待鏡像建立成功。

  7. 最後,刪除臨時ECS執行個體。