sacloud / packer-plugin-sakuracloud

:package:A builder plugin of packer for SakuraCloud:cherry_blossom:
Mozilla Public License 2.0
16 stars 8 forks source link
packer sakuracloud sakuracloud-packer

packer-plugin-sakuracloud

Test Status Discord License Version Downloads

A plugin of packer for SAKURA Cloud / さくらのクラウド用Packerプラグイン

概要

packer-plugin-sakuracloudさくらのクラウドでの アーカイブ(構築済みOSのテンプレート)をPackerで作成するためのPackerプラグインです。

必要なもの

:warning: packer-plugin-sakuracloud v0.7以降ではpacker v1.7以降が必要となります。
1.7以前のpackerを利用したい場合はv0.7より古いバージョンをご利用ください。

実行方法

以下の何かの方法でプラグインをインストールしてpackerコマンドを実行します。

packer initを利用

HCLテンプレートでのみ利用可能です。
テンプレートに以下のようなrequired_pluginブロックを記載しpacker initでプラグインをインストールします。

packer {
  required_plugins {
    sakuracloud = {
      version = ">= 0.7.0"
      source = "github.com/sacloud/sakuracloud"
    }
  }
}

プラグインの手動インストール

リリースページから各プラットフォーム用のバイナリをダウンロードし、 以下のドキュメントに記載されている所定のディレクトリに配置します。

https://www.packer.io/docs/plugins

Dockerでの実行

Dockerで実行する場合、以下のように実行します。

docker run -it --rm ghcr.io/sacloud/packer:latest [packerサブコマンド] [packerオプション]

APIキーを環境変数で指定する場合、-eオプションなどを適切に指定して実行してください。

# APIキーを環境変数で指定、カレントディレクトリのexample.jsonをテンプレートとして指定してビルドする例
$ docker run -it --rm \
         -e SAKURACLOUD_ACCESS_TOKEN \
         -e SAKURACLOUD_ACCESS_TOKEN_SECRET \
         -v $PWD:/work \
         -w /work \
         ghcr.io/sacloud/packer:latest build example.pkr.hcl

:bulb: ghcr.io/sacloud/packerにはプラグインが手動インストール済みです。このためpacker initは不要です。

homebrewを利用する場合(macOSでHomebrewをご利用の場合)

v0.7以降homebrewはサポートされなくなりました。
packer init、またはプラグインの手動インストールにてご利用ください。

使い方(アーカイブ作成)

APIキーの設定

APIキーを環境変数に設定しておきます。 (APIキーは以下で作成するjsonファイルに記載する方法もあります)

$ export SAKURACLOUD_ACCESS_TOKEN=[APIトークン]
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET=[APIシークレット]

テンプレートファイルの作成(HCL)

Packer 1.5以降で利用できるHCLテンプレートに対応しています。

:bulb: JSONテンプレートを利用したい場合は次節テンプレートファイルの作成(JSON)を参照してください。

以下の様なファイルを作成し拡張子を.pkr.hclとすることでpacker buildが実行できます。

# Dockerから利用、またはプラグインの手動インストールを行う場合は以下のブロックをコメントアウトしてください。
packer {
  required_plugins {
    sakuracloud = {
      version = ">= 0.7.0"
      source = "github.com/sacloud/sakuracloud"
    }
  }
}

source "sakuracloud" "example" {
  zone = "is1b" # アーカイブを作成する対象ゾーン
  zones = ["is1a", "is1b", "tk1a", "tk1v"] # 作成したアーカイブを転送する宛先ゾーン

  os_type   = "centos7"
  password  = "TestUserPassword01"
  disk_size = 20
  disk_plan = "ssd"

  core        = 2
  memory_size = 4

  archive_name        = "packer-example-centos"
  archive_description = "description of archive"
}

build {
  sources = [
    "source.sakuracloud.example"
  ]
  provisioner "shell" {
    inline = [
      "yum update -y",
      "curl -fsSL https://get.docker.com/ | sh",
      "systemctl enable docker.service",
    ]
  }
}

テンプレートファイルの作成(JSON)

