本文提供了在阿里雲ECS使用Packer建立自訂鏡像的DevOps(開發營運一體化)常用配置,適用於使用Packer建立ECS自訂鏡像的情境。

鏡像標籤

  • 欄位名稱:tags{"key":"value"}。
  • 適用情境:當您的自訂鏡像達到一定的數量時,適當的標記鏡像有利於鏡像管理和檢索。例如記錄鏡像版本號碼和鏡像包含的應用類型等。阿里雲Builder提供了tags參數,支援為鏡像綁定標籤。產生的鏡像自動包含阿里雲ECS標籤,更多有關標籤的詳情,請參見標籤概述
  • 配置作用:ECS管理主控台鏡像列表頁面和API DescribeImages均支援查詢鏡像時返回標籤以及根據標籤過濾鏡像。為鏡像綁定標籤能夠和Terraform一起為企業級標準化DevOps流程提供支援。本文推薦Alibaba Cloud DevOps tutorials系列教程,其中涉及Terraform和Packer的內容參見Continuous Delivery一節。
  • 配置樣本:以下設定檔為最終產生的鏡像和對應的快照綁定version=v1.0.0app=web兩個標籤。
    {
      "variables": {
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
      "builders": [{
        "type":"alicloud-ecs",
        "access_key":"{{user `access_key`}}",
        "secret_key":"{{user `secret_key`}}",
        "region":"cn-beijing",
        "image_name":"packer_basic",
        "source_image":"centos_7_03_64_20G_alibase_20170818.vhd",
        "ssh_username":"root",
        "instance_type":"ecs.t5-lc1m1.small",
        "internet_charge_type":"PayByTraffic",
        "io_optimized":"true",
        "tags": {
          "version": "v1.0.0",
          "app": "web"
        }
      }]
    }

只包含系統硬碟快照

  • 欄位名稱:image_ignore_data_disks,資料類型為Boolean。
  • 適用情境:預設情況下Packer直接從ECS執行個體建立鏡像,從執行個體建立鏡像時如果包含資料盤,則鏡像會同時包含資料盤快照。建立包含資料盤的執行個體通常有兩種方式:
    • 方式一:通過image_disk_mappings設定資料盤相關參數。更多詳情,請參見Packer文檔Alicloud Image Builder
    • 方式二:選擇預設帶有資料盤的執行個體規格。該類執行個體規格包含的資料盤大多為本地碟,如ecs.d1ne.2xlarge。本地碟當前並不支援建立快照,所以無法直接通過此類執行個體建立鏡像。
  • 配置作用:如果您需要選擇預設帶有資料盤的執行個體規格,但實際上資料盤部分並不是必須的,可以在設定檔中加上"image_ignore_data_disks": "true"實現只基於系統硬碟建立鏡像。

設定快照逾時時間

  • 欄位名稱:wait_snapshot_ready_timeout,資料類型為Interger,預設值為3600(秒s)。
  • 適用情境:建立鏡像依賴於快照,快照的建立時間依賴於磁碟大小。當磁碟較大時,建立快照所需時間會相應增加。
  • 配置作用:當磁碟太大導致逾時錯誤時,可以通過wait_snapshot_ready_timeout調大逾時時間。

通過私網IP串連執行個體

  • 欄位名稱:ssh_private_ip,資料類型為Boolean。
  • 適用情境:預設情況下,Packer建立EIP並綁定執行個體,再通過EIP對應的公網IP串連執行個體安裝軟體或執行命令。如果您能通過私網IP直接連接執行個體,可以免除公網IP。
  • 配置作用:通過設定"ssh_private_ip": "true",Packer不會分配EIP或者公網IP,而是通過私網IP串連執行個體。

設定停止執行個體選項

  • 欄位名稱:disable_stop_instance,資料類型為Boolean。
  • 適用情境:預設情況下,Packer執行完provisioners後,會先停止執行個體再建立鏡像。某些特殊情境,如在Windows執行個體中運行Sysprep,需要執行個體處於運行中狀態。Sysprep的使用情境樣本可參見修改Windows執行個體SID以搭建域環境
  • 配置作用:通過設定"disable_stop_instance": "true",Packer不會主動停止執行個體,而是假設配置(provisioners)中提供的命令會自行停止執行個體。

通過UserData啟用WinRM

  • 欄位名稱:user_data_file。
  • 適用情境:出於安全考慮,Windows鏡像預設關閉了WinRM(Windows Remote Management)。但串連Windows執行個體及之後在執行個體內部執行命令都依賴於WinRM。在執行個體建立時,您可以通過UserData啟用WinRM。
  • 配置作用:通過配置"user_data_file":"examples.ps1"指定UserData檔案路徑。
  • 配置樣本:本樣本假定UserData檔案在給定的相對路徑examples/alicloud/basic/winrm_enable_userdata.ps1下。
    {
      "variables": {
        "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
        "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
      },
      "builders": [{
        "type":"alicloud-ecs",
        "access_key":"{{user `access_key`}}",
        "secret_key":"{{user `secret_key`}}",
        "region":"cn-beijing",
        "image_name":"packer_test",
        "source_image":"win2008r2_64_ent_sp1_zh-cn_40G_alibase_20181220.vhd",
        "instance_type":"ecs.n1.tiny",
        "io_optimized":"true",
        "internet_charge_type":"PayByTraffic",
        "image_force_delete":"true",
        "communicator": "winrm",
        "winrm_port": 5985,
        "winrm_username": "Administrator",
        "winrm_password": "Test1234",
        "user_data_file": "examples/alicloud/basic/winrm_enable_userdata.ps1"
      }],
      "provisioners": [{
        "type": "powershell",
        "inline": ["dir c:\\"]
      }]
    }
    说明
    • 樣本中與WinRM相關的參數"communicator": "winrm""winrm_port": 5985"winrm_username": "Administrator""winrm_password": "Test1234"分別表示通過WinRM串連執行個體、通訊連接埠為5985、串連時使用Administrator賬戶、密碼採用Test1234。
    • image_force_delete表示如果存在同名鏡像,則先刪除已有鏡像。

基於本地ISO檔案製作鏡像

  • 欄位名稱:builders{"type":"qemu"},post-processors{"type":"alicloud-import"}。
  • 適用情境:如果線下ISO檔案環境為其他虛擬化環境,也可以通過Packer完成操作。
  • 配置樣本:如果線下環境使用的是qemu,可以參見使用Packer建立並匯入本地鏡像。文檔中包含兩個重要的部分:
    1. 您需要使用本地虛擬化環境或軟體對應的Builder,如Qemu Builder
    2. 請通過定義Alicloud Import Post-Processor將產生的本地鏡像檔案匯入阿里雲ECS。

如果您採用匯入自訂鏡像流程,請在本地安裝虛擬化環境,將ISO檔案製作成阿里雲支援的鏡像檔案格式後再匯入,如QCOW2、VHD和RAW。流程請參見匯入鏡像必讀

相關連結

更多參數和範例,請參見Packer官方文檔Alicloud Image BuilderExamples