Todos os produtos
Search
Central de documentação

Elastic Compute Service:Create a custom image with Packer

Última atualização: Jul 03, 2026

Instale o Packer em uma instância ECS, defina um modelo HCL ou JSON e crie uma imagem personalizada para implantação em lote.

Pré-requisitos

Obtenha um par de AccessKey (AccessKey ID e AccessKey secret). Consulte Obter um par de AccessKey.

Nota
  • Os AccessKeys concedem permissões amplas. Por motivos de segurança, recomendamos criar um usuário RAM e utilizar o par de AccessKey desse usuário. Para mais informações, consulte Criar um usuário RAM.

  • O AccessKey secret de um usuário RAM é exibido apenas no momento da criação e não pode ser recuperado posteriormente. Armazene-o com segurança.

Contexto

O Packer utiliza Builders, Provisioners e Post-Processors para transformar modelos HCL ou JSON em imagens personalizadas, substituindo a criação manual de imagens pela configuração como código. Consulte a documentação do Packer para obter detalhes.

Procedimento

Etapa 1: Instalar o Packer

  1. Conecte-se a uma instância Linux.

  2. Acesse /usr/local/bin:

    cd /usr/local/bin
    Nota

    O diretório /usr/local/bin está no PATH do sistema. Também é possível instalar o Packer em qualquer outro diretório que já esteja no PATH.

  3. Baixe o pacote de instalação do Packer.

    Também é possível visitar a página Install Packer para baixar o pacote correspondente ao seu sistema operacional e arquitetura. Este exemplo utiliza packer_1.8.5_linux_amd64.zip.

    wget https://releases.hashicorp.com/packer/1.8.5/packer_1.8.5_linux_amd64.zip
  4. Descompacte o pacote:

    unzip packer_1.8.5_linux_amd64.zip
  5. Verifique a instalação.

    packer -v
    • Se um número de versão for retornado, o Packer está instalado.

    • Caso receba a mensagem command not found, a instalação do Packer não foi concluída corretamente. Certifique-se de que o diretório do Packer esteja no PATH do sistema.

Etapa 2: Definir um modelo do Packer

