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

Elastic Compute Service:Packerを使用したオンプレミスイメージの作成とインポート

最終更新日:Apr 18, 2024

Packerは、Windows、Linux、macOSなどの主流のオペレーティングシステムで並行してイメージを作成するために使用される軽量のオープンソースツールです。 このトピックでは、Packerを使用してオンプレミスイメージを作成し、イメージをAlibaba Cloudにアップロードする方法について説明します。 このトピックでは、Ubuntu 16.04を実行するオンプレミスサーバー上にCentOS 6.9イメージを作成します。

前提条件

  • AccessKey IDとAccessKeyシークレットで構成されるAccessKeyペアが取得されます。 詳細については、「AccessKeyペアの取得」をご参照ください。

    説明
    • Alibaba CloudアカウントのAccessKeyペアの漏洩を防ぐため、RAM (Resource Access Management) ユーザーを作成し、RAMユーザーの資格情報を使用してAccessKeyペアを作成することを推奨します。 RAMユーザーの作成方法については、「RAMユーザーの作成」をご参照ください。

    • RAMユーザーのAccessKeyシークレットは、RAMユーザーのAccessKeyペアを作成した場合にのみ表示されます。 AccessKeyペアの作成後、AccessKeyシークレットを照会することはできません。 AccessKeyシークレットを記録して機密保持します。

  • Object Storage Service (OSS) が有効化されています。 詳細については、「OSSの有効化」をご参照ください。

背景情報

Packerは、BuildersProvisionersPost-Processorなどのさまざまなコンポーネントで構成されています。 Packerは、Hashicorp構成言語 (HCL) またはJSON形式のテンプレートを使用して、カスタムイメージを作成するプロセスを簡素化します。 さらに、Packerはイメージ作成プロセスを標準化および自動化し、クラウド移行を容易にするコードとしてイメージを定義できます。

手順

この例では、以下のソフトウェアバージョンが使用されます。 操作は、ソフトウェアのバージョンによって異なる場合があります。

  • オンプレミスサーバーのオペレーティングシステム: Ubuntu 16.04

  • イメージを作成するオペレーティングシステム: CentOS 6.9

手順1: カーネルベースの仮想マシン (KVM) のインストール

  1. 次のコマンドを実行して、オンプレミスサーバーがKVMをサポートしているかどうかを確認します。この例では、ソースサーバーはUbuntu 16.04を実行します。

    egrep "(svm | vmx)" /proc/cpuinfo

    次のサンプルコマンド出力は、ソースサーバーがKVMをサポートしていることを示しています。

    pat pse36 clflush dts acpi mmx fxsse sselm sse2 ss x2 ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pbs rep_good nopl xstop_tapersc tsc_kn_known_freq_intelq_ses_c2cmic 4cm p_cad_cad_cad_cad_sclam 3 pm 3 ped_cad_sc_sc_ xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
    フラグ: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov 
  2. オンプレミスサーバーがKVMをサポートしている場合は、次のコマンドを実行してKVMと関連するコントロールをインストールします。

    sudo apt-getアップデート
    sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin bridge-utils 
  3. KVMが期待どおりにインストールされているかどうかを確認します。

    1. 次のコマンドを実行して、KVMカーネルモジュールがロードされているかどうかを確認します。

      sudo lsmod | grep kvm

      KVMカーネルモジュールが読み込まれると、kvmkvm_intelまたはkvmとkvm_amdを含むコマンド出力が返されます。KVM内核

    2. 次のコマンドを実行して、libvirtがインストールされているかどうかを確認します。

      sudo dpkg -l libvirt-bin

      libvirtがインストールされている場合、libvirt-binを含むコマンド出力が返されます。libvirt

    3. 次のコマンドを実行して、QEMUがインストールされているかどうかを確認します。

      sudo dpkg -l qemu-kvm

      QEMUがインストールされている場合、qemu-kvmを含むコマンド出力が返されます。QEMU

    コマンド出力が期待どおりの場合、KVMがインストールされます。 コマンド出力の1つが期待どおりでない場合は、KVMを再インストールする必要があります。

ステップ2: Packerのインストール

オンプレミスサーバーにPackerをインストールします。 詳細については、「Packerを使用してカスタムイメージを作成する」トピックの「手順1: Packerのインストール」を参照してください。

ステップ3: Packerテンプレートの定義

