Packerでマシンイメージを管理する

packer

リンクバル技術部の川畑です。サーバの構成管理はどこの会社でも課題になっていると思われます。このあたり構成管理ツールをつかってコードをGitHubとかで管理していきたいですね。構成管理ツールでもマシンイメージ・ミドルウェア・デプロイツールなどいくつかの階層によって適用できるツールがあると思われるのですが、今回はマシンイメージを管理する「Packer」を検証してみました。

1.Packer設定ファイル

  • json形式で記載
  • 「builder」でマシン環境を定義
  • 「provisioners」でサーバ上の動作を定義
  • ここでは「digitalocean.json」で保存
{
"builders": [{
"type": "digitalocean",
"api_token": "<DigitalOceanのAPIトークン>",
"image": "ubuntu-16-04-x64",
"region": "sgp1",
"ssh_username": "root",
"size": "512mb",
"snapshot_name": "linkbal-packer-test {{timestamp}}"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sleep 30",
"sudo apt-get upgrade"
]
}]
}

2.設定ファイル構文チェック

  • Packer設定ファイルの構文が正しいかをチェック
kawabata$ packer validate digital.json
Template validated successfully.

3.イメージ作成

  • Packer設定ファイルの内容を実行して、新しいイメージをビルド
kawabata$ packer build digital.json
digitalocean output will be in this color.

==> digitalocean: Creating temporary ssh key for droplet...
==> digitalocean: Creating droplet...
==> digitalocean: Waiting for droplet to become active...
==> digitalocean: Waiting for SSH to become available...
==> digitalocean: Connected to SSH!
==> digitalocean: Provisioning with shell script: /var/folders/2m/6vlfpttn2_v52m6nmmls03b0_hvfdt/T/packer-shell546848099
digitalocean: Reading package lists...
digitalocean: Building dependency tree...
digitalocean: Reading state information...
digitalocean: Calculating upgrade...
digitalocean: 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
==> digitalocean: Gracefully shutting down droplet...
==> digitalocean: Creating snapshot: linkbal-packer 1485762269
==> digitalocean: Waiting for snapshot to complete...
==> digitalocean: Destroying droplet...
==> digitalocean: Deleting temporary ssh key...
Build 'digitalocean' finished.

==> Builds finished. The artifacts of successful builds are:
--> digitalocean: A snapshot was created: 'linkbal-packer 1485762269' (ID: 22512428) in region 'sgp1'

実行開始後、DigitalOceanコンソールの「Droplets」を確認するとイメージを作成するためにサーバが起動されている

実行完了後、DigitalOceanコンソールの「Images」を確認すると新規イメージが作成されている

DigitalOceanコンソールの「Droplets」からはサーバが削除されている

まずは使ってみた感想

  • 今回はDigitalOceanのデフォルトのイメージからDropletsを作成し、インストールされているパッケージを最新にするといった流れを検証
  • AWS・GCP・AzureなどのIaaSやVMWare・VirtualBoxにも対応しており、ハイブリッドでマシンイメージを管理する時には便利そう
  • Dockerのイメージ管理もできるので、Dockerを使用して開発している環境では、バージョン管理などが便利そう

※参考

リンクバルでは エンジニアを積極募集中 です。興味のある方のご応募お待ちしております。