LoginSignup
3
1

More than 5 years have passed since last update.

Packerやってみる

Last updated at Posted at 2016-12-13

それ何?

Packerは1つのコンフィグファイルから複数のプラットフォーム上に常に同一のマシンイメージを作るためのツールです。

複数のプラットフォームって何のこと?

Packerがマシンイメージを作成できるプラットフォームは以下の通りです。

  • Amazon EC2
  • CloudStack
  • DigitalOcean
  • Docker
  • Google Compute Engine
  • OpenStack
  • Parallels
  • EQMU
  • VirtualBox
  • VMWare

何ができるの?

指定のプラットフォーム上に既存のツールを使って プロビジョニング済みの マシンイメージを作ることができます。

既存のツールって何?

  • Ansible
  • Cheff
  • Puppet などです。

やってみよう

お試しで、inline shellで適当にプロビジョニングしたAMIを作ってみます。

テンプレートを作る

Packerでいいことをするには、プラットフォームの設定とプロビジョニングの設定を含むテンプレートファイルを作る必要があります。

sample.json
{
  "builders": [
    {
      "type": "amazon-ebs",
      "access_key": "{{user `aws_access_key`}}",
      "secret_key": "{{user `aws_secret_key`}}",
      "region": "us-east-1",
      "source_ami": "ami-b73b63a0",
      "instance_type": "t2.micro",
      "ssh_username": "ec2-user",
      "ami_name": "ami-b73b63a0 base packed ami {{timestamp}}"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": [
        "sudo yum -y update",
        "sudo yum -y install nginx",
        "echo 'hello world.' > ~/packer.txt"
      ]
    }
  ]
}

packerで実行する

前述のjsonファイルを packer で実行してみます。

packer build sample.json

しばらくまっていると作成に成功したようです。

==> Builds finished. The artifacts of successful builds are:
--> amazon-ebs: AMIs were created:

us-east-1: ami-821a1695

EC2のインスタンスを確認すると、AMI作成に使ったインスタンスは行儀良く削除(terminate)されていました。

スクリーンショット 2016-12-13 20.01.36.png

更にAMIの中を確認したら、ありました。

スクリーンショット 2016-12-13 20.02.12.png

hello worldのファイルも確認できました。

最後に

実務で使う場合はansibleでprovisioningしてcapistranoでアプリケーションをdeployした後イメージ化したいですね。
確認してないですが、多分できるんだろう。出来るといいな。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1