この例では、CentOS 6.9イメージが作成されます。 他のオペレーティングシステム用のイメージを作成するには、必要に応じてPackerテンプレート構成ファイルcentos.jsonを変更します。 詳細については、「Packerテンプレートの作成」をご参照ください。

  1. 移行元サーバーで次のコマンドを実行して、作業ディレクトリを /usr/localディレクトリに変更します。

    cd /usr /ローカル
  2. 次のコマンドを実行して、Alibaba Cloudが提供するcentos.json設定ファイルをダウンロードします。

    sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/centos.json
  3. 次のコマンドを実行して、Alibaba Cloudが提供するks.cfg設定ファイルをダウンロードします。

    sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/http/centos-6.8/ks.cfg
  4. 次のコマンドを実行してディレクトリを作成します。 この例では、http/centos-6.9ディレクトリが作成されます。

    sudo mkdir -p http/centos-6.9
  5. 次のコマンドを実行して、ks.cfg設定ファイルをhttp/centos-6.9ディレクトリに移動します。

    sudo mv ks.cfg http/centos-6.9/

ステップ4: Packerを使用してオンプレミスイメージを作成し、イメージをインポートする

  1. オンプレミスサーバーで次のコマンドを実行して、AccessKey IDをインポートします。

    ALICLOUD_ACCESS_KEY=<AccessKey ID> のエクスポート

    上記のコマンドで、<AccessKey ID> を実際のAccessKey IDに置き換えます。

  2. 次のコマンドを実行して、AccessKeyシークレットをインポートします。

    エクスポートALICLOUD_SECRET_KEY=<AccessKey Secret>

    上記のコマンドで、<AccessKey Secret> を実際のAccessKey secretに置き換えます。

  3. 次のコマンドを実行してオンプレミスイメージを作成し、イメージをAlibaba Cloudにインポートします。

    sudo packer build centos.json

    次のサンプルコマンド出力は、オンプレミスイメージがカスタムイメージとして中国 (北京) リージョンにインポートされることを示しています。

    qemu出力はこの色になります。
     ==> qemu: Downloading or copying ISO
         qemu: Downloading or copying: http://mirrors.aliyun.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso
     ................................................
     ==> qemu: Running post-processor: alicloud-import
         qemu (alicloud-import): Deleting import source https://oss-cn-beijing.aliyuncs.com/packer/centos_x86_64
     Build 'qemu' finished.
     ==> Builds finished. The artifacts of successful builds are:
     --> qemu: Alicloud images were created:
     cn-北京: XXXXXXXX 
  4. にログインします。ECSコンソール.

  5. 左側のナビゲーションウィンドウで、インスタンス&画像 > イメージ.

  6. 上部のナビゲーションバーの左上隅で、centos.json設定ファイルが配置されているリージョンを選択します。 この例では、中国 (北京) が選択されています。

  7. [カスタムイメージ] タブで、CentOS 6.9イメージを表示します。

Packerテンプレートの作成

次のJSONコードでは、CentOS 6.9イメージの作成に使用するPackerテンプレートを作成する方法について説明します。 別のオペレーティングシステム用のイメージを作成するには、必要に応じてコードを変更します。

{"variables": {
        "box_basename": "centos-6.9",
        "build_timestamp": "{{isotime \"20060102150405\"}}",
        "cpus": "1",
        "disk_size": "4096",
        "git_revision": "__unknown_git_revision__",
        "headless": "",
        "http_proxy": "{{env `http_proxy`}}",
        "https_proxy": "{{env `https_proxy`}}",
        "iso_checksum_type": "md5",
        "iso_checksum": "af4axxxxxxxxxxxxxxx192a2" 、
        "iso_name": "CentOS-6.9-x86_64-minimal.iso",
        "ks_path": "centos-6.9/ks.cfg",
        "memory": "512",
        "metadata": "floppy/dummy_metadata.json",
        "mirror": "http://mirrors.aliyun.com/centos",
        "mirror_directory": "6.9/isos/x86_64",
        "name": "centos-6.9",
        "no_proxy": "{{env `no_proxy`}}",
        "template": "centos-6.9-x86_64",
        "version": "2.1.TIMESTAMP"
      },
    "builders":[
        {
          "boot_command": [
            "<tab> text ks=http://{{ .HTTPIP }:{{ .HTTPPort }}/{{user 'ks_path' }}< enter><wait>"
          ],
          "boot_wait": "10s",
          "disk_size": "{{user `disk_size`}}",
          "headless": "{{ user `headless` }}",
          "http_directory": "http",
          "iso_checksum": "{{user `iso_checksum`}}",
          "iso_checksum_type": "{{user `iso_checksum_type`}}",
          "iso_url": "{{user `mirror`}}/{{user `mirror_directory`}}/{{user `iso_name`}}",
          "output_directory": "packer-{{user `template`}}-qemu",
          "shutdown_command": "echo 'vagrant'|sudo -S /sbin/halt -h -p",
          "ssh_password": "vagrant",
          "ssh_port": 22,
          "ssh_username": "root",
          "ssh_wait_timeout": "10000s",
          "type": "qemu",
          "vm_name": "{{ user `template` }}.raw",
          "net_device": "virtio-net",
          "disk_interface": "virtio",
          "format": "raw"
        }
      ],
    "provisioners": [{
          "type": "shell",
          "inline": [
                "sleep 30",
                "yum install cloud-util cloud-init -y"
              ]
        }],
      "post-processors":[
        {
          "type":"alicloud-import",
          "oss_bucket_name": "packer",
          "image_name": "packer_import",
          "image_os_type": "linux",
          "image_platform": "CentOS",
          "image_architecture": "x86_64",
          "image_system_size": "40",
          "region":"cn-beijing"
        }
      ]
}

