PackerとAnsibleでAzureのGolden Imageを作る(ARM対応)

Posted on Mar 17, 2016

いつの間に

ナイスな感じにイメージを作ってくれるPackerですが、いつの間にかAzure ARM対応のBuilderが出ておりました。0.10からかな。早く言ってください。

ansible_localと組み合わせたサンプル

さっそく試してそつなく動くことを確認しました。サンプルをGithubにあげておきます

手の込んだ設定もできるように、Provisonerにansible_localを使うサンプルで。

前準備

  • リソースグループとストレージアカウントを作っておいてください。そこにイメージが格納されます。
  • 認証情報の類は外だしします。builder/variables.sample.jsonを参考にしてください。
  • Packerの構成ファイルはOSに合わせて書きます。サンプルのbuilder/ubuntu.jsonはubuntuの例です。
    • Azure ARM BuilderはまだWindowsに対応していません。開発中とのこと。
  • ansibleはapache2をインストール、サービスEnableするサンプルにしました。

サンプル

ubuntu.jsonはこんな感じです。

{
  "variables": {
    "client_id": "",
    "client_secret": "",
    "resource_group": "",
    "storage_account": "",
    "subscription_id": "",
    "tenant_id": ""
  },
  "builders": [{
    "type": "azure-arm",

    "client_id": "{{user `client_id`}}",
    "client_secret": "{{user `client_secret`}}",
    "resource_group_name": "{{user `resource_group`}}",
    "storage_account": "{{user `storage_account`}}",
    "subscription_id": "{{user `subscription_id`}}",
    "tenant_id": "{{user `tenant_id`}}",

    "capture_container_name": "images",
    "capture_name_prefix": "packer",

    "image_publisher": "Canonical",
    "image_offer": "UbuntuServer",
    "image_sku": "14.04.3-LTS",

    "location": "Japan West",
    "vm_size": "Standard_D1"
  }],
  "provisioners": [{
    "type": "shell",
      "scripts": [
        "../script/ubuntu/provision.sh"
    ]
  },
  {
    "type": "ansible-local",
    "playbook_file": "../ansible/baseimage.yml",
    "inventory_file": "../ansible/hosts",
    "role_paths": [
      "../ansible/roles/baseimage"
    ]
  },
  {
    "type": "shell",
      "scripts": [
        "../script/ubuntu/deprovision.sh"
    ]
  }]
}

waagentによるde-provisionはansibleでもできるのですが、他OS対応も考えて、最後に追いshellしてます。他ファイルはGithubでご確認を。

これで手順書&目視&指差し確認でイメージ作るのを、やめられそうですね。