Packer はオンプレミスイメージを作成するための便利なオープンソースツールです。 Packer は主要なオペレーティングシステム上で動作します。

Packer を使うことで、一つのソース構成から複数のプラットフォーム用の同一のオンプレミスイメージを作成することができます。ここでは、 Ubuntu 16.04 サーバ上に CentOS 6.9 用のオンプレミスイメージを作成し、それを Alibaba Cloud にアップロードする手順について詳しく説明します。 実際に使用する際には、必要に応じて Packer テンプレートをカスタマイズできます。

前提条件

  • 設定ファイル用に AccessKey が必要です。
    Alibaba Cloud アカウントの AccessKey は使用しないでください。 代わりに、アカウントのセキュリティを維持するためにRAM ユーザーを作成し、その RAM アカウントを使用して必要な AccessKey を作成します。
  • OSS を購入している必要があります。

オンプレミスイメージの作成とインポートの例

  1. オンプレミス サーバーまたは仮想マシンがKVMをサポートしているか確認するために以下を実行します。egrep "(svm|vmx)" /proc/cpuinfo 次の出力が返される場合は、 KVM がサポートされています。
    pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
    flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
  2. 次のコマンドを実行し、KVM をインストールします。
    sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin bridge-utils # Install KVM and related dependencies.
    sudo virt-manager # Enable virt-manager.

    GUI が VM コンソールのウィンドウで実行されたら、 KVM のインストールは成功です。

  3. Packer をインストールします。

    Packer をインストールするには、「Packer を使用したカスタムイメージの作成」をご参照ください。

  4. 以下のコマンドを実行し、Packer のテンプレートを定義します。
    以下の設定で作成されたオンプレミスイメージは、 CentOS 6.9 オペレーティングシステム専用です。他のオペレーティングシステムのためのイメージを作成するには、設定ファイル centos.json を必要に応じてカスタマイズします。
    cd /user/local # Switch the directory.
    wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/centos.json # Download file centos.json that is released by Alibaba Cloud.
    wget https://raw.githubusercontent.com/alibaba/packer-provider/master/examples/alicloud/local/http/centos-6.9/ks.cfg # Download file ks.cfg that is released by Alibaba Cloud.
    mkdir -p http/centos-6.9 # Create a directory.
    mv ks.cfg http/centos-6.9/ # Move file ks.cfg to the http/centos-6.9 directory.
  5. 次のコマンドを実行し、オンプレミスイメージを作成します。
    export ALICLOUD_ACCESS_KEY= SpecifyYourAccessKeyIDHere # Import your AccessKeyID,
    export ALICLOUD_SECRET_KEY= SpecifyYourAccessKeySecretHere # Import your AccessKeySecret.
    packer build centos.json # Create an on-premises image.

    結果の例は、以下のとおりです。

    qemu output will be in this color.
     ==> 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-beijing: XXXXXXXX
  6. 数分後に ECS コンソールにログインし、対象のリージョンのイメージリストにあるカスタムイメージを確認します。 この例では、リージョンは "中国 (北京) (cn-beijing)" です。

Packer テンプレートのカスタマイズ

この例では、以下の JSON ファイルは CentOS 6.9 用のイメージを作成するために使用されたテンプレートに基づいてカスタマイズされています。

{"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": "af4a1640c0c6f348c6c41f1ea9e192a2",
        "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"
        }
      ]
}

Packer ビルダーのパラメーター

前述のでは、仮想マシンイメージを作成するために QEMU ビルダーが使用されています。 ビルダーに必要なパラメーターは以下です。

パラメーター タイプ 説明
iso_checksum String OS ISO ファイルのチェックサム。 Packer は、ISOが接続された状態で仮想マシンを起動する前に、このパラメーターを確認します。 少なくとも一つの iso_checksum または iso_checksum_url パラメーターを指定してください。 もし iso_checksum パラメーターを指定した場合、iso_checksum_url パラメーターは自動的に無視されます。
iso_checksum_type String iso_checksum で指定されたチェックサムの種類。 任意の値:
  • none: もし iso_checksum_type に none を指定した場合、チェックサム検証は無視されます。 この値は推奨されません。
  • md5
  • sha1
  • sha256
  • sha512