QEMU Packerビルダーに必要なパラメーター

QEMU Packerビルダーは、KVM仮想マシンイメージを作成するために使用されます。 次の表に、ビルダーに必要なパラメーターを示します。 オプションのパラメーターについては、「QEMU Builder」をご参照ください。

必須パラメーター

データ型

説明

iso_checksum

String

オペレーティングシステムのISOファイルのチェックサム。 Packerは、ISOファイルが添付されている仮想マシンを起動する前に、このパラメーターを検証します。 iso_checksumパラメーターとiso_checksum_urlパラメーターの少なくとも1つを指定してください。 iso_checksumパラメーターを指定した場合、iso_checksum_urlの値は自動的に無視されます。

iso_checksum_type

String

指定されたオペレーティングシステムのISOファイルのチェックサムタイプ。 有効な値:

  • none: チェックサムプロセスを無視します。 この値は使用しないことを推奨します。

  • md5

  • sha1

  • sha256

  • sha512

iso_checksum_url

String

オペレーティングシステムのISOファイルのチェックサムを含むGNUまたはBSDスタイルのチェックサムファイルを指すURL。 iso_checksumパラメーターとiso_checksum_urlパラメーターの少なくとも1つを指定してください。 iso_checksumパラメーターを指定した場合、iso_checksum_urlの値は自動的に無視されます。

iso_url

String

ISOファイルを指し、イメージを含むURL。 URLには、HTTP URLまたはファイルパスを指定できます。

  • URLがHTTP URLの場合、PackerはHTTP URLからファイルをダウンロードし、後でファイルを実行するためにファイルをキャッシュします。

  • URLがIMGまたはQCOW2ファイルへのファイルパスである場合、QEMU Packer builderはそのファイルを使用してカスタムイメージを作成します。 ファイルパスを指定する場合は、disk_imagetrueに設定します。

ヘッドレス

Boolean

デフォルトでは、PackerはGUIを使用してQEMU仮想マシンを構築します。 headlessTrueに設定すると、コンソールを持たない仮想マシンが起動します。

パッカープロバイダーに必要なパラメーター

Packer provisionerには、Alibaba Cloudへのオンプレミスイメージの自動アップロードを可能にするポストプロセッサモジュールが含まれています。 次の表に、パッカー・プロビジョニングに必要なパラメーターを示します。 オプションのパラメーターについては、「ポストプロセッサ」をご参照ください。

必須パラメーター

データ型

説明

access_key

String

オンプレミスイメージのインポートに使用されるAccessKey ID。 RAMユーザーのAccessKey IDを取得する方法については、「RAMユーザーのAccessKeyペアに関する情報の表示」をご参照ください。

secret_key

String

オンプレミスイメージのインポートに使用されるAccessKeyシークレット。 RAMユーザーのAccessKeyシークレットは、RAMユーザーのAccessKeyペアを作成した場合にのみ表示されます。 AccessKeyペアの作成後、AccessKeyシークレットを照会することはできません。 詳細については、「AccessKeyペアの取得」をご参照ください。

region

String

オンプレミスイメージをアップロードするリージョンのID。 この例では、cn-beijingが使用されています。 詳細については、「リージョンとゾーン」をご参照ください。

image_name

String

アップロードするオンプレミスのイメージの名前。

  • 名前の長さは 2 ~ 128 文字である必要があります。

  • 先頭は英字とする必要があります。

  • 名前には、英数字、アンダースコア (_) 、およびハイフン (-) を使用できます。

  • 名前は http:// または https:// で始めることはできません。

oss_bucket_name

String

オンプレミスイメージがアップロードされるOSSバケットの名前。 指定されたOSSバケットが存在しない場合、Packerがイメージをアップロードするときに、指定された名前のOSSバケットが自動的に作成されます。

image_os_type

String

オンプレミスイメージのタイプ。 有効な値:

  • linux

  • windows

image_platform

String

オンプレミスイメージの分布。 この例では、CentOSが使用されます。

image_architecture

String

オンプレミスイメージのアーキテクチャ。 有効な値:

  • i386

  • x86_64

形式

String

オンプレミスイメージの形式。 有効な値:

  • RAW

  • VHD