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

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

最終更新日:Jan 11, 2024

Packerは、画像の作成に使用できる軽量のオープンソースツールです。 Packerは、Windows、Linux、macOSなどの主流のオペレーティングシステムで動作し、複数のプラットフォーム用の仮想マシンイメージを同期的かつ効率的に作成できます。 このトピックでは、Packerをインストールする方法と、Packerを使用してカスタムイメージを作成する方法について説明します。

前提条件

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

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

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

背景情報

Packerは、BuildersProvisionersPost-Processorsなどのさまざまなコンポーネントで構成され、Hashicorp構成言語 (HCL) またはJSON形式のテンプレートを使用してカスタムイメージの作成プロセスを簡素化します。 さらに、Packerはイメージ作成プロセスを標準化および自動化し、クラウド移行を容易にするコードとしてイメージを定義できます。 このトピックでは、Linux Elastic Compute Service (ECS) インスタンスを使用します。 WindowsでPackerをインストールする方法については、「Packerのインストール」をご参照ください。

手順

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

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

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

  2. 次のコマンドを実行して、/usr/local/binディレクトリに移動します。

    cd /usr /ローカル /ビン
    説明

    /usr/local/binディレクトリは環境変数に含まれます。 このディレクトリまたは環境変数に追加された別のディレクトリにPackerをインストールできます。

  3. 次のコマンドを実行して、Packerインストールパッケージを取得します。

    [Packerのインストール] ページに移動して、Linuxインスタンスのオペレーティングシステムとアーキテクチャに適したPackerインストールパッケージを取得することもできます。 この例では、packer_1.8.5_linux_amd64.zipインストールパッケージが取得されます。

    wget https://releases.hashicorp.com/packer/1.8.5/packer_1.8.5_linux_amd64.zip
  4. 次のコマンドを実行して、Packerインストールパッケージを解凍します。

    unzip packer_1.8.5_linux_amd64.zip
  5. 次のコマンドを実行して、Packerがインストールされているかどうかを確認し、Packerのバージョンを確認します。

    パッカー-v
    • Packerが正しくインストールされている場合は、Packerバージョン番号が返されます。

    • Packerが正しくインストールされていない場合、command not foundメッセージが返されます。 Packerが存在するディレクトリが環境変数に追加されているかどうかを確認します。

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

Packerを使用してカスタムイメージを作成するには、HCLまたはJSON形式のテンプレートを作成します。 テンプレートで、ビルダーとプロビジョニングを指定します。 詳細については、「Builders」および「Provisioners」をご参照ください。 Packerは、カスタムイメージの作成に使用できるさまざまなプロビジョニングを提供します。 この例では、Shell provisionerが使用されます。

  1. 次のコマンドを実行して、AccessKey IDをインポートします。

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

    上記のコマンドで、<AccessKey ID> をAccessKey IDに置き換えます。 RAMユーザーのAccessKey IDを照会する方法については、「RAMユーザーのAccessKeyペアに関する情報の表示」をご参照ください。

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

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

    上記のコマンドで、<AccessKey Secret> をAccessKey secretに置き換えます。 RAMユーザーのAccessKeyシークレットは、RAMユーザーのAccessKeyペアを作成した場合にのみ表示されます。 AccessKeyペアの作成後、AccessKeyシークレットを照会することはできません。 詳細については、「AccessKeyペアの作成」をご参照ください。

  3. 次のコマンドを実行して、alicloudという名前のファイルを作成します。

    説明

    alicloudファイルはHCLまたはJSON形式で作成できます。 HCL形式でファイルを作成する場合は、HCL形式のテンプレートに適した後続の操作を実行します。

    HCLファイル

    vi alicloud.pkr.hcl

    JSONファイル

    vi alicloud.json
  4. Iキーを押してInsertモードに入り、ビジネス要件に基づいて次のコンテンツのパラメーターを設定し、そのコンテンツをalicloudファイルに貼り付けます。

    HCLファイル

    変数 "access_key" {
      type = string
      default = "${env(" ALICLOUD_ACCESS_KEY ")}"
    }
    
    変数 "secret_key" {
      type = string
      default = "${env(" ALICLOUD_SECRET_KEY ")}"
    }
    
    ソース "alicloud-ecs" "autogeneated_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"
           ]
         }]
       }

    下表に、各パラメーターを説明します。

    パラメーター

    説明

    region

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

    image_name

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

    source_image

    一時インスタンスの作成に使用されるベースイメージの名前。 ECSコンソールのパブリックイメージリストから、またはDescribeImages操作を呼び出して、ベースイメージの名前を取得できます。

    重要

    選択したベースイメージが、一時インスタンスを作成するために指定したインスタンスタイプをサポートしていることを確認してください。 たとえば、ベースイメージがIDに_arm64_が含まれるARMイメージの場合、ARMベースのインスタンスタイプを指定する必要があります。 それ以外の場合、カスタムイメージは作成できません。

    instance_type

    カスタムイメージの作成に使用される一時インスタンスのインスタンスタイプ。 例: ecs.g6.large カスタムイメージが作成されると、一時インスタンスは自動的にリリースされます。

    説明

    Packerがカスタムイメージを作成すると、CreateInstance操作が呼び出されて一時インスタンスが作成されます。 インスタンスには、カスタムイメージの作成に必要なオペレーティングシステムとソフトウェアが含まれています。 一時インスタンスは従量課金インスタンスです。 インスタンスに対して課金されます。

    internet_charge_type

    カスタムイメージの作成に使用される一時インスタンスのネットワーク使用の課金方法。 有効な値:

    • 帯域幅課金

    • トラフィック課金

    provisioners

    カスタムイメージの作成に使用されるプロビジョニングの種類。 有効な値:

    • ファイル

    • PowerShell

    • シェル

    • ローカルシェル

    • Windowsシェル

    詳細については、「Provisioners」をご参照ください。

  5. Escキーを押して :wqと入力し、enterキーを押して変更を保存し、挿入モードを終了します。

