日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Packer創建自定義鏡像

Packer是一款輕量級的鏡像定義工具,能夠運行在常用的主流操作系統(例如Windows、Linux和macOS)上,并行高效地創建多平臺的虛擬機鏡像。本文為您介紹如何在ECS實例中安裝Packer、定義Packer模板并使用Packer創建自定義鏡像。

前提條件

已創建AccessKey,并獲取AccessKey ID和AccessKey Secret。具體操作,請參見創建AccessKey

說明
  • 由于AccessKey權限過大,為防止數據泄露,建議您先創建RAM用戶,再使用RAM用戶創建AccessKey。創建RAM用戶的具體操作,請參見創建RAM用戶

  • RAM用戶的AccessKey Secret只在創建時顯示,不支持查看,請妥善保管。

背景信息

Packer工具包含Builders(生成器)Provisioners(配置器)Post-Processors(后處理器)等組件,通過HCL(HashiCorp Configuration Language)或者JSON格式的模板文件較大地降低了創建自定義鏡像的難度,并且將創建鏡像的過程從人工的隨機過程變成可以配置管理代碼,從而減少了用戶應用上云的障礙。關于Packer的更多信息,請參見Packer官方文檔

操作步驟

步驟一:安裝Packer

  1. 遠程連接ECS實例。

    具體操作,請參見通過密碼認證登錄Linux實例

  2. 運行以下命令,進入/usr/local/bin目錄。

    cd /usr/local/bin
    說明

    /usr/local/bin目錄為環境變量目錄,您可以將Packer安裝到該目錄下或其他已添加到環境變量的目錄下。

  3. 運行以下命令,獲取Packer安裝包。

    您也可以訪問Packer下載頁面獲取與云服務器ECS操作系統及架構類型相對應的Packer安裝包,本操作以packer_1.8.5_linux_amd64.zip為例。

    wget https://releases.hashicorp.com/packer/1.8.5/packer_1.8.5_linux_amd64.zip
  4. 運行以下命令,解壓Packer安裝包。

    unzip packer_1.8.5_linux_amd64.zip
  5. 運行以下命令查詢Packer版本號,驗證Packer的安裝狀態。

    packer -v
    • 如果返回Packer版本號,表示您已正確安裝Packer。

    • 如果返回信息提示command not found,表示Packer未正確安裝,請檢查Packer所在目錄是否被添加到環境變量中。

步驟二:定義Packer模板

