A plugin of packer for SAKURA Cloud / さくらのクラウド用Packerプラグイン
packer-plugin-sakuracloudはさくらのクラウドでの
アーカイブ(構築済みOSのテンプレート)をPackerで作成するためのPackerプラグインです。
packer v1.7+:warning:
packer-plugin-sakuracloudv0.7以降ではpackerv1.7以降が必要となります。
1.7以前のpackerを利用したい場合はv0.7より古いバージョンをご利用ください。
以下の何かの方法でプラグインをインストールしてpackerコマンドを実行します。
packer initを利用(HCLテンプレートのみ)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 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キーは以下で作成するjsonファイルに記載することも可能です)
$ export SAKURACLOUD_ACCESS_TOKEN=[APIトークン]
$ export SAKURACLOUD_ACCESS_TOKEN_SECRET=[APIシークレット]
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",
]
}
}
以下の例は石狩第2ゾーン(is1b)に、CentOSパブリックアーカイブをベースとしたアーカイブを作成します。
プロビジョニングとして、shellにてdockerのインストールを行なっています。
$ 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ファイルで指定できるオプションの一覧は以下の通りです。
access_token(string): APIトークン。この値は環境変数SAKURACLOUD_ACCESS_TOKENで指定することも可能です。
access_token_secret(string): APIシークレット。この値は環境変数SAKURACLOUD_ACCESS_TOKEN_SECRETで指定することも可能です。
zone(string): 対象ゾーン。以下の値が指定可能です。
is1a: 石狩第1ゾーンis1b: 石狩第2ゾーンtk1a: 東京第1ゾーンtk1b: 東京第2ゾーンos_type(string): ベースとするアーカイブの種別。以下の値が指定可能です。
| 値 | 説明 |
|---|---|
centos | CentOS(最新安定板) |
centos8 | CentOS 8 |
centos8stream | CentOS 8 Stream |
centos7 | CentOS 7 |
centos6 | CentOS 6 |
ubuntu | Ubuntu(最新安定板) |
ubuntu2004 | Ubuntu 20.04 |
ubuntu1804 | Ubuntu 18.04 |
ubuntu1604 | Ubuntu 16.04 |
debian | Debian(最新安定板) |
debian10 | Debian10 |
debian9 | Debian9 |
coreos | CoreOS |
rancheros | RancherOS |
k3os | k3OS |
kusanagi | Kusanagi(CentOS7) |
freebsd | FreeBSD |
windows2016 | Windows 2016 |
windows2016-rds | Windows 2016(RDS) |
windows2016-rds-office | Windows 2016(RDS + Office) |
windows2016-sql-web | Windows 2016 SQLServer(Web) |
windows2016-sql-standard | Windows 2016 SQLServer(Standard) |
windows2016-sql-standard-all | Windows 2016 SQLServer(RDS+Office) |
windows2019 | Windows 2019 Datacenter Edition |
custom | 任意のアーカイブID/ディスクIDを指定する場合 |
iso | さくらのクラウド上のISOイメージ、 またはURLを指定してISOイメージをダウンロードする場合 |
os_typeがcustomの場合、source_archive 又は source_diskの何れかの指定が必須です。
os_typeがisoの場合、iso_id、または以下のISOイメージ関連の値の指定が必須です。
iso_urlまたはiso_urls : ISOイメージのURLiso_checksum/iso_checksum_url: ISOイメージのチェックサム、またはチェックサムを記載したファイルのURLiso_checksum_type: チェックサムの形式(none, md5, sha1, sha256, or sha512のいずれか)isoの場合の詳細はISOイメージ関連項目の指定についてを参照ください。
zones: 作成したアーカイブを転送する宛先ゾーン名のリスト。以下のいずれかの値を指定(複数指定可)
is1a: 石狩第1ゾーンis1b: 石狩第2ゾーンtk1a: 東京第1ゾーンtk1b: 東京第2ゾーンtk1v: サンドボックスuser_name(string): SSH/WinRM接続時のユーザー名
os_typeにWindows系を指定した場合のデフォルト値:Administrator
os_typeがWindows系以外の場合のデフォルト値:root
password(string): SSH/WinRM接続時のパスワード
us_keyboard(bool): ISOイメージからのインストール時、コマンド送信にUSキーボードレイアウトを利用するか、デフォルト値:false
disk_size(int): 作成するディスクのサイズ(GB単位)、デフォルト値:20
disk_connection(string): ディスク接続方法、以下の値が指定可能です。デフォルト値:virtio
ide: IDE接続virtio: 準仮想モード(virtio)disk_plan(string): ディスクプラン、以下の値が指定可能です。デフォルト値:ssd
ssd: SSDプランhdd: 通常プラン(ハードディスク)core(int): CPUコア数。デフォルト値:1
memory_size(int): メモリサイズ(GB単位)、デフォルト値:1
disable_virtio_net(bool): trueの場合、NICでの仮想化ドライバ利用を無効化します。デフォルト値:false
source_archive(int64): 元となるアーカイブのID、os_typeがwindows、又はcustomの場合に指定可能です。
source_disk(int64): 元となるディスクのID、os_typeがcustomの場合のみ指定可能です。
iso_size(int): アップロードするISOファイルのサイズ、5または10が指定可能(GB単位)、デフォルト値: 5
iso_name(string): アップロードするISOファイルの名前、デフォルト値: iso_checksumが空でない場合はiso_checksum、以外はタイムスタンプから自動生成
archive_name(string): 作成されるアーカイブの名前
archive_tags([]string): 作成されるアーカイブに付与するタグ、デフォルト値:なし(空の場合、かつ祖先にパブリックアーカイブが存在する場合は祖先となったパブリックアーカイブからタグを引き継ぐ)
archive_description(string): 作成されるアーカイブに付与する説明
boot_wait(duration): 仮想マシンのプロビジョニング開始までの起動からの待ち時間。10s、1mのように指定する。デフォルト値:0s
boot_command([]string): 仮想マシン作成後にVNC経由で仮想マシンに送信するキーボード入力。デフォルト値:なし
boot_commandはPackerのVMWare Builder(from ISO)やQemu Builderと
互換性があります。
api_client_timeout(duration): ディスクのコピーやアーカイブ作成待ちなどの、さくらのクラウドAPI呼び出しで利用するタイムアウト時間。10s、1mのように指定する。デフォルト値:20m
SSH関連オプション: SSHキー関連の挙動を指定します。
disable_generate_public_key: trueの場合、秘密鍵に対応する公開鍵の生成/さくらのクラウドAPIを通じての公開鍵アップロードを行いません。ssh_private_key_file: 秘密鍵ファイルのパスNote: ssh_private_key_fileが未指定の場合、packer build実行時に秘密鍵/公開鍵が生成されます。
ssh_private_key_fileを指定した場合、指定された秘密鍵から公開鍵を生成します。
生成されたSSH公開鍵は作成するサーバがディスクの修正 APIに対応している場合はディスクの修正APIを通じてサーバに登録されます。
この挙動はdisable_generate_public_keyオプションで制御可能です。
ISOイメージからの構築を行う場合、以下の項目を指定してください。
os_typeにisoを指定iso_idに利用したいISOイメージのIDを指定例:
"os_type": "iso",
"iso_id": 123456789012,
ダウンロード元のURLなどを以下のように指定します。 PackerがISOイメージのダウンロードを行い、さくらのクラウド上へアップロードを行います。
os_typeにisoを指定iso_urlまたはiso_urls にISOイメージのURLを指定iso_checksum/iso_checksum_url: ISOイメージのチェックサム、またはチェックサムを記載したファイルのURLを指定iso_checksum_type: チェックサムの形式(none, md5, sha1, sha256, or sha512のいずれか)を指定例:
"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には通常の文字に加え、以下の特殊キーが指定可能です。
<bs> - バックスペース<del> - デリート<enter> <return> - エンター(リターン)キー<esc> - エスケープ<tab> - タブ<f1> - <f12> - ファンクションキー(F1〜F12)<up> <down> <left> <right> - 矢印キー<spacebar> - スペース<insert> - インサート<home> <end> - ホーム、エンド<pageUp> <pageDown> - ページアップ、ページダウン<leftAlt> <rightAlt> - 左右それぞれのオルト<leftCtrl> <rightCtrl> - 左右それぞれのコントロール<leftShift> <rightShift> - 左右それぞれのシフト<leftAltOn> <rightAltOn> - オルトを押下している状態にする<leftCtrlOn> <rightCtrlOn> - コントロールを押下している状態にする<leftShiftOn> <rightShiftOn> - シフトを押下している状態にする<leftAltOff> <rightAltOff> - オルトを押下解除する<leftCtrlOff> <rightCtrlOff> - コントロールを押下解除する<leftShiftOff> <rightShiftOff> - シフトを押下解除する<wait> <wait5> <wait10> - 指定秒数待機<waitXX> - 指定時間待機する。待機数量 + 単位で指定する。例: <wait10s> <wait1m>この例は以下ののキー入力を行うものです。
"boot_command": [
"<leftAltOn><leftCtrlOn><del><leftAltOff><leftCtrlOff>",
"<wait10>",
"put-your-password<enter>"
]
その他の利用例や詳細は以下のテンプレートサンプルを参照してください。
以下のサンプルを用意しています。
[CentOS]: CentOSパブリックアーカイブからの構築
[CoreOS]: CoreOSパブリックアーカイブからの構築
[Ubuntu]: Ubuntuパブリックアーカイブからの構築
[Windows]: Windows Server 2012パブリックアーカイブから、boot_commandでWinRMを有効にする構成
[Windows2016]: Windows Server 2016パブリックアーカイブから、boot_commandでWinRMを有効にする構成
Windowsパブリックアーカイブから構築したサーバーに対し、boot_commandにて初回ログイン〜WinRMの有効化までを行います。
WinRMの有効化にはAnsibleが公開しているPowerShellスクリプトを用いています。
WinRMでの接続後にPowerShellでのプロビジョニングを行います。
packer-plugin-sakuracloud Copyright (C) 2016-2021 The packer-plugin-sakuracloud Authors.
This project is published under MPL-2.0.
Content type
Image
Digest
Size
77.2 MB
Last updated
over 5 years ago
docker pull sacloud/packer