ステップ3: Packerを使用してカスタムイメージを作成する

作成したPackerテンプレートを使用してカスタムイメージを作成するには、次の操作を実行します。

  1. 次のコマンドを実行して、カスタムイメージを作成します。

    HCLファイル

    パッカービルドalicloud.pkr.hcl

    次のサンプルコマンド出力は、IDがm-m5e3f0gu2dxs4z0s **** であるカスタムイメージが中国 (青島) リージョンに作成されていることを示しています。

    alicloud-ecs.autogenerated_1: 出力はこの色になります。
    
    ==> alicloud-ecs.autogenerated_1: ソースリージョンとコピーされたリージョンの事前検証...
    ==> alicloud-ecs.autogenerated_1: イメージ名の事前検証...
        alicloud-ecs.autogenerated_1: 画像ID: aliyun_3_x64_20G_alibase_20220907.vhd
    ==> alicloud-ecs.autogenerated_1: 一時的なキーペアの作成: packer_64bf3d40-2fe7-8251-276d-df59a0bb ****
    ---------------------------
    ==> alicloud-ecs.autogenerated_1: シェルスクリプトによるプロビジョニング: /tmp/packer-shell3356722207
        alicloud-ecs.autogenerated_1: 最後のメタデータ有効期限チェック: 0:00:11 ago on Tue 25 July 2023 11:12:18 AM CST。
    ---------------------------
        alicloud-ecs.autogenerated_1: Complete!
    ==> alicloud-ecs.autogenerated_1: インスタンスの停止: i-m5e87pt498pr8zv0 ****
    ==> alicloud-ecs.autogenerated_1: 待機中のインスタンス停止: i-m5e87pt498pr8zv0 ****
    ==> alicloud-ecs.autogenerated_1: イメージの作成: packer_basic
        alicloud-ecs.autogenerated_1: インスタンスから **** packer_64bf3d40-2fe7-8251-276d-df59a0bbキーペアを取り外す: i-m5e87pt498pr8zv0 ****
    ==> alicloud-ecs.autogenerated_1: 「EIP」のクリーンアップ
    ==> alicloud-ecs.autogenerated_1: 「インスタンス」のクリーンアップ
    ==> alicloud-ecs.autogenerated_1: 「セキュリティグループ」のクリーンアップ
    ==> alicloud-ecs.autogenerated_1: 「vSwitch」のクリーンアップ
    ==> alicloud-ecs.autogenerated_1: 「VPC」のクリーンアップ
    ==> alicloud-ecs.autogenerated_1: 一時的なキーペアの削除...
    'alicloud-ecs. autogeneated_1 'の構築は、4分32秒後に終了しました。
    
    ==> 4分32秒後に完了した待機
    
    ==> 完成したビルド。 成功したビルドの成果物は次のとおりです。-> alicloud-ecs.autogenerated_1: Alicloud画像が作成されました:
    
    cn-qingdao: m-m5e3f0gu2dxs4z0s **** 

    JSONファイル

    パッカービルドalicloud.json

    次のサンプルコマンド出力は、IDがm-m5e3f0gu2dxs4z0s **** であるカスタムイメージが中国 (青島) リージョンに作成されていることを示しています。

    alicloud-ecs出力はこの色になります。
    
    ==> alicloud-ecs: Prevalidating image name...
        alicloud-ecs: 見つかったイメージID: aliyun_3_x64_20G_alibase_20220907.vhd
    ==> alicloud-ecs: 一時的なキーペアの作成: packer_6345090e-ec1f-8ea0-348c-f85ba047 ****
    ==> alicloud-ecs: vpcの作成
    ---------------------------
    ==> alicloud-ecs: シェルスクリプトを使用したプロビジョニング: /tmp/packer-shell090019677
        alicloud-ecs: 最後のメタデータの有効期限チェック: 0:00:15 ago 10月11日火曜日2022 02:12:51 PM CST。
    ---------------------------
        alicloud-ecs: Complete!
    ==> alicloud-ecs: イメージスナップショットを削除します。
    ==> alicloud-ecs: Creating image: packer_basic
        alicloud-ecs: デタッチキーペアpacker_6345090e-ec1f-8ea0-348c-f85ba047 **** インスタンスから: i-m5e7it5p4dpwetfr ****
    ==> alicloud-ecs: 「EIP」のクリーンアップ
    ==> alicloud-ecs: 「インスタンス」のクリーンアップ
    ==> alicloud-ecs: 「セキュリティグループ」のクリーンアップ
    ==> alicloud-ecs: 「vSwitch」のクリーンアップ
    ==> alicloud-ecs: 'VPC' のクリーンアップ
    ==> alicloud-ecs: 一時的なキーペアの削除...
    Build 'alicloud-ecs' finished.
    
    ==> Builds finished. 成功したビルドの成果物は次のとおりです。-> alicloud-ecs: Alicloudイメージが作成されました:
    
    cn-qingdao: m-m5e3f0gu2dxs4z0s **** 
  2. 作成したカスタムイメージを表示します。

    1. ECSコンソールにログインします。

    2. 左側のナビゲーションウィンドウで、[インスタンスとイメージ] > [イメージ] を選択します。

    3. 上部のナビゲーションバーの左上隅で、alicloudファイルで指定されているリージョンを選択します。 例: 中国 (青島) 。

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

次のステップ

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