使用Packer創建自定義鏡像時,需要創建一個HCL格式或者JSON格式的模板文件。在該模板文件中,您需要指定創建自定義鏡像的生成器和配置器。更多信息,請參見Builders(生成器)Provisioners(配置器)。Packer具有多種配置器類型可用于配置自定義鏡像的內容生成方式,以下操作以常用的Shell配置器為例,定義Packer模板。

  1. 運行以下命令,導入您的AccessKey ID。

    export ALICLOUD_ACCESS_KEY=<AccessKey ID>

    請將<AccessKey ID>替換為您實際的AccessKey ID。查詢RAM用戶AccessKey ID的具體操作,請參見查看RAM用戶的AccessKey信息

  2. 運行以下命令,導入您的AccessKey Secret。

    export ALICLOUD_SECRET_KEY=<AccessKey Secret>

    請將<AccessKey Secret>替換為您實際的AccessKey Secret。RAM用戶的AccessKey Secret只在創建時顯示,不支持查詢。更多信息,請參見創建AccessKey

  3. 運行以下命令,創建名為alicloud的文件。

    說明

    您可以選擇以下任意一種文件格式來創建alicloud文件,如果創建HCL格式的文件,后續就需要按照HCL模板來執行。

    HCL文件

    vi alicloud.pkr.hcl

    JSON文件

    vi alicloud.json
  4. i鍵進入編輯模式,將以下示例Packer模板內容復制到alicloud文件并根據實際情況修改參數。

    HCL文件

    variable "access_key" {
      type    = string
      default = "${env("ALICLOUD_ACCESS_KEY")}"
    }
    
    variable "secret_key" {
      type    = string
      default = "${env("ALICLOUD_SECRET_KEY")}"
    }
    
    source "alicloud-ecs" "autogenerated_1" {
      associate_public_ip_address = true
      image_name                  = "packer_basic"
      instance_type               = "ecs.g6.large"
      internet_charge_type        = "PayByTraffic"
      io_optimized                = true
      region                      = "cn-qingdao"
      skip_image_validation       = true
      source_image                = "aliyun_3_x64_20G_alibase_20220907.vhd"
      ssh_username                = "root"
    }
    
    build {
      sources = ["source.alicloud-ecs.autogenerated_1"]
      provisioner "shell" {
        inline = ["sleep 30", "yum install redis.x86_64 -y"]
      }
    }

    JSON文件

    {
         "variables": {
           "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}",
           "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}"
         },
         "builders": [{
           "type":"alicloud-ecs",
           "region":"cn-qingdao",
           "image_name":"packer_basic",
           "source_image":"aliyun_3_x64_20G_alibase_20220907.vhd",
           "associate_public_ip_address":true,
           "ssh_username":"root",
           "instance_type":"ecs.g6.large",
           "internet_charge_type":"PayByTraffic",
           "io_optimized":true,
           "skip_image_validation":true
         }],
         "provisioners": [{
           "type": "shell",
           "inline": [
             "sleep 30",
             "yum install redis.x86_64 -y"
           ]
         }]
       }

    Packer模板支持自定義的參數說明如下。 更多參數說明,請參見Packer官網

    參數

    類型

    是否必填

    描述

    region

    string

    指定創建自定義鏡像時使用臨時資源的地域,例如cn-qingdao

    image_name

    string

    指定創建的自定義鏡像名稱,例如packer_basic

    instance_type

    string

    創建自定義鏡像時生成的臨時ECS實例的類型,例如ecs.g6.large規格。鏡像創建完成后,該實例會被自動釋放。

    說明

    使用Packer創建自定義鏡像過程中,會調用CreateInstance接口創建ECS實例,該實例包含了用于創建自定義鏡像的操作系統和預裝軟件等。該實例類型為按量付費,因此會產生部分費用。請確保您的阿里云賬戶余額(即現金余額)和代金券的總值不得小于100.00元人民幣。

    ssh_username

    string

    SSH連接實例的用戶名。

    internet_charge_type

    string

    創建自定義鏡像時臨時實例的公網帶寬付費類型。

    • PayByBandwidth:按固定帶寬計費。

    • PayByTraffic:按使用流量計費。

    source_image

    string

    二選一必填

    基礎鏡像的ID,該鏡像用于創建臨時ECS實例。可以從ECS控制臺公共鏡像列表獲得,也可以通過DescribeImages接口查詢獲得。

    重要

    配置時需注意所選鏡像類型需支持ECS實例的類型,例如ARM鏡像(鏡像ID攜帶_arm64_)需選用ARM類型的實例,否則無法成功創建自定義鏡像。

    image_family

    string

    鏡像族系名稱,通過設置該參數來獲取當前鏡像族系內最新可用鏡像來創建實例。

    說明

    鏡像族系的名稱長度為2~128 個字符。鏡像族系名稱不能以特殊字符、數字、http://、https://開頭,只可包含特殊字符中的"."、"_"、"-"和":"。

    target_image_family

    string

    指定創建的自定義鏡像的鏡像族系。

    說明

    鏡像族系的名稱長度為2~128 個字符。鏡像族系名稱不能以特殊字符、數字、http://、https://開頭,只可包含特殊字符中的"."、"_"、"-"和":"。

    ssh_private_ip

    boolean

    三選一必填

    是否通過私網SSH連接實例。默認值:false。

    • false:分配公網IP,通過公網連接實例。

    • true:不會分配EIP或公網IP,而是通過私網IP連接實例。

    說明

    運行Packer的機器需要和Packer創建的機器在同一個網絡環境,即同一個交換機下,才能使用私網連接。

    associate_public_ip_address

    boolean

    是否綁定公網IP。

    eip_id

    string

    彈性公網ID。

    skip_image_validation

    boolean

    是否跳過鏡像檢查。默認值:false。

    system_disk_mapping

    object

    系統盤配置。例如:

    "system_disk_mapping": {
     "disk_name": "sysdisk",
     "disk_category": "cloud_essd",
     "disk_size": 40
    }

    詳細配置信息,請參見云盤配置

    image_disk_mappings

    list

    鏡像數據盤配置。例如:

    "image_disk_mappings": {
     "disk_name": "datadisk",
     "disk_snapshot_id": "s-bp1xxxxxx",
     "disk_device": "dev/xvdb"
    }

    詳細配置信息,請參見云盤配置

    image_ignore_data_disks

    boolean

    創建的鏡像是否包含數據盤快照。默認值:false。

    • false:創建的鏡像會同時包含數據盤快照。

    • true:創建鏡像不需要包含數據盤,只基于系統盤創建鏡像。

    profile

    string

    執行Packer的配置文件,如果配置了該參數,會優先從該配置中獲取配置。

    ram_role_name

    string

    RAM角色名稱。獲取本機RAM角色的臨時AK,執行Packer模板。

    說明

    僅適用于綁定了RAM角色的ECS實例執行Packer的場景。

    ram_role_arn

    string

    RAM角色ARN。與ram_session_name組合使用,A賬號扮演B賬號創建鏡像。

    ram_session_name

    string

    RAM角色名稱。與ram_role_arn組合使用,A賬號扮演B賬號創建鏡像。

    ecs_ram_role_name

    string

    實例RAM角色名稱。您可以使用RAM的API接口ListRoles查詢您已創建的實例RAM角色。

    ssh_keypair_name

    string

    SSH連接的密鑰對名稱。

    ssh_private_key_file

    string

    SSH連接的密鑰對的私鑰文件路徑。

    custom_endpoint_ecs

    string

    用自定義創建ECS的Endpoint。

    security_group_id

    string

    創建臨時ECS實例所屬于的安全組ID。

    security_group_name

    string

    安全組名稱。若不指定安全組ID,則會按這個名稱創建一個安全組。

    vpc_id

    string

    VPC的ID。

    vpc_name

    string

    VPC名稱。若不指定vpc_id,則會按這個名稱創建一個VPC。

    vswitch_id

    string

    虛擬交換機ID。

    vswitch_name

    string

    交換機名稱。若不指定vswitch_id,則會按這個名稱創建一個交換機。

    user_data

    string

    實例自定義數據。必須填寫已采用Base64編碼后的數據,且在進行Base64編碼前自定義數據內容的大小不能超過32 KB。有關實例自定義數據的使用限制、格式以及運行頻率的詳細信息,請參見自定義實例初始化配置

    說明

    為保證傳輸過程中UserData的安全性,請避免直接以明文形式傳送敏感數據,如密碼和私鑰。若需傳送此類信息,建議先行加密處理,并采用Base64編碼方式,隨后在實例內部進行解密以確保信息安全。

    user_data_file

    string

    實例自定義數據文件,UserData文件形式。

    boot_mode

    string

    指定鏡像的啟動模式。取值范圍:BIOS,UEFI,UEFI-Preferred。

    wait_snapshot_ready_timeout

    Integer

    設置快照超時時間。默認值為3600(秒)。

    instance_name

    string

    創建臨時ECS實例的名稱,默認值為實例的InstanceId

    說明

    名稱長度為 2~128 個字符,支持Unicode中letter分類下的字符(其中包括英文、中文和數字等)。可以包含半角冒號(:)、下劃線(_)、半角句號(.)或者短劃線(-)。

    image_force_delete

    boolean

    是否刪除同名鏡像。默認值:false。

    • true:如果存在同名鏡像,則先刪除已有鏡像,然后創建目標鏡像。

    • false:如果存在同名鏡像,創建目標鏡像失敗。

    image_force_delete_snapshots

    boolean

    是否刪除同名鏡像關聯的快照。默認值:false。

    • true:如果存在同名鏡像,則先刪除已有鏡像和已有鏡像關聯的快照,然后創建目標鏡像。

    • false:如果存在同名鏡像,創建目標鏡像失敗。

    image_version

    string

    創建的自定義鏡像的版本。

    resource_group_id

    string

    資源組ID。

    force_stop_instance

    boolean

    強制停機。默認值:false。

    disable_stop_instance

    boolean

    默認情況下,Packer執行完provisioners后,會先停止實例再創建鏡像。某些特殊場景,如在Windows實例中運行Sysprep,需要實例處于運行狀態。默認值:false。

    run_tags

    object

    鏡像標簽。例如{"key":"value"}

    image_description

    string

    鏡像描述。

    image_share_account

    []string

    創建的自定義鏡像需要共享的用戶列表。例如["123456"]

    image_copy_regions

    []string

    創建的自定義鏡像需要復制的目標地域。例如["cn-beijing"]

    provisioners

    string

    創建自定義鏡像時使用的Packer配置器類型。主要包括:

    • File

    • PowerShell

    • Shell

    • Local Shell

    • Windows Shell

    更多信息,請參見Provisioners(配置器)

    云盤配置

    參數

    類型

    是否必填

    描述

    disk_name

    string

    云盤名稱。

    說明

    名稱長度為 2~128 個字符,支持Unicode中letter分類下的字符(其中包括英文、中文和數字等)。可以包含半角冒號(:)、下劃線(_)、半角句號(.)或者短劃線(-)。

    disk_category

    string

    云盤類型。取值范圍:

    • cloud_efficiency:高效云盤。

    • cloud_ssd:SSD 云盤。

    • cloud_essd:ESSD 云盤。

    • cloud:普通云盤。

    disk_size

    int

    云盤大小,單位為 GiB。該參數的取值必須大于或者等于 max{20, ImageSize}。默認值:max{40, ImageSize}。

    disk_description

    string

    云盤的描述,默認為空。

    說明

    長度為 2~256 個英文或中文字符,不能以http://https://開頭。

    disk_snapshot_id

    string

    創建數據盤使用的快照。

    disk_delete_with_instance

    boolean

    表示數據盤是否隨實例釋放。取值范圍:

    • true:數據盤隨實例釋放。

    • false:數據盤不隨實例釋放。

    默認值為 true。

    disk_device

    string

    數據盤的掛載點。

    disk_encrypted

    boolean

    數據盤是否加密。取值范圍:

    • true:加密。

    • false:不加密。

    默認值:false。

  5. Esc鍵,并輸入:wq后按下回車鍵,保存并退出。