Crie um modelo HCL ou JSON que especifique os Builders e Provisioners. Este exemplo utiliza o provisioner Shell.

  1. Exporte seu AccessKey ID.

    export ALICLOUD_ACCESS_KEY=<AccessKey ID>

    Substitua <AccessKey ID> pelo seu AccessKey ID real. Consulte Visualizar as informações sobre pares de AccessKey de um usuário RAM.

  2. Exporte seu AccessKey secret.

    export ALICLOUD_SECRET_KEY=<AccessKey Secret>

    Substitua <AccessKey Secret> pelo seu AccessKey secret real. O AccessKey secret é exibido apenas no momento da criação e não pode ser recuperado posteriormente. Consulte Obter um par de AccessKey.

  3. Crie um arquivo chamado alicloud.

    Nota

    É possível usar qualquer um dos formatos para criar o arquivo alicloud. Se optar por criar um arquivo HCL, utilize os exemplos e comandos HCL nas etapas subsequentes.

    Arquivo HCL

    vi alicloud.pkr.hcl

    Arquivo JSON

    vi alicloud.json
  4. Pressione I para entrar no modo de inserção. Copie um dos modelos abaixo para o arquivo alicloud e modifique os parâmetros conforme necessário.

    Arquivo 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"]
      }
    }

    Arquivo 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"
           ]
         }]
       }

    A tabela a seguir descreve os parâmetros suportados. Consulte a documentação do Packer para obter a referência completa de parâmetros.

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    region

    string

    Sim

    Região da instância ECS temporária usada para criar a imagem personalizada. Exemplo: cn-qingdao.

    image_name

    string

    Sim

    Nome da imagem personalizada. Exemplo: packer_basic.

    instance_type

    string

    Sim

    Tipo da instância ECS temporária. Exemplo: ecs.g6.large. A instância temporária é liberada automaticamente após a criação da imagem.

    Nota

    O Packer chama a operação CreateInstance para criar uma instância ECS temporária no modelo pagamento conforme o uso, com o sistema operacional e software necessários. Essa instância gera custos.

    ssh_username

    string

    Sim

    Nome de usuário SSH para conexão à instância ECS temporária.

    internet_charge_type

    string

    Não

    Método de faturamento de rede da instância ECS temporária. Valores válidos:

    • PayByBandwidth: pagamento por largura de banda.

    • PayByTraffic: pagamento por tráfego.

    source_image

    string

    É necessário especificar um destes parâmetros.

    ID da imagem base para a instância ECS temporária. Obtenha o ID na lista de imagens públicas do console ECS ou chamando a operação DescribeImages.

    Importante

    O tipo de imagem selecionado deve ser compatível com o tipo de instância especificado. Por exemplo, uma imagem Arm (cujo ID contém _arm64_) deve ser usada com um tipo de instância baseada em Arm. Caso contrário, a compilação falhará.

    image_family

    string

    Nome da família de imagens. O Packer utiliza a imagem disponível mais recente dessa família para criar a instância.

    Nota

    O nome deve ter entre 2 e 128 caracteres. Não pode começar com dígito, caractere especial, http:// ou https://. Pode conter letras, dígitos, pontos (.), sublinhados (_), hifens (-) e dois-pontos (:).

    target_image_family

    string

    Não

    Família da imagem personalizada a ser criada.

    Nota

    O nome deve ter entre 2 e 128 caracteres. Não pode começar com dígito, caractere especial, http:// ou https://. Pode conter letras, dígitos, pontos (.), sublinhados (_), hifens (-) e dois-pontos (:).

    ssh_private_ip

    boolean

    É necessário especificar um destes parâmetros.

    Define se deve ser usada uma conexão SSH privada. Valor padrão: false. Valores válidos:

    • false: Um endereço IP público é atribuído para conexão via internet.

    • true: Nenhum EIP ou endereço IP público é atribuído. A conexão à instância ocorre pelo endereço IP privado.

    Nota

    Para conexões privadas, o host do Packer e a instância criada devem estar no mesmo vSwitch.

    associate_public_ip_address

    boolean

    Define se um endereço IP público será atribuído à instância ECS temporária.

    eip_id

    string

    ID do EIP associado à instância ECS temporária.

    skip_image_validation

    boolean

    Não

    Define se a validação da imagem deve ser ignorada. Valor padrão: false.

    system_disk_mapping

    object

    Não

    Configuração do disco do sistema. Exemplo:

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

    Consulte a seção Configurações de disco em nuvem.

    image_disk_mappings

    list

    Não

    Configuração do disco de dados na imagem personalizada. Exemplo:

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

    Consulte a seção Configurações de disco em nuvem.

    image_ignore_data_disks

    boolean

    Não

    Define se a imagem criada inclui snapshots de discos de dados. Valor padrão: false. Valores válidos:

    • false: A imagem criada inclui discos de dados.

    • true: A imagem criada inclui apenas o disco do sistema.

    profile

    string

    Não

    Arquivo de configuração do Packer. Se especificado, as configurações serão carregadas preferencialmente deste arquivo.

    ram_role_name

    string

    Não

    Nome da função RAM. Usado para obter um AccessKey temporário para a função RAM local executar o modelo do Packer.

    Nota

    Aplica-se apenas quando o Packer é executado em uma instância ECS com uma função RAM anexada.

    ram_role_arn

    string

    Não

    Alibaba Cloud Resource Name (ARN) da função RAM. Usado com ram_session_name para permitir que a Conta A assuma a função da Conta B na criação da imagem.

    ram_session_name

    string

    Não

    Nome da sessão da função RAM. Usado com ram_role_arn para criação de imagens entre contas.

    ecs_ram_role_name

    string

    Não

    Função RAM da instância anexada à instância ECS temporária. Chame a operação ListRoles para consultar as funções disponíveis.

    ssh_keypair_name

    string

    Não

    Nome do par de chaves SSH para conexão à instância ECS temporária.

    ssh_private_key_file

    string

    Não

    Caminho do arquivo de chave privada do par de chaves SSH para conexão à instância ECS temporária.

    custom_endpoint_ecs

    string

    Não

    Endpoint personalizado do ECS.

    security_group_id

    string

    Não

    ID do grupo de segurança da instância ECS temporária.

    security_group_name

    string

    Não

    Nome do grupo de segurança. Se nenhum ID de grupo de segurança for especificado, o Packer criará um com este nome.

    vpc_id

    string

    Não

    ID da VPC da instância ECS temporária.

    vpc_name

    string

    Não

    Nome da VPC. Se vpc_id não for especificado, o Packer criará uma VPC com este nome.

    vswitch_id

    string

    Não

    ID do vSwitch da instância ECS temporária.

    vswitch_name

    string

    Não

    Nome do vSwitch. Se vswitch_id não for especificado, o Packer criará um vSwitch com este nome.

    user_data

    string

    Não

    Dados de usuário da instância. Devem estar codificados em Base64, com dados brutos não excedendo 32 KB. Consulte Personalizar configurações de inicialização para uma instância para limites, formato e frequência de execução.

    Nota

    Criptografe dados sensíveis (senhas, chaves privadas) antes da codificação Base64 e descriptografe-os dentro da instância.

    user_data_file

    string

    Não

    Caminho do arquivo de dados de usuário da instância ECS temporária.

    boot_mode

    string

    Não

    Modo de inicialização da imagem personalizada. Valores válidos: BIOS, UEFI e UEFI-Preferred.

    wait_snapshot_ready_timeout

    Integer

    Não

    Tempo limite do snapshot. Valor padrão: 3600. Unidade: segundos.

    instance_name

    string

    Não

    Nome da instância ECS temporária. O padrão é o InstanceId.

    Nota

    O nome deve ter entre 2 e 128 caracteres e pode conter letras, dígitos, dois-pontos (:), sublinhados (_), pontos (.) e hifens (-).

    image_force_delete

    boolean

    Não

    Define se uma imagem existente com o mesmo nome deve ser excluída antes da criação da nova. Valor padrão: false. Valores válidos:

    • true: Exclui a imagem existente com o mesmo nome e cria a nova imagem.

    • false: Não exclui a imagem existente com o mesmo nome. A criação da imagem falha.

    image_force_delete_snapshots

    boolean

    Não

    Define se os snapshots de uma imagem existente com o mesmo nome devem ser excluídos. Valor padrão: false. Valores válidos:

    • true: Exclui a imagem existente com o mesmo nome e seus snapshots, depois cria a nova imagem.

    • false: Não exclui a imagem existente com o mesmo nome nem seus snapshots. A criação da imagem falha.

    image_version

    string

    Não

    Versão da imagem personalizada.

    resource_group_id

    string

    Não

    ID do grupo de recursos da imagem personalizada.

    force_stop_instance

    boolean

    Não

    Define se a instância ECS temporária deve ser parada forçadamente. Valor padrão: false.

    disable_stop_instance

    boolean

    Não

    Define se a parada da instância após a execução do provisioner deve ser ignorada. Defina como true quando a instância precisar permanecer em execução, como ao executar o Sysprep no Windows. Valor padrão: false.

    run_tags

    object

    Não

    Tags da imagem personalizada. Exemplo: {"key":"value"}.

    image_description

    string

    Não

    Descrição da imagem personalizada.

    image_share_account

    []string

    Não

    Contas com as quais a imagem personalizada será compartilhada. Exemplo: ["123456"].

    image_copy_regions

    []string

    Não

    Regiões para onde a imagem personalizada será copiada. Exemplo: ["cn-beijing"].

    provisioners

    string

    Não

    Tipo de provisioner. Valores válidos:

    • File

    • PowerShell

    • Shell

    • Local Shell

    • Windows Shell

    Consulte Provisioners.

    Configurações de disco em nuvem

    Parâmetro

    Tipo

    Obrigatório

    Descrição

    disk_name

    string

    Não

    Nome do disco em nuvem.

    Nota

    O nome deve ter entre 2 e 128 caracteres e pode conter letras, dígitos, dois-pontos (:), sublinhados (_), pontos (.) e hifens (-).

    disk_category

    string

    Não

    Categoria do disco em nuvem. Valores válidos:

    • cloud_efficiency: ultra disk

    • cloud_ssd: standard SSD

    • cloud_essd: Enterprise SSD (ESSD)

    • cloud: basic disk

    disk_size

    int

    Não

    Tamanho do disco em nuvem. Unidade: GiB. Deve ser no mínimo 20 e não inferior ao tamanho da imagem. Valor padrão: 40 ou o tamanho da imagem, o que for maior.

    disk_description

    string

    Não

    Descrição do disco em nuvem. Vazia por padrão.

    Nota

    A descrição deve ter entre 2 e 256 caracteres e não pode começar com http:// ou https://.

    disk_snapshot_id

    string

    Não

    ID do snapshot a ser usado para criar o disco de dados.

    disk_delete_with_instance

    boolean

    Não

    Define se o disco de dados deve ser liberado quando a instância for liberada. Valores válidos:

    • true

    • false

    Valor padrão: true.

    disk_device

    string

    Não

    Ponto de montagem do disco de dados.

    disk_encrypted

    boolean

    Não

    Define se o disco de dados deve ser criptografado. Valores válidos:

    • true

    • false

    Valor padrão: false.

  5. Pressione Esc, digite :wq e pressione Enter para salvar e sair.

Etapa 3: Usar o Packer para criar uma imagem personalizada

Compile uma imagem personalizada a partir do modelo do Packer.

  1. Crie a imagem personalizada.

    Arquivo HCL

    packer build alicloud.pkr.hcl

    A saída a seguir mostra que a imagem m-m5e3f0gu2dxs4z0s**** foi criada na região China (Qingdao).

    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****

    Arquivo JSON

    packer build alicloud.json

    A saída a seguir mostra que a imagem m-m5e3f0gu2dxs4z0s**** foi criada na região China (Qingdao).

    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. Verifique a imagem personalizada.

    1. Faça login no console ECS.

    2. No painel de navegação à esquerda, selecione Instances & Images > Image.

    3. Na barra de navegação superior, selecione a região especificada no seu modelo, como China (Qingdao).

    4. Na aba Custom Images, localize a imagem chamada packer_basic.