シンプルな PaaS 「Now」で Go で書いたアプリのデプロイを試した
けっこう前に存在を知ったんですが、全然触っていなかったので試してみました。
Now 自体の説明は、公式サイト( Now – Realtime global deployments )や中の人の翻訳( http://qiita.com/nkzawa/items/8bf62549f79ebbcaafd8 )を読むのがいいと思います。
Now を運営している Zeit は、Next.js を開発していたり、Socket.IO の開発で有名な @rauchg が所属していて、そういった点でも興味を引きますね。 Now は、Node.js と Docker で動作するアプリのデプロイに対応しています。
今回は Go で書いたアプリを Docker をターゲットにデプロイしてみます。デプロイは、アプリのリポジトリに Dockerfile を用意して、now コマンドを叩くだけです。
事前にバイナリをビルドする
最初、golangをDockerでデプロイする — そこはかとなく書くよん。 のノリで事前にバイナリをビルド( GOOS=linux GOARCH=amd64 go build
)して、Dockerfile の COPY でバイナリを追加する形でのデプロイを試みました。
こんなかんじです。
FROM scratch LABEL name "hello" COPY hello /hello EXPOSE 80 ENTRYPOINT ["/hello"]
ただ、Go が出力するバイナリは helloworld 程度の内容でも 1 MB を超えるので(バイナリのサイズをめっちゃ減らす術があったら教えてください)、無料の OSS プランの最大ファイル容量( refs: ZEIT – Now Pricing )にひっかかってデプロイできませんでした。とぼとぼ。 ひとつ上の Premium プランであれば、問題なくデプロイできそうです。
デプロイの過程でビルドする
月 $15 は、お遊びで使うにはちょっと高いので、デプロイの過程でビルドさせることにしました。Dockerfile はこんなかんじです。
FROM golang:1.8 LABEL name "hello" WORKDIR /go/src/app COPY . . RUN go-wrapper download RUN go-wrapper install EXPOSE 80 ENTRYPOINT ["go-wrapper", "run"]
使ってみた感想として、now コマンドを叩くだけでデプロイできる( git を使う必要すらない )というところで、非常にお手軽です。 アプリが Now の固有の仕様に引きずられない、ロックインされないのも好印象でした。特に Docker の上で動かすことができれば、他の Docker に対応している PaaS への移行も容易なので気持ちが楽です。 ちょっとした静的サイトをサクッと公開したり、プレゼンのデモアプリや趣味アプリを動かすサービスとして、有力な選択肢のひとつではないでしょうか。