步驟三:使用Packer創建自定義鏡像

使用Packer模板文件生成自定義鏡像的操作步驟如下:

  1. 運行以下命令,創建自定義鏡像。

    HCL文件

    packer build alicloud.pkr.hcl

    示例運行結果如下,以下示例表示將在華北1(青島)地域創建鏡像ID為m-m5e3f0gu2dxs4z0s****的自定義鏡像。

    alicloud-ecs.autogenerated_1: output will be in this color.
    
    ==> alicloud-ecs.autogenerated_1: Prevalidating source region and copied regions...
    ==> alicloud-ecs.autogenerated_1: Prevalidating image name...
        alicloud-ecs.autogenerated_1: Found image ID: aliyun_3_x64_20G_alibase_20220907.vhd
    ==> alicloud-ecs.autogenerated_1: Creating temporary keypair: packer_64bf3d40-2fe7-8251-276d-df59a0bb****
    ---------------------------
    ==> alicloud-ecs.autogenerated_1: Provisioning with shell script: /tmp/packer-shell3356722207
        alicloud-ecs.autogenerated_1: Last metadata expiration check: 0:00:11 ago on Tue 25 Jul 2023 11:12:18 AM CST.
    ---------------------------
        alicloud-ecs.autogenerated_1: Complete!
    ==> alicloud-ecs.autogenerated_1: Stopping instance: i-m5e87pt498pr8zv0****
    ==> alicloud-ecs.autogenerated_1: Waiting instance stopped: i-m5e87pt498pr8zv0****
    ==> alicloud-ecs.autogenerated_1: Creating image: packer_basic
        alicloud-ecs.autogenerated_1: Detach keypair packer_64bf3d40-2fe7-8251-276d-df59a0bb**** from instance: i-m5e87pt498pr8zv0****
    ==> alicloud-ecs.autogenerated_1: Cleaning up 'EIP'
    ==> alicloud-ecs.autogenerated_1: Cleaning up 'instance'
    ==> alicloud-ecs.autogenerated_1: Cleaning up 'security group'
    ==> alicloud-ecs.autogenerated_1: Cleaning up 'vSwitch'
    ==> alicloud-ecs.autogenerated_1: Cleaning up 'VPC'
    ==> alicloud-ecs.autogenerated_1: Deleting temporary keypair...
    Build 'alicloud-ecs.autogenerated_1' finished after 4 minutes 32 seconds.
    
    ==> Wait completed after 4 minutes 32 seconds
    
    ==> Builds finished. The artifacts of successful builds are:
    --> alicloud-ecs.autogenerated_1: Alicloud images were created:
    
    cn-qingdao: m-m5e3f0gu2dxs4z0s****

    JSON文件

    packer build alicloud.json

    示例運行結果如下,以下示例表示將在華北1(青島)地域創建鏡像ID為m-m5e3f0gu2dxs4z0s****的自定義鏡像。

    alicloud-ecs output will be in this color.
    
    ==> alicloud-ecs: Prevalidating image name...
        alicloud-ecs: Found image ID: aliyun_3_x64_20G_alibase_20220907.vhd
    ==> alicloud-ecs: Creating temporary keypair: packer_6345090e-ec1f-8ea0-348c-f85ba047****
    ==> alicloud-ecs: Creating vpc
    ---------------------------
    ==> alicloud-ecs: Provisioning with shell script: /tmp/packer-shell090019677
        alicloud-ecs: Last metadata expiration check: 0:00:15 ago on Tue 11 Oct 2022 02:12:51 PM CST.
    ---------------------------
        alicloud-ecs: Complete!
    ==> alicloud-ecs: Deleting image snapshots.
    ==> alicloud-ecs: Creating image: packer_basic
        alicloud-ecs: Detach keypair packer_6345090e-ec1f-8ea0-348c-f85ba047**** from instance: i-m5e7it5p4dpwetfr****
    ==> alicloud-ecs: Cleaning up 'EIP'
    ==> alicloud-ecs: Cleaning up 'instance'
    ==> alicloud-ecs: Cleaning up 'security group'
    ==> alicloud-ecs: Cleaning up 'vSwitch'
    ==> alicloud-ecs: Cleaning up 'VPC'
    ==> alicloud-ecs: Deleting temporary keypair...
    Build 'alicloud-ecs' finished.
    
    ==> Builds finished. The artifacts of successful builds are:
    --> alicloud-ecs: Alicloud images were created:
    
    cn-qingdao: m-m5e3f0gu2dxs4z0s****
  2. 查看已創建的自定義鏡像。

    1. 登錄ECS管理控制臺

    2. 在左側導航欄,選擇實例與鏡像 > 鏡像

    3. 在頂部菜單欄左上角處,選擇alicloud文件中指定的地域,例如華北1(青島)。

    4. 自定義鏡像頁簽下,鏡像列表中查看生成的名稱為packer_basic的自定義鏡像。