本文提供了在阿里雲ECS使用Packer建立自訂鏡像的DevOps(開發營運一體化)常用配置,適用於使用Packer建立ECS自訂鏡像的情境。
鏡像標籤
欄位名稱:tags{"key":"value"}。
適用情境:當您的自訂鏡像達到一定的數量時,適當的標記鏡像有利於鏡像管理和檢索。例如記錄鏡像版本號碼和鏡像包含的應用類型等。阿里雲Builder提供了tags參數,支援為鏡像綁定標籤。產生的鏡像自動包含阿里雲ECS標籤,更多有關標籤的詳情,請參見標籤概述。
配置作用:ECS管理主控台鏡像列表頁面和API DescribeImages均支援查詢鏡像時返回標籤以及根據標籤過濾鏡像。為鏡像綁定標籤能夠和Terraform一起為企業級標準化DevOps流程提供支援。
配置樣本:以下設定檔為最終產生的鏡像和對應的快照綁定
version=v1.0.0
和app=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,資料類型為Integer,預設值為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串連執行個體。"winrm_port": 5985
表示通訊連接埠為5985。"winrm_username": "Administrator"
表示串連時使用Administrator賬戶。"winrm_password": "Test1234"
表示密碼採用Test1234。
image_force_delete
表示如果存在同名鏡像,則先刪除已有鏡像。
基於本地ISO檔案製作鏡像
欄位名稱:builders{"type":"qemu"},post-processors{"type":"alicloud-import"}。
適用情境:如果線下ISO檔案環境為其他虛擬化環境,也可以通過Packer完成操作。
配置樣本:如果線下環境使用的是qemu,請參見使用Packer建立並匯入本地鏡像。文檔中包含兩個重要的部分:
您需要使用本地虛擬化環境或軟體對應的Builder,如Qemu Builder。
請通過定義Alicloud Import Post-Processor將產生的本地鏡像檔案匯入阿里雲ECS。
如果您採用匯入自訂鏡像流程,請在本地安裝虛擬化環境,將ISO檔案製作成阿里雲支援的鏡像檔案格式後再匯入,如QCOW2、VHD和RAW。匯入流程請參見匯入鏡像必讀。
相關連結
更多參數和範例,請參見Packer官方文檔Alicloud Image Builder和Examples。