{"componentChunkName":"component---src-modules-datocms-post-page-page-tsx","path":"/posts/11","result":{"data":{"post":{"title":"Packerを使ってOSの基礎イメージを作る","author":{"name":"reoring","images":{"r32":{"src":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&fm=png&h=32&mask=ellipse&w=32","srcSet":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1&fm=png&h=32&mask=ellipse&w=32 1x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1.5&fm=png&h=32&mask=ellipse&w=32 1.5x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=2&fm=png&h=32&mask=ellipse&w=32 2x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=3&fm=png&h=32&mask=ellipse&w=32 3x"},"r48":{"src":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&fm=png&h=48&mask=ellipse&w=48","srcSet":"https://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1&fm=png&h=48&mask=ellipse&w=48 1x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=1.5&fm=png&h=48&mask=ellipse&w=48 1.5x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=2&fm=png&h=48&mask=ellipse&w=48 2x,\nhttps://www.datocms-assets.com/29850/1591833154-735890.jpg?auto=format&dpr=3&fm=png&h=48&mask=ellipse&w=48 3x"}},"bio":"株式会社クラフトマンソフトウェア代表 | Schoo講師 | 分報発祥の会社 | YYPHP主催 | マンガでわかるDocker監修 | 実践ドメイン駆動設計レビュア | 自動受け入れテスト ShouldBee http://shouldbee.at/"},"date":"2013年8月2日","tags":[],"category":"プログラミング","body":"<p data-sourcepos=\"1:1-2:76\">PackerはOSの基礎イメージを様々な環境向けに構築できるコマンドラインツール。<br>\nVagrantを作成している、hashicorp社が開発しているみたい。</p>\n<p data-sourcepos=\"4:1-4:216\">テンプレートというJSONファイルを書き、それを基にEC2のAMIイメージや、Digital Oceanに基礎イメージを構築してくれる、もちろんVagrantのBoxファイルも作成できる。</p>\n<p data-sourcepos=\"6:1-6:161\">Vagrantの基礎イメージ構築にはVeeWeeなどを使っていたが、PackerであればVagrant以外のプロバイダにも同様に構築ができる。</p>\n<p data-sourcepos=\"8:1-8:226\">PackerはChefやPuppetのような構成管理ソフトウェアを置き換えるようなものではなく、それらのが動作するための基礎イメージをシンプルな手順で構築できるものらしい。</p>\n<p data-sourcepos=\"10:1-10:190\">Packerは各プラットフォーム向けにバイナリを提供しているので、ダウンロードして適当なディレクトリに配置する。PATHを通しておくと便利。</p>\n<p data-sourcepos=\"12:1-12:35\"><a href=\"http://www.packer.io/downloads.html\" target=\"_blank\" rel=\"noopener noreferrer\">http://www.packer.io/downloads.html</a></p>\n<p data-sourcepos=\"14:1-14:45\">早速AWSにイメージを作ってみる。</p>\n<p data-sourcepos=\"16:1-16:34\">まずはJSONファイルを書く</p>\n<h2 data-sourcepos=\"18:1-18:15\" id=\"0-1-0\" name=\"0-1-0\">\n<a class=\"anchor\" id=\"example.json\" name=\"example.json\" href=\"#example.json\" data-position=\"0-1-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"example.json\"> &gt; example.json</span></a>example.json</h2>\n<div class=\"code-block\" data-sourcepos=\"20:1-33:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>json</div>\n<div class=\"highlight\"><pre class=\"highlight json\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"builders\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\">\n    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"amazon-ebs\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"access_key\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"AWSのアクセスキー\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"secret_key\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"AWSのシークレットキー\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"region\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"us-east-1\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"source_ami\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"ami-de0d9eb7\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"instance_type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"t1.micro\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"ssh_username\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"ubuntu\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"ami_name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"packer-example {{.CreateTime}}\"</span><span class=\"w\">\n  </span><span class=\"p\">}]</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre></div>\n</div>\n<p data-sourcepos=\"35:1-35:49\">つぎに、JSONが正しいかを確認する。</p>\n<div class=\"code-block\" data-sourcepos=\"37:1-39:3\"><div class=\"highlight\"><pre class=\"highlight plaintext\"><code>packer validate example.json\n</code></pre></div></div>\n<p data-sourcepos=\"41:1-41:68\">Template validated successfully.と表示されれば問題ない。</p>\n<h2 data-sourcepos=\"44:1-44:18\" id=\"0-2-0\" name=\"0-2-0\">\n<a class=\"anchor\" id=\"構築を開始\" name=\"%E6%A7%8B%E7%AF%89%E3%82%92%E9%96%8B%E5%A7%8B\" href=\"#%E6%A7%8B%E7%AF%89%E3%82%92%E9%96%8B%E5%A7%8B\" data-position=\"0-2-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"構築を開始\"> &gt; 構築を開始</span></a>構築を開始</h2>\n<div class=\"code-block\" data-sourcepos=\"46:1-48:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>shell</div>\n<div class=\"highlight\"><pre class=\"highlight shell\"><code>packer build example.json\n</code></pre></div>\n</div>\n<p data-sourcepos=\"50:1-50:77\">正常に構築されると、構築されたAMIのIDを教えてくれる。</p>\n<div class=\"code-block\" data-sourcepos=\"51:1-75:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>shell</div>\n<div class=\"highlight\"><pre class=\"highlight shell\"><code>mazon-ebs output will be <span class=\"k\">in </span>this color.\n\n<span class=\"o\">==&gt;</span> amazon-ebs: Creating temporary keypair <span class=\"k\">for </span>this instance...\n<span class=\"o\">==&gt;</span> amazon-ebs: Creating temporary security group <span class=\"k\">for </span>this instance...\n<span class=\"o\">==&gt;</span> amazon-ebs: Authorizing SSH access on the temporary security group...\n<span class=\"o\">==&gt;</span> amazon-ebs: Launching a <span class=\"nb\">source </span>AWS instance...\n<span class=\"o\">==&gt;</span> amazon-ebs: Waiting <span class=\"k\">for </span>instance <span class=\"o\">(</span>i-7c70b010<span class=\"o\">)</span> to become ready...\n<span class=\"o\">==&gt;</span> amazon-ebs: Waiting <span class=\"k\">for </span>SSH to become available...\n<span class=\"o\">==&gt;</span> amazon-ebs: Connected to SSH!\n<span class=\"o\">==&gt;</span> amazon-ebs: Stopping the <span class=\"nb\">source </span>instance...\n<span class=\"o\">==&gt;</span> amazon-ebs: Waiting <span class=\"k\">for </span>the instance to stop...\n<span class=\"o\">==&gt;</span> amazon-ebs: Creating the AMI: packer-example 1375470030\n<span class=\"o\">==&gt;</span> amazon-ebs: AMI: ami-c21357ab\n<span class=\"o\">==&gt;</span> amazon-ebs: Waiting <span class=\"k\">for </span>AMI to become ready...\n<span class=\"o\">==&gt;</span> amazon-ebs: Terminating the <span class=\"nb\">source </span>AWS instance...\n<span class=\"o\">==&gt;</span> amazon-ebs: Deleting temporary security group...\n<span class=\"o\">==&gt;</span> amazon-ebs: Deleting temporary keypair...\nBuild <span class=\"s1\">'amazon-ebs'</span> finished.\n\n<span class=\"o\">==&gt;</span> Builds finished. The artifacts of successful builds are:\n<span class=\"nt\">--</span><span class=\"o\">&gt;</span> amazon-ebs: AMIs were created:\n\nus-east-1: ami-c21357ab\n</code></pre></div>\n</div>\n<h2 data-sourcepos=\"78:1-78:31\" id=\"0-3-0\" name=\"0-3-0\">\n<a class=\"anchor\" id=\"VagrantのBoxを作成する\" name=\"Vagrant%E3%81%AEBox%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B\" href=\"#Vagrant%E3%81%AEBox%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B\" data-position=\"0-3-0\"><i class=\"fa fa-link\"></i><span class=\"hidden\" data-text=\"VagrantのBoxを作成する\"> &gt; VagrantのBoxを作成する</span></a>VagrantのBoxを作成する</h2>\n<p data-sourcepos=\"80:1-81:182\">Packerには、post-processorという仕組みが用意されていて、構築後の処理が行えるようだ。<br>\n標準で提供されている、vagrant用のpost-processorを使用すると、構築されたAMIイメージを立ち上げるためのVagrant Boxファイルが作成できる。</p>\n<div class=\"code-block\" data-sourcepos=\"83:1-98:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>json</div>\n<div class=\"highlight\"><pre class=\"highlight json\"><code><span class=\"p\">{</span><span class=\"w\">\n  </span><span class=\"nl\">\"builders\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[{</span><span class=\"w\">\n    </span><span class=\"nl\">\"type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"amazon-ebs\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"access_key\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"AWSのアクセスキー\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"secret_key\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"AWSのシークレットキー\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"region\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"us-east-1\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"source_ami\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"ami-de0d9eb7\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"instance_type\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"t1.micro\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"ssh_username\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"ubuntu\"</span><span class=\"p\">,</span><span class=\"w\">\n    </span><span class=\"nl\">\"ami_name\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"s2\">\"packer-example {{.CreateTime}}\"</span><span class=\"w\">\n  </span><span class=\"p\">}],</span><span class=\"w\">\n\n  </span><span class=\"nl\">\"post-processors\"</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"p\">[</span><span class=\"s2\">\"vagrant\"</span><span class=\"p\">]</span><span class=\"w\">\n</span><span class=\"p\">}</span><span class=\"w\">\n</span></code></pre></div>\n</div>\n<p data-sourcepos=\"100:1-100:100\">これを実行すると、boxファイルができがるので、vagrant box add で追加する。</p>\n<p data-sourcepos=\"102:1-102:79\">その後、vagrant init で取り込んだBox名を指定して実行する。</p>\n<div class=\"code-block\" data-sourcepos=\"104:1-121:3\">\n<div class=\"code-filename\">\n<i class=\"fa fa-file-code-o\"></i>ruby</div>\n<div class=\"highlight\"><pre class=\"highlight ruby\"><code><span class=\"c1\"># -*- mode: ruby -*-</span>\n<span class=\"c1\"># vi: set ft=ruby :</span>\n\n<span class=\"no\">Vagrant</span><span class=\"p\">.</span><span class=\"nf\">configure</span><span class=\"p\">(</span><span class=\"s2\">\"2\"</span><span class=\"p\">)</span> <span class=\"k\">do</span> <span class=\"o\">|</span><span class=\"n\">config</span><span class=\"o\">|</span>\n    <span class=\"n\">config</span><span class=\"p\">.</span><span class=\"nf\">vm</span><span class=\"p\">.</span><span class=\"nf\">box</span> <span class=\"o\">=</span> <span class=\"s2\">\"packer_test\"</span>\n\n    <span class=\"n\">config</span><span class=\"p\">.</span><span class=\"nf\">vm</span><span class=\"p\">.</span><span class=\"nf\">provider</span> <span class=\"ss\">:aws</span> <span class=\"k\">do</span> <span class=\"o\">|</span><span class=\"n\">aws</span><span class=\"p\">,</span> <span class=\"n\">override</span><span class=\"o\">|</span>\n        <span class=\"n\">aws</span><span class=\"p\">.</span><span class=\"nf\">access_key_id</span> <span class=\"o\">=</span> <span class=\"s2\">\"AWSのアクセスキー\"</span>\n        <span class=\"n\">aws</span><span class=\"p\">.</span><span class=\"nf\">secret_access_key</span> <span class=\"o\">=</span> <span class=\"s2\">\"AWSのシークレットキー\"</span>\n\n        <span class=\"n\">aws</span><span class=\"p\">.</span><span class=\"nf\">keypair_name</span> <span class=\"o\">=</span> <span class=\"s2\">\"packer\"</span>\n\n        <span class=\"n\">override</span><span class=\"p\">.</span><span class=\"nf\">ssh</span><span class=\"p\">.</span><span class=\"nf\">username</span> <span class=\"o\">=</span> <span class=\"s2\">\"ubuntu\"</span>\n        <span class=\"n\">override</span><span class=\"p\">.</span><span class=\"nf\">ssh</span><span class=\"p\">.</span><span class=\"nf\">private_key_path</span> <span class=\"o\">=</span> <span class=\"s2\">\"~/packer_test/packer.pem\"</span>\n    <span class=\"k\">end</span>\n<span class=\"k\">end</span>\n</code></pre></div>\n</div>\n<p data-sourcepos=\"123:1-123:107\">そして、vagrant up --provider=aws を実行すると、Packerで構築した環境が立ち上がる。</p>\n<p data-sourcepos=\"125:1-125:77\">あとはいつものようにvagrant sshすれば、ログインできる。</p>\n"}},"pageContext":{"id":"DatoCmsPost-5142941-ja","description":"PackerはOSの基礎イメージを様々な環境向けに構築できるコマンドラインツール。 Vagrantを作成している、hashicorp社が開発しているみたい。 テンプレートというJSONファイルを書き、それを基にEC2のAMIイメージや、Digital Oceanに基礎イメージを構築してくれる、もちろんVagrantのBoxファイルも作成できる。 Vagrantの基礎イメージ構築にはVeeWeeなどを使っていたが、PackerであればVagrant以外のプロバイダにも同様に構築ができる。 PackerはChefやPuppetのような構成管理ソフトウェアを置き換えるようなものではなく、それらのが動","toc":[{"tag":"h2","depth":2,"href":"#example.json","text":"example.json","html":"example.json"},{"tag":"h2","depth":2,"href":"#%E6%A7%8B%E7%AF%89%E3%82%92%E9%96%8B%E5%A7%8B","text":"構築を開始","html":"構築を開始"},{"tag":"h2","depth":2,"href":"#Vagrant%E3%81%AEBox%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B","text":"VagrantのBoxを作成する","html":"VagrantのBoxを作成する"}],"ogpImageUrl":"https://www.datocms-assets.com/29850/1593190022-pastedimage20200627146.png?fm=png&mark64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9NDAwJmg9NjQmZml0PWNyb3AmYmxlbmQ2ND1hSFIwY0hNNkx5OTNkM2N1WkdGMGIyTnRjeTFoYzNObGRITXVZMjl0THpJNU9EVXdMekUxT1RFNE16TXhOVFF0TnpNMU9Ea3dMbXB3Wno5dFlYTnJQV1ZzYkdsd2MyVW1abTA5Y0c1bkpuYzlNalUySm1nOU1qVTImYmxlbmQtaD02NCZibGVuZC14PTAmYmxlbmQteT0wJmJsZW5kLW1vZGU9bm9ybWFsJm1hcms2ND1hSFIwY0hNNkx5OWhjM05sZEhNdWFXMW5hWGd1Ym1WMEwzNTBaWGgwUDNSNGRDMWhiR2xuYmoxdGFXUmtiR1VsTWtOc1pXWjBKblI0ZEMxbWIyNTBQWE5oYm5NdGMyVnlhV1lsTWtOaWIyeGtKblI0ZEMxamIyeHZjajB5TWpFNE1UWW1kSGgwTmpROVkyMVdkbU50YkhWYWR5WjBlSFF0YzJsNlpUMHpNQ1pvUFRZMCZtYXJrLXg9NjQmbWFyay1hbGlnbj1taWRkbGUlMkNsZWZ0&mark-align=bottom%2Cleft&mark-x=100&mark-y=496&blend64=aHR0cHM6Ly93d3cuZGF0b2Ntcy1hc3NldHMuY29tLzI5ODUwLzE1OTMxNTQ2MzYtdHJhbnNwYXJlbnQtcGl4ZWwucG5nP3c9MTIwMCZoPTYzMCZmaXQ9Y3JvcCZtYXJrNjQ9YUhSMGNITTZMeTkzZDNjdVpHRjBiMk50Y3kxaGMzTmxkSE11WTI5dEx6STVPRFV3THpFMU9UTXhOVEE1TkRBdFkzSmhablJ6YldGdUxUQXhMbkJ1WncmbWFyay1hbGlnbj10b3AlMkNjZW50ZXImbWFyay13PTI1MCZtYXJrLXk9ODAmYmxlbmQ2ND1hSFIwY0hNNkx5OWhjM05sZEhNdWFXMW5hWGd1Ym1WMEwzNTBaWGgwUDNSNGRDMWhiR2xuYmoxdGFXUmtiR1VsTWtOalpXNTBaWEltZEhoMExXWnZiblE5YzJGdWN5MXpaWEpwWmlVeVEySnZiR1FtZEhoMExYQmhaRDB4TURBbWRIaDBMV052Ykc5eVBUSXlNVGd4TmlaMGVIUTJORDFWUjBacVlUSldlVFEwUzFNMVRESmZORFJIYWpRMFIyMVVNVkJxWjJFM2JHNDNjbTV3U1RkcVozRlVhbWMyU0dwbk4zcHFaM0pxYW1kd1RHdDJXbnBxWjI5ekpuUjRkQzF6YVhwbFBUVTFKbmM5TVRJd01DWm9QVFl6TUEmYmxlbmQtbW9kZT1ub3JtYWw&blend-mode=normal","otherPost":{"type":"author","title":"ディープラーニングやろうぜ! MacBookPro-MacOSX10.10にGPUを使えるCaffeをビルドする","slug":"/posts/32"}}}}