このトピックでは、Packerを使用してAlibaba Cloud ECSカスタムイメージを作成するときにDevOpsを実装するために使用されるAlicloud Image Builderパラメーターについて説明します。
カスタム画像のタグ付けに使用するパラメータ
- フィールド: タグ {"key":"value"}
- 該当するシナリオ: 複数のカスタムイメージがある場合は、簡単に管理と取得できるようにタグ付けできます。 Alicloud Image Builder では tags パラメーターが利用できます。 Packerを使用してカスタムイメージを作成するときにこのパラメーターを設定すると、生成されたイメージは指定したタグにバインドされます。 詳細については、「タグの概要」をご参照ください。
- 機能: ECSコンソールで、またはDescribeImages操作を呼び出してイメージを照会すると、イメージがタグとともに表示されます。 タグで画像をフィルタリングすることもできます。 イメージにバインドされたタグをTerraformと一緒に使用して、エンタープライズグレードのDevOpsプロセスを標準化できます。
- 例: 次の設定ファイルには、生成されたイメージと相対スナップショットにバインドされた
version=v1.0.0
タグとapp=web
タグが含まれています:{ "variables": { "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}", "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}" }, "builders": [{ "type":"alicloud-ecs", "access_key":"{{user `access_key`}}", "secret_key":"{{user `secret_key`}}", "region":"cn-beijing", "image_name":"packer_basic", "source_image":"centos_7_03_64_20G_alibase_20170818.vhd", "ssh_username":"root", "instance_type":"ecs.t5-lc1m1.small", "internet_charge_type":"PayByTraffic", "io_optimized":"true", "tags": { "version": "v1.0.0", "app": "web" } }] }
システムディスクのみに基づいてイメージを作成するかどうかを制御するために使用されるパラメーター
- フィールド: image_ignore_data_disks データ型: boolean。
- アプリケーションシナリオ: デフォルトでは、PackerはECSインスタンスから直接イメージを作成します。 ECSインスタンスにデータディスクがある場合、生成されたイメージにはデータディスクスナップショットが含まれます。 次のいずれかの方法を使用して、データディスクを持つインスタンスを作成できます。
- 方法1: image_disk_mappingsにデータディスクパラメーターを設定します。 詳細については、「Packerドキュメント」の「Alicloud Image Builder」をご参照ください。
- 方法2: デフォルトでデータディスクに付属するインスタンスタイプ (ecs.d1ne.2xlargeなど) を選択します。 インスタンスタイプにデフォルトで付属するデータディスクは、通常、ローカルディスクです。 ローカルディスクのスナップショットは作成できません。 したがって、そのようなインスタンスタイプのインスタンスから直接イメージを作成することはできません。
- 機能: デフォルトでデータディスクに付属するインスタンスタイプを選択したいが、作成したイメージにデータディスクスナップショットを含ませたくない場合は、設定ファイルに
image_ignore_data_disks ": " true "
を追加できます。 これにより、イメージはシステムディスクのみに基づいて作成されます。
スナップショットタイムアウト期間の設定に使用されるパラメーター
- フィールド: wait_snapshot_ready_timeout データ型: 整数。 デフォルト値は 3600 です。 単位は秒です。
- 対象のシナリオ:スナップショットに基づいてイメージが作成されます。 ディスクのスナップショットの作成にかかる時間は、ディスクサイズによって異なります。 ディスクが大きいほど、時間がかかります。
- 機能: 大型ディスクのスナップショットを作成するときにタイムアウトエラーが発生した場合は、
wait_snapshot_ready_timeout
に大きな値を指定して、スナップショットのタイムアウト期間を延長します。
プライベートIPアドレスを使用してインスタンスに接続するかどうかを制御するために使用されるパラメーター
- フィールド: ssh_private_ip。 データ型: boolean。
- 適用シナリオ: デフォルトでは、PackerはElastic IPアドレス (EIP) を作成し、Packerがカスタムイメージを作成するときにこのEIPを一時的なECSインスタンスに関連付けます。 次に、PackerはEIPに対応するパブリックIPアドレスを使用してインスタンスに接続し、インスタンスにソフトウェアをインストールするか、コマンドを実行します。 PackerがプライベートIPアドレスを使用してインスタンスに接続できる場合、パブリックIPアドレスは必要ありません。
- 機能:
ssh_private_ip
をtrueに設定した場合、Packerは一時インスタンスにEIPまたはパブリックIPアドレスを割り当てませんが、プライベートIPアドレスを使用してインスタンスに接続します。
インスタンスを停止するかどうかを制御するパラメーター
- フィールド: disable_stop_instance データ型: boolean。
- 適用可能なシナリオ: デフォルトでは、Packerがプロビジョニングを実行した後、インスタンスを停止し、インスタンスからイメージを作成します。 ただし、一部のシナリオ (WindowsインスタンスでSysprepを実行する場合など) では、インスタンスは [実行中] 状態である必要があります。
Sysprepの適用可能なシナリオの詳細については、「Windows ECSインスタンスのSIDを変更してドメイン環境を作成する」をご参照ください。
- 機能:
disable_stop_instance
をtrueに設定すると、Packerはインスタンスを停止しませんが、設定 (プロビジョニング) で提供されるコマンドがインスタンスを自動的に停止すると想定します。
WinRMを有効にするためのUserDataファイルパスを指定するために使用されるパラメータ
- フィールド: user_data_file
- 対象のシナリオ:セキュリティ上の理由から、Windowsイメージで WinRM (Windows Remote Management) 機能はデフォルトで無効になっています。 ただし、PackerはWinRM関数を使用してWindowsインスタンスに接続し、インスタンスでコマンドを実行する必要があります。 Windowsインスタンスを作成するときに、UserDataファイルを使用してWinRMを有効にできます。
- 機能:
user_data_file
パラメーターを使用して、UserDataファイルへのパスを指定できます。 たとえば、user_data_fileの値をexamples.ps1に設定できます。 - 例: 次のサンプルコードでは、UserDataファイルは相対パスexamples/alicloud/basic/winrm_enable_userdata.ps1にあります。
{ "variables": { "access_key": "{{env `ALICLOUD_ACCESS_KEY`}}", "secret_key": "{{env `ALICLOUD_SECRET_KEY`}}" }, "builders": [{ "type":"alicloud-ecs", "access_key":"{{user `access_key`}}", "secret_key":"{{user `secret_key`}}", "region":"cn-beijing", "image_name":"packer_test", "source_image":"win2008r2_64_ent_sp1_zh-cn_40G_alibase_20181220.vhd", "instance_type":"ecs.n1.tiny", "io_optimized":"true", "internet_charge_type":"PayByTraffic", "image_force_delete":"true", "communicator": "winrm", "winrm_port": 5985, "winrm_username": "Administrator", "winrm_password": "Test1234", "user_data_file": "examples/alicloud/basic/winrm_enable_userdata.ps1" }], "provisioners": [{ "type": "powershell", "inline": ["dir c:\\"] }] }
説明- 上記のサンプルコードでは、
"communicator": "winrm"
は、WinRMを介してインスタンスに接続されていることを示します。「winrm_port」: 5985
は、通信ポートがポート5985であることを示す。"winrm_username": "Administrator"
は、インスタンスに管理者として接続していることを示します。"winrm_password": "Test1234"
は、Password Test1234が使用されていることを示します。
"image_force_delete":"true"
は、既存のイメージが作成されるイメージと同じ名前である場合に削除されることを示します。
- 上記のサンプルコードでは、
オンプレミスISOファイルに基づいてイメージを作成し、イメージをAlibaba Cloud ECSにインポートするために使用されるパラメーター
- フィールド: builders{"type":"qemu"} およびポストプロセッサ {"type":"alicloud-import"} 。
- 該当するシナリオ: オンプレミスISOファイルがQEMUベース以外の仮想化環境で実行されている場合、Packerを使用してファイルに基づいてイメージを作成し、イメージをAlibaba Cloud ECSにインポートできます。
- 例: オンプレミス環境がQEMUに基づいている場合、Packerを使用してイメージを作成し、そのイメージをAlibaba Cloud ECSにインポートできます。 詳細については、「Packerを使用したオンプレミスイメージの作成とインポート」をご参照ください。
- オンプレミス仮想化環境またはQEMU builderなどのビルダーを使用して、オンプレミスイメージを作成します。
- Alicloud Import Post-Processorを定義して、生成されたオンプレミスイメージをAlibaba Cloud ECSにインポートします。
ISOファイルをAlibaba Cloud ECSにインポートするには、まず仮想化環境をオンプレミスにインストールし、そのファイルに基づいてイメージを作成する必要があります。 イメージは、Alibaba Cloudでサポートされている形式 (QCOW2、VHD、RAW形式など) である必要があります。 その後、イメージをAlibaba Cloud ECSにインポートできます。 詳細については、「イメージのインポート手順」をご参照ください。