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は、Builders、Provisioners、Post-Processorなどのさまざまなコンポーネントで構成されています。 Packerは、Hashicorp構成言語 (HCL) またはJSON形式のテンプレートを使用して、カスタムイメージを作成するプロセスを簡素化します。 さらに、Packerはイメージ作成プロセスを標準化および自動化し、クラウド移行を容易にするコードとしてイメージを定義できます。
手順
この例では、以下のソフトウェアバージョンが使用されます。 操作は、ソフトウェアのバージョンによって異なる場合があります。
オンプレミスサーバーのオペレーティングシステム: Ubuntu 16.04
イメージを作成するオペレーティングシステム: CentOS 6.9
手順1: カーネルベースの仮想マシン (KVM) のインストール
次のコマンドを実行して、オンプレミスサーバーが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
オンプレミスサーバーがKVMをサポートしている場合は、次のコマンドを実行してKVMと関連するコントロールをインストールします。
sudo apt-getアップデート sudo apt-get install qemu-kvm qemu virt-manager virt-viewer libvirt-bin bridge-utils
KVMが期待どおりにインストールされているかどうかを確認します。
次のコマンドを実行して、KVMカーネルモジュールがロードされているかどうかを確認します。
sudo lsmod | grep kvm
KVMカーネルモジュールが読み込まれると、
kvm
とkvm_intel
またはkvmとkvm_amd
を含むコマンド出力が返されます。次のコマンドを実行して、libvirtがインストールされているかどうかを確認します。
sudo dpkg -l libvirt-bin
libvirtがインストールされている場合、
libvirt-bin
を含むコマンド出力が返されます。次のコマンドを実行して、QEMUがインストールされているかどうかを確認します。
sudo dpkg -l qemu-kvm
QEMUがインストールされている場合、
qemu-kvm
を含むコマンド出力が返されます。
コマンド出力が期待どおりの場合、KVMがインストールされます。 コマンド出力の1つが期待どおりでない場合は、KVMを再インストールする必要があります。
ステップ2: Packerのインストール
オンプレミスサーバーにPackerをインストールします。 詳細については、「Packerを使用してカスタムイメージを作成する」トピックの「手順1: Packerのインストール」を参照してください。
ステップ3: Packerテンプレートの定義
この例では、CentOS 6.9イメージが作成されます。 他のオペレーティングシステム用のイメージを作成するには、必要に応じてPackerテンプレート構成ファイルcentos.jsonを変更します。 詳細については、「Packerテンプレートの作成」をご参照ください。
移行元サーバーで次のコマンドを実行して、作業ディレクトリを /usr/localディレクトリに変更します。
cd /usr /ローカル
次のコマンドを実行して、Alibaba Cloudが提供するcentos.json設定ファイルをダウンロードします。
sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/centos.json
次のコマンドを実行して、Alibaba Cloudが提供するks.cfg設定ファイルをダウンロードします。
sudo wget https://raw.githubusercontent.com/hashicorp/packer-plugin-alicloud/main/builder/examples/local/http/centos-6.8/ks.cfg
次のコマンドを実行してディレクトリを作成します。 この例では、http/centos-6.9ディレクトリが作成されます。
sudo mkdir -p http/centos-6.9
次のコマンドを実行して、ks.cfg設定ファイルをhttp/centos-6.9ディレクトリに移動します。
sudo mv ks.cfg http/centos-6.9/
ステップ4: Packerを使用してオンプレミスイメージを作成し、イメージをインポートする
オンプレミスサーバーで次のコマンドを実行して、AccessKey IDをインポートします。
ALICLOUD_ACCESS_KEY=<AccessKey ID> のエクスポート
上記のコマンドで、
<AccessKey ID>
を実際のAccessKey IDに置き換えます。次のコマンドを実行して、AccessKeyシークレットをインポートします。
エクスポートALICLOUD_SECRET_KEY=<AccessKey Secret>
上記のコマンドで、
<AccessKey Secret>
を実際のAccessKey secretに置き換えます。次のコマンドを実行してオンプレミスイメージを作成し、イメージを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
にログインします。ECSコンソール.
左側のナビゲーションウィンドウで、 .
上部のナビゲーションバーの左上隅で、centos.json設定ファイルが配置されているリージョンを選択します。 この例では、中国 (北京) が選択されています。
[カスタムイメージ] タブで、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ファイルのチェックサムタイプ。 有効な値:
|
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またはファイルパスを指定できます。
|
ヘッドレス | Boolean | デフォルトでは、PackerはGUIを使用してQEMU仮想マシンを構築します。 headlessをTrueに設定すると、コンソールを持たない仮想マシンが起動します。 |
パッカープロバイダーに必要なパラメーター
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。 この例では、 |
image_name | String | アップロードするオンプレミスのイメージの名前。
|
oss_bucket_name | String | オンプレミスイメージがアップロードされるOSSバケットの名前。 指定されたOSSバケットが存在しない場合、Packerがイメージをアップロードするときに、指定された名前のOSSバケットが自動的に作成されます。 |
image_os_type | String | オンプレミスイメージのタイプ。 有効な値:
|
image_platform | String | オンプレミスイメージの分布。 この例では、CentOSが使用されます。 |
image_architecture | String | オンプレミスイメージのアーキテクチャ。 有効な値:
|
形式 | String | オンプレミスイメージの形式。 有効な値:
|