matobaの学んだこと

とあるPythonエンジニアのブログ。ソフトウェア開発、執筆活動、ライフログ。

Packerが何かわからなかったので調べました

packerってなんですか。って思ったので調べながら、メモしたやつを公開します。

経緯

「packerでamiを作って〜」みたいな話をある人がしているのを聞いた。

packerという何かがあるのはわかったけど、packerってなんだろう?って思った。

amiはよくわかってないけど、AWSのイメージかなんかだと思う。

というわけで、調べていこうと思う。

packerとは何かを調べる

まず、packerとは何か、を調べてみよう。

Google検索のサジェストには、以下のように表示された。

f:id:mtb_beta:20180926185226p:plain

AnsibleとかDockerに近いキーワードのようだ。

「デプロイとか環境構築とかの話に近いのかなー」と思いながら、とりあえず「packerとは」で調べてみる。

調べて出てきた情報

とりあえず、よくわかってないけど、5個くらい記事をざっと見したら、こんなイメージになった。

  • vagrantを開発してるHashiCorpが作ってる何か
  • コマンドラインから実行する何か
  • packerはGo言語で書かれていて、一つの実行ファイルになってる
  • Templateと呼ばれる設定ファイルからマシンイメージを作ることができる
  • Templateは、JSON形式のファイル
  • 1台あたりのマシンについて書く技術
  • AWSのEC2インスタンスの元になるAMIを作成できる(SECRET_KEYとかを指定する)
  • packerのTemplateにAnsibleのplaybookを指定して、provision実行できたAMIを作れる

なんかわかってきた気がする。

Dockerとの比較イメージ

今の理解で勝手にDockerと比較して見る。

Dockerの場合

  • Dockerデーモン上で動く
  • Dockerfileがイメージを記載したファイル
  • Dockerイメージが、実際の仮想マシンの素材
  • Dockerコンテナが、実際の仮想マシン

packerの場合

  • AWS上で動く
  • Templateがイメージを記載したファイル
  • AMIが、実際の仮想マシンの素材
  • インスタンスが、実際の仮想マシン

こんな感じだと思う。まあ、AWSじゃなくて、Virtualboxとか、さくらのクラウドとか、GCPとか他のクラウドでも動きそうな気がするけど、どちらにしてもマシンイメージを作る。

この辺りを見たら、だいたい同じようなことを書いてたし、合ってる気はする。

DockerとPackerの使い分け

Packerについて調べてると、Dockerの話がよく出てくる。

Packerは、VMというかOSレイヤーから塊を作るのに対して、Dockerは、Dockerの上で動く塊を作る。

いくつか記事を見た感じだと、一つ一つ丁寧にリリースしていくタイプのサービスは、Packerを使ってるような気がした。

逆に、素早くデプロイを繰り返すタイプのサービスは、Dockerを使ってるような気がした。

いろんな事例

いろんな事例を調べたので、メモしておきます。

Wantedly

wantedlyは、Dockerを使ってる様子。UIを頻繁に改善したいのかなーというイメージを持った。

トレタ

トレタは、Packerを使ってる様子。僕は知らなかったけどトレタは、予約/顧客台帳サービスの様子。法人向けのサービスだから丁寧にやりたいとかあるのかな。とか勝手に想像した。

英単語サプリ

このページは、TerraformとDockerと書いてるけど、中身を見るとPackerの話をしている。英語学習サービスのモバイル行動ログ収集基盤らしい。

メルカリ

メルカリは、モノリシックからマイクロに移行したいというのをよく見るけど、 このページを見ると、マイクロサービスにしてデプロイを早くしたいからDocker、という風にしてるのかなと、勝手に想像した。(難しくて、よくわからない)

SideCI

SideCIは、Packerを使ってるらしい。Dockerについては書いてなかったけど、SideCIは専属のインフラエンジニアがいない、というのを書いてたのが気になった。Dockerにするとインフラが複雑になるのかもしれない。

ソネット

ここを見ると、So-netの時期サービス基盤はPackerらしい。詳しくは読んでないけど、ヒューレットパッカードが担当してるし、ソネットはインフラの会社だから毎日デプロイという状況ではない気がする。

終わり

よくわからないけど、色々調べて見ました。

とりあえずPackerが何なのか、というのはわかってきた気がするので、次に気が向いたら、動かして見ようと思います。

参考ページ

以下、参考にみたページです。