すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Packer を使用したカスタムイメージの作成

最終更新日:Apr 28, 2026

ECS インスタンスに Packer をインストールし、HCL または JSON テンプレートを定義して、バッチデプロイメント用のカスタムイメージを構築します。

前提条件

AccessKey ペア (AccessKey ID と AccessKey Secret) を取得済みであること。「AccessKey ペアの取得」をご参照ください。

説明
  • AccessKey の漏洩を防ぐため、RAM ユーザーを作成し、その認証情報を使用してください。詳細については、「RAM ユーザーの作成」をご参照ください。

  • AccessKey Secret は AccessKey ペアの作成時のみ表示されます。必ず記録し、秘密にしてください。

背景

Packer は、ビルダープロビジョナーポストプロセッサーを使用して HCL または JSON テンプレートをカスタムイメージに変換することで、手動によるイメージ作成をコードとしての構成に置き換えます。 詳細については、「Packer ドキュメント」をご参照ください。

手順

手順 1:Packer のインストール

  1. Linux インスタンスに接続します。

    詳細については、「ユーザー名とパスワードを使用した Linux インスタンスへの接続」をご参照ください。

  2. /usr/local/bin に移動します。

    cd /usr/local/bin
    説明

    /usr/local/bin は、システムの PATH に含まれています。PATH に既にある他のディレクトリに Packer をインストールすることもできます。

  3. Packer インストールパッケージをダウンロードします。

    また、Packer のインストールページにアクセスして、お使いの OS とアーキテクチャ用のパッケージをダウンロードすることもできます。この例では packer_1.8.5_linux_amd64.zip を使用します。

    wget https://releases.hashicorp.com/packer/1.8.5/packer_1.8.5_linux_amd64.zip
  4. パッケージを解凍します。

    unzip packer_1.8.5_linux_amd64.zip
  5. インストールを検証します。

    packer -v
    • バージョン番号が返された場合、Packer はインストールされています。

    • command not found が返された場合、Packer は正しくインストールされていません。Packer ディレクトリがシステムの PATH に含まれていることを確認してください。

手順 2:Packer テンプレートの定義