iso_checksum_url String オペレーティングシステムの ISO ファイルのチェックサムを含む GNU または BSD スタイルのチェックサムファイルを指す URL。 GNU か BSD のいずれかのパターンがあります。 iso_checksum またはiso_checksum_url パラメーターのいずれかを指定してください。 iso_checksum パラメーターを指定した場合、 iso_checksum_url パラメーターは自動的に無視されます。
iso_url String ISO ファイルを指し、インストールイメージを含む URL。 URL は、HTTP URL またはファイルパスです。
  • HTTP URL の場合、Packer は HTTP リンクからファイルをダウンロードし、キャッシュします。
  • IMG または QCOW2 ファイルへのファイルパスの場合、QEMU は直接ファイルを起動します。 ファイルパスを指定している場合、disk_image パラメーターを "True" に設定してくだい。
headless boolean デフォルトでは、Packer は仮想マシン GUI を起動して QEMU 仮想マシンをビルドします。 headless パラメーターを "True" に設定する場合、コンソールのない仮想マシンが起動します。

詳細については、Packer の 『QEMU ビルダー』をご参照ください。

Packer プロビジョニングツールのパラメーター

前述ののプロビジョニングツールは、オンプレミスイメージの Alibaba Cloud への自動アップロードを可能にするポストプロセッサモジュールを含みます。 次の表は、プロビジョニングツールに必要なパラメーターを示します。

パラメーター タイプ 説明
access_key String AccessKeyID。 AccessKey には高い権限があります。 Alibaba Cloud のセキュリティを維持するために、最初に RAM ユーザーを作成し、その RAM アカウントを使用して AccessKey を作成することを推奨します。
secret_key String AccessKeySecret。 AccessKey には高い権限があります。 Alibaba Cloud のセキュリティを維持するために、最初に RAM ユーザーを作成し、その RAM アカウントを使用して AccessKey を作成することを推奨します。
region String オンプレミスイメージをアップロードしたいリージョンを選択します。 この例では、リージョンは cn-beijing です。詳細は、「リージョンとゾーン」をご参照ください。
image_name String オンプレミスイメージの名前。 The name is a string of 2 to 128 characters. It must begin with an English or a Chinese character. It can contain A-Z, a-z, Chinese characters, numbers, periods (.), colons (:), underscores (_), and hyphens (-).
oss_bucket_name String OSS バケット名。 存在しないバケット名を指定した場合、Packer はイメージをアップロードするときに、指定された OSS バケット名を使用して自動的にバケットを作成します。
image_os_type String イメージの種類。 任意の値:
  • linux
  • windows
image_platform String イメージのディストリビューション。 例えば CentOS です。
image_architecture String イメージの命令セットアーキテクチャ。 任意の値:
  • i386
  • x86_64
format String イメージのフォーマット。 任意の値:
  • RAW
  • VHD

詳細については、Packer の『 Alicloud Post-Processor 』をご参照ください。

次のステップ

作成したイメージを使用して ECS インスタンスを作成できます。 詳細については、「カスタムイメージを使用したインスタンスの作成」をご参照ください。

参照

  • Packer の 使用方法の詳細については、『Packer のドキュメント』をご参照ください。
  • リリース情報の詳細は、GitHub の Packer リポジトリ『packer』をご参照ください。
  • Alibaba Cloud オープンソースツールの詳細については、GitHub の Alibaba Cloud リポジトリ『opstools』をご参照ください。
  • Alibaba Cloud と Packer プロジェクトの詳細については、GitHub の Alibaba Cloud と Packer リポジトリ『packer-provider』をご参照ください。
  • 設定ファイル ks.cfg の詳細については、『 Anaconda Kickstart』をご参照ください。