以下の例は石狩第2ゾーン(is1b)に、CentOSパブリックアーカイブをベースとしたアーカイブを作成します。 プロビジョニングとして、shellにてdockerのインストールを行なっています。

packer用jsonファイルの例

$ cat <<EOF > example.json
{
    "builders": [{
        "type": "sakuracloud",
        "zone": "is1b",
        "os_type": "centos7",
        "password": "TestUserPassword01"
    }],
    "provisioners":[
    {
        "type": "shell",
        "inline": [
            "yum update -y",
            "curl -fsSL https://get.docker.com/ | sh",
            "systemctl enable docker.service"
        ]
    }]
}
EOF

作成したら以下のようにpacker buildを実行すると、さくらのクラウド上にアーカイブが作成されます。

$ packer build example.json

さくらのクラウド上のパブリックアーカイブだけでなく、ISOイメージからの構築も可能です。 詳細はテンプレートのサンプルを参照してください。

オプション一覧

jsonファイルで指定できるオプションの一覧は以下の通りです。

必須項目

説明
centos CentOS(最新安定板)
centos7 CentOS 7
almalinux Alma Linux(最新安定板)
almalinux9 Alma Linux 9
almalinux8 Alma Linux 8
rockylinux Rocky Linux(最新安定板)
rockylinux9 Rocky Linux 9
rockylinux8 Rocky Linux 8
miracle MIRACLE LINUX(最新安定板)
miracle8 MIRACLE LINUX 8
ubuntu Ubuntu(最新安定板)
ubuntu2204 Ubuntu 22.04
ubuntu2004 Ubuntu 20.04
ubuntu1804 Ubuntu 18.04
debian Debian(最新安定板)
debian11 Debian11
debian10 Debian10
kusanagi Kusanagi(CentOS7)
custom 任意のアーカイブID/ディスクIDを指定する場合
iso さくらのクラウド上のISOイメージ、
またはURLを指定してISOイメージをダウンロードする場合

os_typecustomの場合、source_archive 又は source_diskの何れかの指定が必須です。

os_typeisoの場合、iso_id、または以下のISOイメージ関連の値の指定が必須です。

isoの場合の詳細はISOイメージ関連項目の指定についてを参照ください。

オプション項目

boot_commandはPackerのVMWare Builder(from ISO)Qemu Builderと 互換性があります。

Note: ssh_private_key_fileが未指定の場合、packer build実行時に秘密鍵/公開鍵が生成されます。
ssh_private_key_fileを指定した場合、指定された秘密鍵から公開鍵を生成します。

生成されたSSH公開鍵は作成するサーバがディスクの修正 APIに対応している場合はディスクの修正APIを通じてサーバに登録されます。
この挙動はdisable_generate_public_keyオプションで制御可能です。

ISOイメージ関連項目の指定について

ISOイメージから構築する場合、以下の項目を指定してください。

さくらのクラウド上のISOイメージを利用する場合

例:

        "os_type": "iso",
        "iso_id": 123456789012,

ISOイメージをダウンロードして利用する場合

ダウンロード元のURLなどを以下のように指定します。 PackerがISOイメージをダウンロードし、さくらのクラウド上へアップロードします。

例:

        "os_type": "iso",
        "iso_url": "http://ftp.tsukuba.wide.ad.jp/software/vyos/iso/release/1.1.7/vyos-1.1.7-amd64.iso",
        "iso_checksum": "c40a889469e0eea43d92c73149f1058e3650863b",
        "iso_checksum_type": "sha1",

boot_commandについて

boot_commandには通常の文字に加え、以下の特殊キーが指定可能です。

使用例

この例は以下のキーを入力します。

"boot_command": [
    "<leftAltOn><leftCtrlOn><del><leftAltOff><leftCtrlOff>",
    "<wait10>",
    "put-your-password<enter>"
]

その他の利用例や詳細は以下のテンプレートサンプルを参照してください。

テンプレートサンプル

以下のサンプルを用意しています。

パブリックアーカイブからの構築サンプル

ISOイメージからの構築サンプル

License

packer-plugin-sakuracloud Copyright (C) 2016-2023 The packer-plugin-sakuracloud Authors.

This project is published under MPL-2.0.