ビルダープロビジョナーを指定する HCL または JSON テンプレートを作成します。この例では、Shell プロビジョナーを使用します。

  1. AccessKey ID をエクスポートします。

    export ALICLOUD_ACCESS_KEY=<AccessKey ID>

    <AccessKey ID> を実際の AccessKey ID に置き換えます。詳細については、「RAM ユーザーの AccessKey ペアに関する情報の表示」をご参照ください。

  2. AccessKey Secret をエクスポートします。

    export ALICLOUD_SECRET_KEY=<AccessKey Secret>

    <AccessKey Secret> を実際の AccessKey Secret に置き換えます。AccessKey Secret は作成時にのみ表示され、後で取得することはできません。詳細については、「AccessKey ペアの取得」をご参照ください。

  3. alicloud という名前のファイルを作成します。

    説明

    どちらの形式を使用しても alicloud ファイルを作成できます。HCL ファイルを作成する場合は、後続の手順で HCL の例とコマンドを使用してください。

    HCL ファイル

    vi alicloud.pkr.hcl

    JSON ファイル

    vi alicloud.json
  4. I を押して挿入モードに入ります。次のいずれかのテンプレートを 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 ドキュメント」をご参照ください。

    パラメーター

    タイプ

    必須

    説明

    region

    string

    はい

    カスタムイメージの作成に使用される一時的な ECS インスタンスのリージョン。例:cn-qingdao

    image_name

    string

    はい

    カスタムイメージ名。例:packer_basic

    instance_type

    string

    はい

    一時的な ECS インスタンスのインスタンスタイプ。例:ecs.g6.large。一時的なインスタンスは、イメージ作成後に自動的にリリースされます。

    説明

    Packer は CreateInstance API を呼び出して、必要なオペレーティングシステムとソフトウェアを備えた一時的な従量課金 ECS インスタンスを作成します。このインスタンスには料金が発生します。

    ssh_username

    string

    はい

    一時的な ECS インスタンスに接続するための SSH ユーザー名。

    internet_charge_type

    string

    いいえ

    一時的な ECS インスタンスのネットワーク課金方法。有効値:

    • PayByBandwidth:帯域幅課金。

    • PayByTraffic:トラフィック課金。

    source_image

    string

    いずれかのパラメーターを指定する必要があります。

    一時的な ECS インスタンスのベースイメージの ID。ID は、ECS コンソールのパブリックイメージリストから取得するか、DescribeImages API を呼び出して取得します。

    重要

    選択したイメージタイプは、指定したインスタンスタイプと互換性がある必要があります。たとえば、Arm イメージ (ID に _arm64_ が含まれる) は、Arm ベースのインスタンスタイプで使用する必要があります。そうしないと、ビルドは失敗します。

    image_family

    string

    イメージファミリー名。Packer は、このファミリーから利用可能な最新のイメージを使用してインスタンスを作成します。

    説明

    名前の長さは 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 ホストと作成されたインスタンスは同じ vSwitch 内にある必要があります。

    associate_public_ip_address

    boolean

    一時的な ECS インスタンスにパブリック IP アドレスを割り当てるかどうかを指定します。

    eip_id

    string

    一時的な ECS インスタンスに関連付けられている EIP の 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 ロールが Packer テンプレートを実行するための一時的な AccessKey を取得するために使用されます。

    説明

    Packer が RAM ロールをアタッチした ECS インスタンス上で実行されている場合にのみ適用されます。

    ram_role_arn

    string

    いいえ

    RAM ロールの Alibaba Cloud リソースネーム (ARN)。アカウント A がアカウント B のロールを引き受けてイメージを作成できるようにするために、ram_session_name とともに使用されます。

    ram_session_name

    string

    いいえ

    RAM ロールのセッション名。クロスアカウントでのイメージ作成のために ram_role_arn とともに使用されます。

    ecs_ram_role_name

    string

    いいえ

    一時的な ECS インスタンスにアタッチするインスタンス RAM ロール。ListRoles API を呼び出して、利用可能なロールを照会します。

    ssh_keypair_name

    string

    いいえ

    一時的な ECS インスタンスに接続するための SSH キーペア名。

    ssh_private_key_file

    string

    いいえ

    一時的な ECS インスタンスに接続するための SSH キーペアのプライベートキーファイルのパス。

    custom_endpoint_ecs

    string

    いいえ

    カスタム ECS エンドポイント。

    security_group_id

    string

    いいえ

    一時的な ECS インスタンスのセキュリティグループ ID。

    security_group_name

    string

    いいえ

    セキュリティグループ名。セキュリティグループ ID が指定されていない場合、Packer はこの名前でセキュリティグループを作成します。

    vpc_id

    string

    いいえ

    一時的な ECS インスタンスの VPC ID。

    vpc_name

    string

    いいえ

    VPC 名。vpc_id が指定されていない場合、Packer はこの名前で VPC を作成します。

    vswitch_id

    string

    いいえ

    一時的な ECS インスタンスの vSwitch ID。

    vswitch_name

    string

    いいえ

    vSwitch 名。vswitch_id が指定されていない場合、Packer はこの名前で vSwitch を作成します。

    user_data

    string

    いいえ

    インスタンスのユーザーデータ。Base64 でエンコードする必要があり、生データは 32 KB を超えることはできません。制限、形式、実行頻度については、「インスタンスの初期化設定のカスタマイズ」をご参照ください。

    説明

    機密データ (パスワード、プライベートキー) は Base64 エンコードの前に暗号化し、インスタンス内で復号化してください。

    user_data_file

    string

    いいえ

    一時的な ECS インスタンスのユーザーデータファイルのパス。

    boot_mode

    string

    いいえ

    カスタムイメージの起動モード。有効値:BIOS、UEFI、UEFI-Preferred。

    wait_snapshot_ready_timeout

    Integer

    いいえ

    スナップショットのタイムアウト期間。デフォルト値:3600。単位:秒。

    instance_name

    string

    いいえ

    一時的な ECS インスタンス名。デフォルトは InstanceId です。

    説明

    名前の長さは 2 ~ 128 文字で、名前に文字、数字、コロン (:)、アンダースコア (_)、ピリオド (.)、ハイフン (-) を使用できます。

    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

    いいえ

    一時的な ECS インスタンスを強制的に停止するかどうかを指定します。デフォルト値:false。

    disable_stop_instance

    boolean

    いいえ

    プロビジョナーの実行後にインスタンスの停止をスキップするかどうかを指定します。Windows で Sysprep を実行する場合など、インスタンスを実行し続ける必要がある場合は true に設定します。デフォルト値:false。

    run_tags

    object

    いいえ

    カスタムイメージのタグ。例:{"key":"value"}

    image_description

    string

    いいえ

    カスタムイメージの説明。

    image_share_account

    []string

    いいえ

    カスタムイメージを共有するアカウント。例:["123456"]

    image_copy_regions

    []string

    いいえ

    カスタムイメージのコピー先リージョン。例:["cn-beijing"]

    provisioners

    string

    いいえ

    プロビジョナーのタイプ。有効値:

    • File

    • PowerShell

    • Shell

    • Local Shell

    • Windows Shell

    プロビジョナー」をご参照ください。

    クラウドディスクの設定

    パラメーター

    タイプ

    必須

    説明

    disk_name

    string

    いいえ

    クラウドディスク名。

    説明

    名前の長さは 2 ~ 128 文字で、名前に文字、数字、コロン (:)、アンダースコア (_)、ピリオド (.)、ハイフン (-) を使用できます。

    disk_category

    string

    いいえ

    クラウドディスクのカテゴリ。有効値:

    • cloud_efficiency:超効率クラウドディスク

    • cloud_ssd:標準 SSD

    • cloud_essd:ESSD (エンタープライズ SSD)

    • cloud:ベーシックディスク

    disk_size

    int

    いいえ

    クラウドディスクのサイズ。単位:GiB。値は 20 以上かつイメージサイズ以上である必要があります。デフォルト値:40 またはイメージサイズのいずれか大きい方。

    disk_description

    string

    いいえ

    クラウドディスクの説明。デフォルトでは空です。

    説明

    説明の長さは 2 ~ 256 文字で、先頭に http:// または https:// を使用することはできません。

    disk_snapshot_id

    string

    いいえ

    データディスクの作成に使用するスナップショット ID。

    disk_delete_with_instance

    boolean

    いいえ

    インスタンスがリリースされるときにデータディスクをリリースするかどうかを指定します。有効値:

    • true

    • false

    デフォルト値:true。

    disk_device

    string

    いいえ

    データディスクのマウントポイント。

    disk_encrypted

    boolean

    いいえ

    データディスクを暗号化するかどうかを指定します。有効値:

    • true

    • false

    デフォルト値:false。

  5. Esc を押し、:wq と入力して Enter を押し、保存して終了します。

手順 3:Packer を使用したカスタムイメージの作成

Packer テンプレートからカスタムイメージを構築します。

  1. カスタムイメージを作成します。

    HCL ファイル

    packer build alicloud.pkr.hcl

    次の出力は、イメージ 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

    次の出力は、イメージ 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. 左側メニューで、[Instances & Images] > [Images] を選択します。

    3. 上部のメニューバーで、テンプレートで指定したリージョン (中国 (青島) など) を選択します。

    4. カスタムイメージ タブで、[packer_basic] という名前のイメージを探します。